生成/删除对象时MS Word 2013崩溃

时间:2013-12-04 09:52:14

标签: vba object ms-word word-vba word-2013

我正在使用Word 2013生成一些对象,并在新一代之前删除它们。但有时Word在这种情况下崩溃,所有VBA代码都被删除了。以下是添加生成对象的代码:

For i = 1 To nodes
   Set arrShapes(j) = docNew.Shapes.AddShape(MsoAutoShapeType.msoShapeDiamond, arrRawPoints(i, 1) - 2, arrRawPoints(i, 2) - 2, 4, 4)
   arrShapes(j).title = "A" + Str(j) + "d"
   arrShapes(j).Fill.ForeColor.RGB = RGB(255, 0, 0)
   j = j + 1
Next i

删除代码如下:

For Each sp In arrShapes
  If Not (sp Is Nothing or IsEmpty(sp)) Then
    tl = Left(sp.title, 1)
    If tl = "A" Then
        tl = Mid(sp.title, 2, Len(sp.title) - 2)
        nr = Int(tl)
        sp.Delete
        Set arrShapes(nr) = Nothing
    End If
  End If
Next sp

有时会发生崩溃,但如果我将此例程调用50次或更多次,则会完美运行。碰巧用户手动删除这样生成的对象,然后我就崩溃了。为了找到原因,我在For Each循环中的第一行设置了断点,但每次Word崩溃。这个概念有什么问题?

1 个答案:

答案 0 :(得分:0)

我认为解决方案非常明显 - 删除时需要从最后一项循环到第一项,因此需要切换到不同类型的循环。您的(第二个)代码可能如下所示:

For i=arrShapes.Count to 1 step -1
   'you dont need if statement here
   tl = Left(arrShapes.Item(i).Title, 1)
   if tl = "A" then
    tl = Mid(arrShapes.Item(i).Title, 2, Len(arrShapes.Item(i).Title) - 2)
    'rather dont' need it any more: nr = Int(tl)
    arrShapes.Item(i).Delete
    'rather dont' need it any more: Set arrShapes(nr) = Nothing
   end if
Next i

未经测试!可能需要进行一些调整,因为代码中的所有内容都不清楚。