9

日本語の文字を含むプライベート定数文字列を (VBA クラス モジュールで) 宣言したいと考えています。宣言で初期化子として受け入れられる可能性のあるリテラルを構築するString(またはリテラルを何らかの形で組み合わせる) 方法はありますか? Constつまり、次のようなものです:

Private Const MY_CONST = ...

また

Private Const MY_CONST As String = ...

MS Excel v14.0.6112.5000 (MS Office Professional Plus 2010) を使用しています。

うまくいかないもの:

  • 日本語の文字を文字列リテラル (例: ... = "変数") に直接貼り付けます。これは、VBA エディターが文字を台無しにするためです。
  • 初期化子では関数呼び出しが許可されていないため、ChrW()or ChrW$()(例: )を使用します。... = ChrW$(22793) & ChrW$(25968)Const

が好きではないもの

  • プロパティにアクセスするたびに文字列が再作成されるため、Const作成して文字列を返すことで偽造します(さらに、混乱し、醜いです...しかし、最後の2つはむしろ好みの問題です)。Private Property Get
4

3 に答える 3

4

プロパティにアクセスするたびに文字列が再作成されるため、Private Property Get を作成して Const を偽装します (さらに、紛らわしく醜いですが、最後の 2 つのことは好みの問題です)。

プロパティにアクセスするたびに文字列を再作成する必要はありません。

これは好みの問題としてはまだ醜いですが、読み取り専用プロパティを作成し (プロシージャ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

そして、次のように呼び出します。

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

[A1].Value = c.UnicodeString

End Sub
于 2014-05-15T14:17:10.017 に答える
3

VBA ソースファイルのエンコーディングは Windows-1252 で、日本語はサポートされていません。

ソース ファイルのエンコーディングを変更することはできないため、バイナリに相当するものを記述してから、使用する前に変換する必要があります。

Const str = vbTab & "Ype" ' I use vbTab because the VBA editor replaces tabulation with spaces
'...
ustr = StrConv(str, vbFromUnicode)
'ustr value is now "変数"

メモ帳を使用して文字列を変換します。Unicode 文字列をコピーして貼り付け、ファイルを Unicode (utf-8 ではなく) として保存し、ANSI として開きます。次に、最初の 2 文字 (ÿþ) を除いて VBA エディターにコピーして貼り付けます。 BOM マーカーです

説明

変数はU+5909 U+6570UTF 0x09 0x59 0x70 0x65-16LE (Windows Unicode エンコーディング) の Unicode であり、このシーケンス<tab>Ypeは Windows-1252 に対応します。

于 2014-05-15T12:41:50.737 に答える