【问题标题】:How can I delete an object which is the subject of a loop?如何删除作为循环主题的对象?
【发布时间】:2016-12-23 22:24:20
【问题描述】:

我遇到的问题是用户正在从一个内容控件复制并意外将其粘贴到另一个内容控件中。当从这个表单中提取数据时,它会提取额外的 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

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

【问题讨论】:

  • 对 I=0 到 .contentcontrols.count 尝试类似的操作,设置 CCTrl = .contentcontrols(I)

标签: excel vba for-loop ms-word


【解决方案1】:

我认为对于 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

【讨论】:

    【解决方案2】:

    因此,经过一番折腾并研究了局部变量属性如何随着代码的逐步变化,我发现该行:

    CCtrl.ParentContentControl.Range.Text = CCtrlText
    

    实际上是将其 ParentCC 范围属性中的内容控件 (CC) 替换为输入文本,因此删除了重复的 CC。

    CCtrl.Delete 试图删除一个已被删除的对象,这导致它抛出错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 2017-12-17
      • 2011-01-19
      • 2019-11-10
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 2018-10-22
      相关资源
      最近更新 更多