4

Excel ボタンの作成と vba コード機能の追加について質問があります。ボタンとモジュールのコードを作成しましたが、それらを関連付ける方法がわかりません。誰でも方法を教えてもらえますか?

ボタンの私のコード:

 Excel.Shape btn = xlWorkSheet5.Shapes.AddOLEObject("Forms.CommandButton.1", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 300, 10, 150, 22);

 Excel.OLEObject sheetBtn = (Excel.OLEObject)xlWorkSheet5.OLEObjects(btn.Name);
            sheetBtn.Object.GetType().InvokeMember("Caption", System.Reflection.BindingFlags.SetProperty, null, sheetBtn.Object, new object[] { "Calculate Bus Load" });

モジュールのコード:

 String sCode = "Sub main()\r\n" +
                "   MsgBox \"Hello world\"\r\n" +
                "end Sub";

 VBA.VBComponent oModule = xlWorkBook.VBProject.VBComponents.Add(VBA.vbext_ComponentType.vbext_ct_StdModule);
            oModule.Name = "Module1";
            oModule.CodeModule.AddFromString(sCode);

            xlWorkBook.VBProject.VBComponents.Item(1).CodeModule.AddFromString(sCode);
4

2 に答える 2

4

私はインターネットで検索しましたが、有用なものは何も見つかりませんでした。そのため、頭をすっきりさせ、C# のヘルプにもう一度集中し、それを適切に行う方法を見つけました。

私のコード:

String updateBT "...// macro code for button";   
VBA.VBComponent oModule1 = xlWorkBook.VBProject.VBComponents.Add(VBA.vbext_ComponentType.vbext_ct_StdModule);
oModule1.Name = "Update";
oModule1.CodeModule.AddFromString(updateBT);

Excel.Shape btn2 = xlWorkSheet1.Shapes.AddFormControl(Excel.XlFormControl.xlButtonControl, 150, 5, 150, 22);
btn2.Name = "Update";
btn2.OnAction = "... // name of your macro code";
btn2.OLEFormat.Object.Caption = "... // Button name";
于 2012-12-19T14:14:09.707 に答える
1

私が理解している限り、ボタンを押したときcallからコード/マクロモジュールへの中間が必要です。そのため、コードがトリガーされ、必要な処理を実行します。buttonclick

通常の方法で、例えば

  • Excelシートにボタンを追加します
  • on_clickイベントを選択
  • 次のようなコードを追加しますcall mySub

C#内でそれを行う必要があります。

モジュール名とコントロール名を調整してください。これがサンプルです。

//Within your above code add,

sheetBtn.Click += new MSForms.CommandButtonEvents_ClickEventHandler(sheetBtn_Click);

}

//button click event triggers

void sheetBtn_Click()
{
     call subMain
     // try a test using : MessageBox.Show("button test!");  
}

**このチュートリアルを試してみてくださいそれはあなたが必要とするものをほとんど持っています。

C#からExcelで記述されたシートサブまたはモジュールサブを呼び出すだけの主題に従って、run macroメソッドを使用できます。

//instead of this.application, you call refer to the Excel app object
this.Application.Run("yourMacroName",missing,missing........)

参照:

于 2012-12-14T14:02:15.533 に答える