【问题标题】:Delete lines above contentcontrol, run time 5941 error - the requested member of the collection does not exist删除 contentcontrol 上面的行,运行时 5941 错误 - 请求的集合成员不存在
【发布时间】:2017-12-01 18:27:55
【问题描述】:

我有一个带有复选框的用户表单,如果未选中该复选框,那么我希望删除并向上移动内容控件。

我的文档中有如下内容控件:

Header 1
Body 1

Header 2 
Body 2

Header 3
Body 3

每个标题和正文都链接到 1 个复选框,即标题 3 和正文 3 如果未选中复选框,则应删除并向上移动

我有此代码,但收到一条错误消息,提示不存在,但已通过使用相同的代码仅选择而不是删除来检查 100% 是否存在。

    If cc.Tag = "DER2" Then
        If DERcb.Value = False Then
            With ActiveDocument.ContentControls(46)
                ActiveDocument.Range(.Range.Start - 1, .Range.End + 2).Select
                Selection.Delete
            End With
        End If
    End If

【问题讨论】:

  • 您的文档中有 46 个ContentControls 吗?总是?你的错误出现在哪一行?
  • 是的,我这样做是因为它适用于直到这个数字之前的每个内容控件并且直到那里都不会引发错误,是否可以通过标签而不是数字来引用内容控件?

标签: vba ms-word


【解决方案1】:

我猜测这段代码是在某种循环中......

所以可能发生的是您正在寻找第 46 个 ContentControl 然后将其删除。好吧...假设您的文档中有 50 个 ContentControl。

这是 ContentControls 的 Collection。现在您删除文档中的第 46 个 ContentControl --> 现在文档中有 49 个 ContentControl。

您可以再删除 3 次 ContentControl(46)(每次都不同),然后您将只有 45 个 ContentControl。

现在,尝试删除 ContentControl(46)...它不存在,只剩下 45 个。 VBA 通过抛出错误 > Requested Member of the Collection does not exist 来告诉您这一点(意味着您要求 ContentControl(46) 但它不存在)。

如果是这样,有两种前进方式......

With ActiveDocument.ContentControls(ActiveDocument.ContentControls.Count)

For i = ActiveDocument.ContentControls.Count to 1 Step -1
...
    With ActiveDocument.ContentControls(i)

【讨论】:

  • 我不确定这是在做什么,如果特定的复选框值为 false,我希望它删除当前所在的内容控件。但是我希望它也删除内容控件上方和下方的行,以便它“向上移动”,因此段落之间没有空格
  • 试过这个: If cc.Tag = "NS2" Then If NScb.Value = False Then With ActiveDocument.ContentControls(ActiveDocument.ContentControls.Count) ActiveDocument.Range(.Range.Start - 1, . Range.End + 2).Select Selection.Delete End If End If End If
  • 假设那是我打算放它的地方,但它不起作用
  • 您能否在您的问题中添加更多代码,以便更容易看到您在做什么,也会更新答案。
  • 啊,好吧,确定你想看什么,
【解决方案2】:
     If cc.Tag = "DI" Then
    If DIcb.Value = False Then
    With ActiveDocument.SelectContentControlsByTag("DI").Item(1)
    ActiveDocument.Range(.Range.Start - 2, .Range.End + 2).Select
    Selection.Delete
    End With
    End If
    End If

上面解决了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多