VBA:我的程序在格式上引发编译错误

所以我正在与我的计划。 它工作和运行,所以我复制它,并做了第二个版本,我可以添加额外的function,同时还有一个工作程序。 我没有看到我的新代码的任何问题,所以我准备步入它。 突然之间在我的另一个版本中工作得很好的东西是抛出编译错误。 下面的细节。

Dim elapsedTime As String Dim startTime As Date startTime = Now() 'code elapsedTime = Format(Now() - startTime, "h:m:s") 

我一次又一次地检查,但是这个完全相同的代码在我的其他文件中工作正常。 在此文件中,它突出显示“格式”并引发以下编译错误。 编译错误:参数或属性

有谁知道为什么excel会越来越难过呢? 如果有编译错误,我甚至应该看看它突出显示的地方吗?

你有一些名为Format 某个地方在范围内(即可以从那里调用Format函数的地方访问), Format函数是你想要调用的Format函数的阴影

由于YowE3K的build议,如果你右键单击Format调用,并select“定义”(或Shift + F2 ),这将带你到影子宣言。

从那里你有几个select:

  • 重命名Format标识符[并且可能会破坏代码中的大量内容]
  • 完全限定Format调用,即VBA.Strings.Format ,或只是Strings.Format ,甚至VBA.Format

我的build议是完全限定这个调用,然后尝试再次编译,并完全限定导致相同编译错误的任何/所有调用。 然后重新命名为Format任何名称,以便它不再影响 VBA标准库中的函数。

如果您使用的是Rubberduck (我pipe理的一个开源的VBIDE插件项目),您可以轻松find所有的shadowing标识符的引用:

显示所有参考的Rubberduck工具栏

当“ Format引用正确的函数时,Rubberduck工具栏会告诉您:

显示VBA.Strings.Format的Rubberduck工具栏

而且你也可以很容易地find所有的参考资料,不pipe是否合格 – 所以很容易就可以完全符合他们的要求。

Rubberduck也使得重构/重命名函数变得容易,search/replace失败:

“格式”功能重命名为“重命名”,VBA.Strings.Format调用保持不变

巧合的是,目前正在开展一项新的代码检查工作,特别是定位这样的阴影标识符


至于ByRef参数types不匹配,看起来你的屏幕截图与你发布的代码不匹配,所以任何事情都是可能的,但除非eqnMakeEqn函数的主体中被赋值(它应该被返回 ,而不是赋值 ),那么没有必要通过它ByRef (隐式或显式) – 它可以通过ByVal (Rubberduck给你一个检查结果 – 隐式返回types,另一个隐式Public访问修饰符在这两个过程中,和几个其他人在您发布的代码中的其他问题)。