1

私は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

サブ終了

4

1 に答える 1

0

まず、VBA コードで .NET 名前空間を使用することはできません。VBA プログラムで VB クラスを使用するのは誤りです。互換性はありません。

この問題を解決する方法は、UTF32 を使用しないことです。ただし、これらのシンボルの多くには、デュアル UTF-16 エンコーディングもあります。たとえば、パンの記号 (UTF-32 0x1f35e) は、2 つの UTF-16 エントリ (0xD83C 0xDF5E (d83cdf5e)) で入力することもできます。

http://www.fileformat.info/info/unicode/char/1f35e/index.htm

File Format.info は、その翻訳を見つけるのに役立つサイトです。シンボルを 17 ビットを超えるものに置き換えるには、次のように入力します。

.Replacement.Text = ChrW(最初) & ChrW(2番目)

ここで、first は複合 UTF-16 エントリーの前半で、second は複合 UTF-16 エントリーの後半です。

経験則としては、疑わしい場合は、手動でマクロを記録してから、結果をリバース エンジニアリングすることをお勧めします。

于 2015-11-23T23:27:44.133 に答える