我有一个最初在Windows 7 32位计算机上创建的Word文档,由于切换到Windows 7 64位,现在给我带来了问题。这两个系统都运行Word 2010(v14.0.7173.5000,32位)。Word文档具有许多ActiveX标签,以及一个较大的宏,该宏将每个ActiveX标签链接到Excel文档中的特定单元格。这样,我更新了Excel文件,然后运行Word宏更新了所有标签。
这是在Win7 x86计算机上打开Word文档时,ActiveX标签在VBA中的外观:
但是,在Win7 x64计算机上打开文档时,标签的末尾会重命名为“ 1”:
因为我的VBA代码本身没有更改,所以如果运行宏,则会收到错误消息“对象库无效或包含对找不到的对象定义的引用”。如果我尝试通过删除“ 1”来修复标签,则会收到“检测到歧义名称”错误消息。
如果我在标签中用额外的“ 1”重新保存文件,则在Win7 x86计算机上打开时,新标签将保留并可见。然后,同一台计算机可以删除多余的“ 1”,但是如果我尝试在Win7 x64计算机上执行相同的操作,则会再次收到“检测到歧义名称”错误消息。
有谁知道导致此问题的原因以及解决方法?
似乎您的控件需要对其名称进行固定/更改。您可以在设计模式下手动执行此操作。
或者,您可以更新代码,以代替此:
ThisDocument.ai_oos_01.Caption = "whatever"
你来做这件事:
FixControlNameAndSetCaption "ai_oos_01", "whatever"
只需抓取以下过程并将其放入标准模块(例如Module1
):
Public Sub FixControlNameAndSetCaption(ByVal controlName As String, ByVal newCaption As String)
Dim wordShape As InlineShape
For Each wordShape In ThisDocument.InlineShapes
With wordShape.OLEFormat.Object
If Left$(.Name, Len(controlName)) = controlName Then
If .Name <> controlName Then .Name = controlName
.Caption = newCaption
Exit Sub
End If
End With
Next
End Sub
现在,如果控件完全.Name
匹配指定的控件controlName
,则.Caption
只会更改(这是您的代码当前应该执行的操作)。如果没有那个讨厌的数字后缀,则控件.Name
将与指定的控件匹配,则它将控件重命名为指定的控件,从而有效地“治愈”了控件的名称。controlName
controlName
但是,如果您有合法的/期望的控件名称Foobar01
和Foobar012
,那么除了强烈建议您在命名事物时避免使用数字后缀,并始终给它们起有意义的/描述性的名称之外,我没有其他解决方案。
不ThisDocument.ai_oos_01
直接引用的含义是,如果以某种方式再次重命名了对象,则代码仍然可以编译并运行(我怀疑文档损坏,或者有人复制了所有控件和/或删除了原始控件,这可能是偶然的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句