1

VBAコードをある単語文書から別の文書にコピーするために、以下のコードがあります(私はC#を使用しています)。モジュールでは機能しますが、ユーザーフォームでは機能しないようです。

VBComponent sourceVBC = GetSourceDocVB();
VBComponent targetVBC = document.VBProject.VBComponents.Add(sourceVBC.Type);
string codes = sourceVBC.CodeModule.get_Lines(1, sourceVBC.CodeModule.CountOfLines);
targetVBC.CodeModule.AddFromString(codes);
targetVBC.Name = sourceVBC.Name;

はい、ユーザーフォームはターゲットドキュメントにコピーされますが、フィールドはコピーされません。ラベルとテキストボックスが含まれている場合と同様です。これらのフィールドはコピーされません。ここで何か不足していますか?

4

1 に答える 1

3

はい、何かが欠けています。フォームはコード ファイルだけでは定義されませんが、バイナリ ファイルも必要です。ソースファイルが生成される方法については何も教えていません。通常、VBA では、VBComponent オブジェクトの「Export」ステートメントを使用します。もちろん、Word の VBA エディターに移動し、プロジェクト コンポーネントを右クリックして [エクスポート] を選択することで、手動で行うこともできます。エクスポート フォルダーを調べると、フォームが "Form1.frm" (コードを含む) と "Form1.frx" (ラベルなどのバイナリ フォーム データを含む) の 2 つのファイルとして保存されていることがわかります。 . 他のプロジェクトでは、フォームをインポートする場合にバイナリ定義を処理するファイル、インポート機能を手動で使用できます。

VBA では、次のようなものを使用してプロジェクトからエクスポートできます。

For Each vbC In ActiveDocument.VBProject.VBComponents
  Select Case vbC.Type

    Case vbext_ct_StdModule
        strVbcExt = ".bas"
    Case vbext_ct_ClassModule
        strVbcExt = ".cls"
    Case vbext_ct_MSForm
        strVbcExt = ".frm"
    Case Else
  End Select

  strvbCName = vbC.Name
  strFilename = strPath & "\" & strvbCName & strVbcExt
  vbC.Export strFilename
(omitted the rest)

インポートするには、次を使用します

ActiveDocument.VBProject.VBComponents.Import strFilename
于 2012-02-22T04:09:14.320 に答える