Word在从标题中删除带有VBA的形状时崩溃

Word在从标题中删除带有VBA的形状时崩溃,vba,ms-word,Vba,Ms Word,(免责声明:就职业而言,我不是VBA程序员) 附加到功能区中的按钮,我有代码在Word文档中切换公司徽标。 一个按钮用于A型徽标,第二个按钮用于B型徽标,第三个按钮用于无徽标(徽标在纸上) 首先,我使用removeLogo删除徽标,然后使用setLogoAt将其添加到请求的徽标中 单击第一个按钮即可(例如,对于徽标类型A),徽标将添加到文档的标题中。当我点击其他按钮时(例如,对于B类徽标),Word崩溃(可能是在删除当前徽标时) 我的代码(或者不太可能是Word)有什么问题 编辑 我一步一步地输

(免责声明:就职业而言,我不是VBA程序员)

附加到功能区中的按钮,我有代码在Word文档中切换公司徽标。 一个按钮用于A型徽标,第二个按钮用于B型徽标,第三个按钮用于无徽标(徽标在纸上)

首先,我使用
removeLogo
删除徽标,然后使用
setLogoAt
将其添加到请求的徽标中

单击第一个按钮即可(例如,对于徽标类型A),徽标将添加到文档的标题中。当我点击其他按钮时(例如,对于B类徽标),Word崩溃(可能是在删除当前徽标时)

我的代码(或者不太可能是Word)有什么问题

编辑

我一步一步地输入代码。在到达
removeLogo
中的
shaptemodelete.Delete
行之前,一切正常。在这里,Word很难崩溃,即使在调试时也是如此。我正在使用Word 2007(这是一项要求)

edit2 我清除了所有宏、所有normals.dot和所有自动加载模板,然后使用上述两个例程和此测试方法创建了一个新文档:

Sub test()
    setLogoAt 5, "C:\path\to\logo.jpg"
    removeLogo
    setLogoAt 6, "C:\path\to\logo.jpg"
End Sub
当我运行
test
时,它在
removeLogo
shapeToDelete.Delete中崩溃

编辑3
我“解决”了这个问题,首先让页眉/页脚在Word中查看活动视图,然后删除形状,然后返回正常视图。很奇怪。它可以工作,但作为一名程序员,我不高兴。

我以前遇到过这个问题,通常会出现一个自动化错误:“调用的对象已与其客户端断开连接”。我还没有找到解决办法

但是,一个好的解决方法是隐藏形状而不是删除它

因此:


shapeToDelete.Visible=False

另一种可能的解决方案是先尝试选择形状,然后删除选择:

形状删除。选择 选择。删除

如果这样做有效,您可能需要关闭屏幕更新,否则Word在文档中移动时会闪烁。

这样做有效: 我只有两个盒子要隐藏,所以这不是一般的

Private Sub btnPrint_Click()
    Dim hdrShapes As Shapes
    Dim S As Shape
    Dim aTohide(2) As String
    Dim iNdx, i As Integer
    iNdx = 0

     ' Hide buttons and print
    Set hdrShapes = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes
    ' GET BUTTON NAMES (ACTUALLY TEXT BOXES
    For Each S In hdrShapes
        If S.Type = msoTextBox Then
            aTohide(iNdx) = S.Name
            iNdx = iNdx + 1
        End If
    Next
    ' now hide , use the arrays as the  for each statement crashes
    For i = 0 To 1
        hdrShapes(aTohide(i)).Visible = msoFalse
    Next
    ' print it
    With ActiveDocument
        .PrintOut
    End With
    ' and unhide the buttons
    For i = 0 To 1
        hdrShapes(aTohide(i)).Visible = msoTrue
    Next

    Set hdrShapes = Nothing
End Sub

无论调用的顺序和次数如何,这两个函数对我来说都运行正常。他们乐于添加和删除徽标。很明显,还有其他代码调用这些。也许错误就在那里,或者在按钮代码本身中。你需要调试,例如,用F8一步一步来确定它崩溃的确切位置。这里有一个有趣的例子。我运行了你的测试代码,前两次它运行得很好,第三次它崩溃了Word,接下来14次它运行得很好。发生了一些事情,但在某些机器上看起来是不可重复的。祝你好运,抱歉我不能贡献。谢谢你的努力!看来我的Word 2007安装确实有问题。我将尝试查找其他实例进行测试。
Private Sub btnPrint_Click()
    Dim hdrShapes As Shapes
    Dim S As Shape
    Dim aTohide(2) As String
    Dim iNdx, i As Integer
    iNdx = 0

     ' Hide buttons and print
    Set hdrShapes = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes
    ' GET BUTTON NAMES (ACTUALLY TEXT BOXES
    For Each S In hdrShapes
        If S.Type = msoTextBox Then
            aTohide(iNdx) = S.Name
            iNdx = iNdx + 1
        End If
    Next
    ' now hide , use the arrays as the  for each statement crashes
    For i = 0 To 1
        hdrShapes(aTohide(i)).Visible = msoFalse
    Next
    ' print it
    With ActiveDocument
        .PrintOut
    End With
    ' and unhide the buttons
    For i = 0 To 1
        hdrShapes(aTohide(i)).Visible = msoTrue
    Next

    Set hdrShapes = Nothing
End Sub