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

我在 Internet 上进行了搜索,但没有找到任何有用的东西,所以我清除了我的思绪并再次通过 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 回答