gpt4 book ai didi

excel - 我可以在 VBA 中定义一个常量以在 Excel 工作表中使用吗?

转载 作者:行者123 更新时间:2023-12-04 20:27:25 25 4
gpt4 key购买 nike

我可以在我的 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")

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

最佳答案

That works, but an actual constant would be better. Is there a way to do that?



没有。

Excel 和 VBA 是两个不同的东西:它们使用预定义的管道相互通信,并且该接口(interface)表示标准模块中的公共(public)过程被公开为“宏”,标准模块中的公共(public)函数被公开为用户定义的函数。另一方面,VBA 通过其对象模型与 Excel 对话。

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

不管它值多少钱,那个魔术字符串驱动的功能并不理想。调用者最终可能会摸不着头脑,想知道它是否需要“KB”、“Kb”、“kB”或“kb”( Option Compare Binary 是 VBA 中的默认字符串比较机制,即区分大小写),或者它可能是“千字节”?确保支持的值有据可查,并使用 StrComp使用文本而不是二进制比较以使匹配不区分大小写。

考虑为每个常量公开一个函数/UDF。这将消除魔术字符串并增强 UDF 的可用性。
Public Function BytesInKB() As Long
BytesInKB = CLng(1024)
End Function

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

关于excel - 我可以在 VBA 中定义一个常量以在 Excel 工作表中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57499875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com