我有一个关于创建excel按钮并在其上添加vba代码功能的问题。我创建了一个按钮和模块代码,但不知道如何在它们之间建立关系。谁能告诉我怎么样?
我的Button代码:
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);
答案 0 :(得分:4)
我已经在互联网上搜索过但没有找到任何有用的内容,所以我清醒了一下,再次专注于c#help,我找到了答案,如何正确地做到这一点。
我的代码:
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";
答案 1 :(得分:1)
据我了解,当您在按钮上call
时,您需要button
中的click
代码/宏模块。因此,代码会被触发并执行您希望它执行的操作。
以通常的方式,例如
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!");
}
** PLEASE TRY THIS TUTORIAL OUT它几乎有你需要的东西。
根据主题,只需调用C#中用Excel编写的工作表子模块或模块子,您可以使用run macro
方法。
//instead of this.application, you call refer to the Excel app object
this.Application.Run("yourMacroName",missing,missing........)