在来自 Visual Studio 的 excel 工作簿中调用 VBA 宏
Call a VBA Macro in an exel Workbook from Visual Studio
我有一个 excel 工作簿,它在单击按钮时运行一些 VBA 代码。我要调用的函数如下所示。我想使用 VB 从 Visual Studio 调用函数。有没有办法创建工作簿的实例并调用该函数? (Excel 该功能需要加载项,这就是我需要工作簿的原因。)在此先感谢大家。
Private Sub CommandButton2_Offline_Click()
想要调用 Click
事件处理程序意味着一件事:您正在查看在事件处理程序本身中实现的宏。
搬出去。处理程序由它们的事件源调用;调用它们 "manually" 是一种糟糕的做法;你不想那样做。更不用说处理程序只能存在于 class 模块中,这意味着您需要获得 class 的 对象实例 才能找到它的 public 成员 - 它的 private 成员会更难找到。如果幸运的话,class 是一个工作表模块,因此您可以免费获得它的工作簿范围实例。
无论如何,您最不想做的就是"just make the handler Public
"并直接调用它。 重构改为:
Private Sub CommandButton2_Offline_Click()
GoOffline
End Sub
理想情况下,您将该方法放在标准模块中:
Public Sub GoOffline()
'...
' all the code that's currently in CommandButton2_Offline_Click
'...
End Sub
这样,您需要做的就是从您的 .NET 代码中以 "ModuleName.GoOffline"
作为参数调用 Application.Run
。
至于制作工作簿实例,有一个工厂方法:Workbooks.Open
- 您的 .NET 代码需要有一个 Excel.Application
要使用的实例。
我有一个 excel 工作簿,它在单击按钮时运行一些 VBA 代码。我要调用的函数如下所示。我想使用 VB 从 Visual Studio 调用函数。有没有办法创建工作簿的实例并调用该函数? (Excel 该功能需要加载项,这就是我需要工作簿的原因。)在此先感谢大家。
Private Sub CommandButton2_Offline_Click()
想要调用 Click
事件处理程序意味着一件事:您正在查看在事件处理程序本身中实现的宏。
搬出去。处理程序由它们的事件源调用;调用它们 "manually" 是一种糟糕的做法;你不想那样做。更不用说处理程序只能存在于 class 模块中,这意味着您需要获得 class 的 对象实例 才能找到它的 public 成员 - 它的 private 成员会更难找到。如果幸运的话,class 是一个工作表模块,因此您可以免费获得它的工作簿范围实例。
无论如何,您最不想做的就是"just make the handler Public
"并直接调用它。 重构改为:
Private Sub CommandButton2_Offline_Click()
GoOffline
End Sub
理想情况下,您将该方法放在标准模块中:
Public Sub GoOffline()
'...
' all the code that's currently in CommandButton2_Offline_Click
'...
End Sub
这样,您需要做的就是从您的 .NET 代码中以 "ModuleName.GoOffline"
作为参数调用 Application.Run
。
至于制作工作簿实例,有一个工厂方法:Workbooks.Open
- 您的 .NET 代码需要有一个 Excel.Application
要使用的实例。