私はWord用のVBAをいじっています.Word文書でバッチ検索/置換を行うプロジェクトに取り組んでいます。検索/置換用語のリストを .csv からインポートしました。
私が直面している問題は、単語を単語を表す記号に置き換えたいということです。たとえば、パンという単語を使用している場合、パンを表す UTF-32 記号 (Unicode 10 進数 127838/16 進数 0x1f35e) に置き換えます。組み込みの MS-Word の検索/置換を使用して手動でこれを行っていたとき、これはうまく機能しました。置換ボックスに alt+127838 と入力するだけで問題なく動作しましたが、UTF-32 の検索/置換を実行しましたバッチが問題を引き起こしているようです。
ChrW() を使用すると、ChrW は 65,535 までの値しか受け入れないため、範囲外になります。17 番目のビットを処理できません。プラグインしようとすると、実行時エラーが発生します。
\U エスケープ文字を使用してみましたが、文字通り "\U127838" に置き換えられただけで、あまり役に立ちません。VBA が Unicode エスケープ文字をサポートしているかどうかは不明です。引用符で囲まないと、構文エラーが発生します。
私はプログラミングは初めてではありませんが、VBA と VB は初めてです。オンラインで調べたところ、VB の UTF32Encoding クラスが VBA で動作しないようです
https://msdn.microsoft.com/en-us/library/system.text.utf32encoding(v=vs.90).aspx
VB と VBA のニュアンスに慣れていない可能性がありますが、イニシャライザを試してみると、次のようになりました。
Dim u32LE As New UTF32Encoding(False, True)
VBA コードで構文エラーが発生しました。
Imports ステートメントを使用してみましたが、コンパイラも混乱しました。何か間違っているのか、それとも VBA がこのクラスをサポートしていないのかはわかりません。
VBA が UTF32 文字の出力をサポートしていない場合はお知らせください。代わりに Python や Java などを使用してみてください。あなたの助けは大歓迎です!
ここに私が書いている関数を見てください。エラーが発生したため、インポート行をコメントアウトしました(「.Text」を強調表示しているメソッドまたはメンバーが見つかりませんでした)
Sub findReplaceUnicode(ByVal findItem As String, unicode As Long)
'Imports System.Text
Dim u32LE As New UTF32Encoding(False, True)
Selection.find.ClearFormatting
Selection.find.Replacement.ClearFormatting
With Selection.find
.Text = findItem
.Replacement.Text = ChrW(unicode)
.Replacement.font.Name = "Segoe UI Symbol"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.find.Execute replace:=wdReplaceAll
サブ終了