CRMシステムによって制御されるMSWordDDE自動化で問題が発生しています。
セットアップ
作成されるドキュメントのベースは、Document.Newでマクロを起動するWord.dotテンプレートです。このマクロ内に、COMに登録された.Netコンポーネントを作成します。
Set myCOMObject = CreateObject("MyCOMObject")
コンポーネントはデータベースからいくつかのデータを取得し、WordDocumentVariablesに割り当てられた文字列値を渡します。
Set someClass = myCOMObject.GetSomeClass(123)
ActiveDocument.Variables("docaddress") = someClass.GetSenderAddress(456)
コンポーネントから返されるすべての文字列値は、UTF-16(コードページ1200)でエンコードされます。
何が起こるのですか
この問題は、CRMシステムがWordを呼び出してDDE(winword.exe / n / dde)によって新しいドキュメントを作成するときに発生します。コンポーネントからの文字列値はUTF-8でエンコードされた文字列に変換されます。
テンプレート内のすべての静的テキストはUTF-16で適切にエンコードされたままです。たとえば、DocumentVariables内のumlautüはc3 b0に変換され、ドキュメントの残りの部分はfcのままです(16進エディターでチェックされたファイル)。
同じマクロ機能を持つテンプレートから直接(DDEなしで)ドキュメントを作成している場合、すべての文字列は問題ありません。つまり、UTF-16でエンコードされます。
副作用 テンプレートから新しいドキュメントを作成する場合は、このドキュメントを開いたままにして、DDEによって制御される新しいドキュメントを作成すると、文字が正しくエンコードされます。
これは逆の場合にも機能します。DDE制御のドキュメントを作成すると、2番目のドキュメントを直接作成するときに、最初に文字エンコードが壊れます。