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