Excel 2016 VBA说"含糊不清的名字"但功能声明独特(升级前工作)

时间:2017-10-13 16:43:08

标签: vba excel-2016

我在Excel 2016工作簿(Windows 10)中有一个VBA宏,它已存在并工作多年(它是在我还在使用Office 2010时编写的)。我已经升级到Office 2016,但现在宏失败并出现错误:"检测到不明确的名称:bIgnore"。这是代码失败的行

If Not bIgnore(strDesc) Then

bIgnore函数在我的所有模块中只声明一次,如下所示:

Function bIgnore(pDesc As String)
    'If the description is in the "Ignore List" sheet then return True
    Dim nRow As Integer

    Set wIgnore = Worksheets("Ignore List")

    nRow = 1
    While wIgnore.Range("A" & nRow).Value <> ""
        If InStr(1, pDesc, wIgnore.Range("A" & nRow).Value) > 0 Then
            bIgnore = True
            Exit Function
        End If
        nRow = nRow + 1
    Wend

    bIgnore = False

 End Function

任何想法为什么它现在被编译器视为含糊不清?

2 个答案:

答案 0 :(得分:0)

模糊名称是一个编译错误,它总是意味着VBA在同一范围内看到至少两个具有相同名称的标识符。

通常编译错误应该只是带你到那里,并突出显示有问题的声明。

除此之外,您可以使用VBE的搜索(Ctrl + F)功能并尝试找到错误的声明,但该工具相当基本/弱,并且不会列出所有结果 - 它迭代而不是......这可能很痛苦。

或者您可以尝试使用Rubberduck 查找符号(Ctrl + T)命令(假设代码可以解析... Rubberduck主要假设代码是首先可以编译),并查看该名称的每个声明 - 如果 Code Explorer (Ctrl + R)没有显示问题:

Rubberduck's 'Code Explorer' and 'Find Symbol' tools showing the duplicate declarations

免责声明:我非常积极参与Rubberduck VBIDE插件的开发。

另一种选择,因为Rubberduck使用符号表和作用域规则来解析标识符引用,将重构/重命名(Ctrl + Shift + R)函数比方说,IsIgnored,然后再次使用查找符号找到剩余的bIgnore声明:这应该是你的罪魁祸首。

答案 1 :(得分:0)

我尝试更换&#34; bIgnore&#34;的所有实例。与&#34; blIgnore&#34;并查看它是否仍然存在冲突。

如果错误消失,那肯定是关键字冲突。