2016-09-17 4 views
1

テンプレートからワークブックを作成しています。テンプレートには、すでに必要なコードモジュールが含まれています。私は、コードモジュール(コードは常に異なるので、ここで何百ものものがあるようにここで働くことはありません.basファイルを持っている)にインポートする必要があるコードモジュールの1つへの参照を取得しようとしています。C#を使用して特定のVBAコードモジュールにアクセスする

私は簡単に

var codeModule = excelWorkbook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule); 

を使用して、新しいコードモジュールにアクセスすることができますしかし、私は介して可変インスタンス化ワークブック

//initialize the Excel application and make it invisible to the user. 
     var excelApp = new Excel.Application 
     { 
      UserControl = false, 
      Visible = false 
     }; 

     //Create the Excel workbook and worksheet - and give the worksheet a name. 
     var excelWorkbook = excelApp.Workbooks.Open(TemplateFilePath); 
     excelWorkbook.Author = Acknowledgements.Author; 
     var bookPath = excelWorkbook.Path; 

     //add the macro code to the excel workbook here in the Methods module. 
     //this adds a new module, how do I access an existing one? 
     var codeModule = excelWorkbook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule); 

私ができるだけループ内の既存の「方法」のコードモジュールにアクセスする必要があります名前の一致をテストすることでそれを得ることができますが、コードの1行でそれを取得する方法が必要です。

答えて

1

は、名前または数値インデックスによって、既存のVBComponentを取得するためにVBComponentsコレクションのItemメソッドを使用します。

VBIDE.VBComponent component = excelWorkbook.VBProject.VBComponents.Item("Methods"); 
VBIDE.CodeModule module = component.CodeModule; 
+0

はちょうどそれを考え出したし、テスト。確認ありがとう – dinotom

関連する問題