Word VBA:ActiveX标签的“检测到歧义名称”

温诺格

我有一个最初在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计算机上执行相同的操作,则会再次收到“检测到歧义名称”错误消息。

有谁知道导致此问题的原因以及解决方法?

马修·金登(Mathieu Guindon)

似乎您的控件需要对其名称进行固定/更改。您可以在设计模式下手动执行此操作

或者,您可以更新代码,以代替此:

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

但是,如果您有合法的/期望的控件名称Foobar01Foobar012,那么除了强烈建议您在命名事物时避免使用数字后缀,并始终给它们起有意义的/描述性的名称之外,我没有其他解决方案。

ThisDocument.ai_oos_01直接引用的含义是,如果以某种方式再次重命名了对象,则代码仍然可以编译并运行(我怀疑文档损坏,或者有人复制了所有控件和/或删除了原始控件,这可能是偶然的)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章