VBA 中的 Unicode 字符串文字

8 string excel vba unicode-literals

我想声明(在 VBA 类模块中)一些包含日语字符的私有常量字符串。有没有办法构造String可以在Const声明中作为初始值设定项接受的文字(或以某种方式组合文字)?即类似:

Private Const MY_CONST = ...
Run Code Online (Sandbox Code Playgroud)

或者

Private Const MY_CONST As String = ...
Run Code Online (Sandbox Code Playgroud)

我使用 MS Excel v14.0.6112.5000 (MS Office Professional Plus 2010)。

什么不起作用

  • 将日语字符直接粘贴到字符串文字(例如... = "??")中,因为 VBA 编辑器会弄乱字符;
  • 使用ChrW()ChrW$()(例如... = ChrW$(22793) & ChrW$(25968)),因为在Const初始化程序中不允许函数调用。

什么我不喜欢

  • Const通过创建Private Property Get返回字符串来伪造,因为每次我访问该属性时都会重新创建该字符串(另外,令人困惑和丑陋......但是,好吧,最后两件事是一个品味问题)。

Dav*_*ens 4

通过创建 Private Property Get 返回字符串来伪造 Const,因为每次访问该属性时都会重新创建该字符串(另外,令人困惑且丑陋......但是,好吧,最后两件事相当个人喜好问题)。

您无需在每次访问该属性时重新创建该字符串。

虽然这仍然很难看,但创建一个只读属性(本质上是Const,因为它没有Property Let过程),并在事件中构造字符串Class_Initialize

'## CLASS MODULE
Private pUnicodeString As String

Sub Class_Initialize()
    pUnicodeString = ChrW(22793) & ChrW(25968)
End Sub

Property Get UnicodeString() As String
    UnicodeString = pUnicodeString
End Property
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

'## STANDARD MODULE
Sub Test()
Dim c As myClass
Set c = New myClass

[A1].Value = c.UnicodeString

End Sub
Run Code Online (Sandbox Code Playgroud)