如何删除作为循环主体的对象?

时间:2016-08-17 10:06:34

标签: excel vba for-loop ms-word

我遇到的问题是用户正在从一个内容控件进行复制并将其意外粘贴到另一个内容控件中。从这个表单中提取数据时,它会获取额外的CC,因此两次获取值。

在提取数据时,我试图查看CC是否有ParentCC然后将其删除,但我一直在

  

运行时错误5825:对象已被删除。

我能理解为什么,但我不确定如何绕过它,我搜索过的任何东西似乎都无效。

'With Word document Statement precedes this
For Each CCtrl In .ContentControls

    CCtrlText = CCtrl.Range.Text

    If Not CCtrl.ParentContentControl Is Nothing Then
        CCtrl.ParentContentControl.Range.Text = CCtrlText
        CCtrl.Delete
    End If
Next

如何删除在另一个内部重复的内容控件并保留输入信息?

2 个答案:

答案 0 :(得分:0)

所以在经过一些讨论并调查局部变量属性如何改变后,我发现了这一行:

CCtrl.ParentContentControl.Range.Text = CCtrlText

实际上用输入文本替换了它的ParentCC范围属性中的内容控制(CC),因此删除了重复的CC。

CCtrl.Delete试图删除一个已被删除的对象,并且该错误导致错误。

答案 1 :(得分:0)

我认为使用foreach循环,您无法在不影响循环功能的情况下更改列表/数组的内容。如果您改为使用索引器,它应该允许您更改集合,因为您不会影响循环(数字到数字):

Dim i As Integer
Dim c As ContentControl

For i = 1 To d.ContentControls.Count
  Set c = d.ContentControls(i)
  c.Delete
Next i