Word VBA:"检测到模糊名称" for ActiveX Labels

时间:2016-10-24 21:21:45

标签: vba ms-word word-vba

我有一个最初在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中的外观:

enter image description here

但是,当在Win7 x64计算机上打开文档时,标签将重命名为" 1"最后:

enter image description here

因为我的VBA代码本身没有变化,如果我运行宏,我收到错误消息"对象库无效或包含对无法找到的对象定义的引用"。如果我通过删除" 1"来尝试修复标签,我会检测到"模糊名称"错误信息。

如果我用额外的" 1"重新保存文件?在标签中,在Win7 x86机器上打开时,新标签会保留并可见。然后,同一台机器可以删除额外的" 1"但是如果我尝试在Win7 x64机器上执行相同操作,我会检测到"模糊名称"错误消息。

有谁知道造成这个问题的原因,以及如何修复它?

1 个答案:

答案 0 :(得分:1)

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

或者您可以更新代码,而不是:

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

现在,如果控件&#39; .Name完全匹配指定的controlName,只有.Caption会发生变化(这是您的代码当前应该做的事情)。如果控件&#39; .Name 匹配指定的controlName ,如果那个讨厌的数字后缀不是,那么它会将控件重命名为指定的{{ 1}},有效地治疗&#34;你的控制名称。

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

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

相关问题