我可以在 VBA 中定义要在 Excel 工作表中使用的常量吗?



我可以在 xlam 文件中定义一个常量,然后可以在所有工作簿中使用,而不是在多个工作簿中使用相同的定义名称吗?

例如,在 VBA 中:

Public Const nKilobyte = 1024

然后在工作表中:

=A1 / nKilobyte 

我试过这个,但出现#NAME?错误。现在,看起来工作表可以引用VBA中定义的函数,但不能引用常量。因此,作为解决方法,我编写了以下函数:

Public Function vConstant(sName As String) As Variant
Select Case sName
Case "kb": vConstant = 1024
Case "Mb": vConstant = 1024 ^ 2
End Select
End Function

然后我可以在工作表中调用它为:

=A1 / vConstant("kb")

这行得通,但实际常数会更好。有没有办法做到这一点?

这有效,但实际常量会更好。有没有办法做到这一点?

不。

Excel 和 VBA 是两个独立的东西:它们使用预定义的管道相互通信,并且该接口表示标准模块中的公共过程作为"宏"公开,标准模块中的公共函数作为用户定义的函数公开。在另一个方向上,VBA通过其对象模型与Excel进行对话。

Excel 计算引擎对保存全局变量和常量的运行时值的 VBA 运行时上下文一无所知:这纯粹是在 VBA 方面。事实上,假设常量在编译的代码中甚至不存在并不是不合理的 - C# 代码中实际上是这种情况:编译器在调用站点就地"烧录"常量的值。打开编译的 p 代码并发现所有常量都只是内联到他们的调用站点中,我不会感到惊讶......但这只是猜测。

无论它的价值如何,魔术字符串驱动的函数都不理想;调用者最终可能会挠头,想知道它是否需要"KB","Kb","kB"或"kb"(Option Compare Binary是VBA中的默认字符串比较机制,即区分大小写),或者可能是"KiB"?确保支持的值已详细记录,并将StrComp文本而不是二进制比较一起使用,以使匹配不区分大小写。

考虑为每个常量公开单个函数/UDF。这将消除魔术字符串并增强UDF的可用性。

Public Function BytesInKB() As Long
BytesInKB = CLng(1024)
End Function
Public Function BytesInMB() As Long
BytesInMB = CLng(1024) ^ 2
End Function

相关内容

最新更新