首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VBA:全局常量字符串

VBA:全局常量字符串
EN

Stack Overflow用户
提问于 2019-04-25 06:00:30
回答 1查看 8.8K关注 0票数 3

我正在处理Excel中用于数学的特殊字符。

(指数⁴、GRΣΣK和其他混合Unicode字符。)

我希望将常用的Unicode字符串存储为全局常量,因为这可能比每次需要时调用CStr()要快得多(也不容易出错)。

例如,我在所有函数之外都有以下声明:

Public Const STRPOWER0        As String = CStr(ChrW(&H2070)) '0th power
Public Const STRPOWER1        As String = "¹" 'CStr(ChrW(&HB9)) 1st power
Public Const STRPOWER2        As String = "²" 'CStr(ChrW(&HB2)) 2nd power
Public Const STRPOWER3        As String = "³" 'CStr(ChrW(&HB3)) 3rd power
Public Const STRPOWER4        As String = CStr(ChrW(&H2074)) '4th power
Public Const STRPOWER5        As String = CStr(ChrW(&H2075)) '5th power
Public Const STRPOWER6        As String = CStr(ChrW(&H2076)) '6th power
Public Const STRPOWER7        As String = CStr(ChrW(&H2077)) '7th power
Public Const STRPOWER8        As String = CStr(ChrW(&H2078)) '8th power
Public Const STRPOWER9        As String = CStr(ChrW(&H2079)) '9th power
Public Const STRPOWERNEGATIVE As String = CStr(ChrW(&H207B)) 'Superscript negative sign

问题是,每当我尝试引用这些字符串中的一个时,值都是Empty

(如果我打开Option Explicit,我会得到Variable not defined的错误)

我做错了什么?

VBA不支持全局常量作为字符串吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-25 06:32:02

不幸的是,您不能使用函数将值设置为常量。Const的用途是在运行时之前设置常量的值,函数只能在运行时返回值。

您的问题似乎是您的常量没有在模块的declarations section中声明,这就是为什么在运行任何代码时不会出现编译错误的原因。

然而,还有一些替代方案。

您可以为每个变量创建一个函数:

Function STRPOWER0() As String
    STRPOWER0 = CStr(ChrW(&H2070))
End Function

Sub Main()
    Msgbox STRPOWER0
End Sub

您明确指出,每次调用STRPOWER0时,您都会担心运行CStr()ChrW()函数。虽然您可能只会受到非常小的性能影响-即使在多次调用时也是如此-但您可以使用Static变量仅在运行时第一次执行转换。

Function STRPOWER0() As String
    Static RetVal As String
    If RetVal = "" Then RetVal = CStr(ChrW(&H2070))
    STRPOWER0 = RetVal
End Function

Sub Main()
    Msgbox STRPOWER0
End Sub

Static允许变量RetVal在整个运行时期间保留其数据,即使函数超出范围也是如此。

另一种选择是在运行开始时使用sub来设置所有变量:

'This line in declarations section of module
Public STRPOWER0$, STRPOWER1$, STRPOWER2$ ', etc

Private Sub SetPubVars

    STRPOWER0 = CStr(ChrW(&H2070))
    STRPOWER1 = CStr(ChrW(&HB9))
    STRPOWER2 = CStr(ChrW(&HB2))

    ' So on

End Sub

Sub MAIN()

    ' Set the values
    SetPubVars

    MsgBox STRPOWER0

End Sub
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55839176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档