Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从Visual Studio调用exel工作簿中的VBA宏_Excel_Vba_Vb.net_Visual Studio_Excel Addins - Fatal编程技术网

Excel 从Visual Studio调用exel工作簿中的VBA宏

Excel 从Visual Studio调用exel工作簿中的VBA宏,excel,vba,vb.net,visual-studio,excel-addins,Excel,Vba,Vb.net,Visual Studio,Excel Addins,我有一个excel工作簿,在单击按钮时运行一些VBA代码。我想调用的函数如下所示。我想使用VB从Visual Studio调用该函数。有没有办法创建工作簿实例并调用该函数?(该函数需要Excel加载项,这就是我需要工作簿的原因。)提前感谢各位 Private Sub CommandButton2_Offline_Click() 想要调用单击事件处理程序意味着一件事:您看到的是在事件处理程序本身中实现的宏 把它搬出去。处理程序由其事件源调用;“手动”调用它们是可怕的做法;你不想那样做。更不用说处

我有一个excel工作簿,在单击按钮时运行一些VBA代码。我想调用的函数如下所示。我想使用VB从Visual Studio调用该函数。有没有办法创建工作簿实例并调用该函数?(该函数需要Excel加载项,这就是我需要工作簿的原因。)提前感谢各位

Private Sub CommandButton2_Offline_Click()

想要调用
单击事件处理程序意味着一件事:您看到的是在事件处理程序本身中实现的宏

把它搬出去。处理程序由其事件源调用;“手动”调用它们是可怕的做法;你不想那样做。更不用说处理程序只能存在于类模块中,这意味着您需要获取该类的对象实例,以便能够定位其公共成员-其私有成员将更加复杂。如果幸运的话,该类是一个工作表模块,那么您可以免费获得它的工作簿范围实例

在任何情况下,您最不想做的事情就是“将处理程序
公开”
,并直接调用它。改为重构:

理想情况下,您应该将该方法放在标准模块中:

Public Sub GoOffline()
    '...
    ' all the code that's currently in CommandButton2_Offline_Click
    '...
End Sub
这样,您只需从.NET代码中调用
应用程序。以
ModuleName.GoOffline“
作为参数运行


至于创建工作簿实例,有一种工厂方法:
工作簿。打开
-您的.NET代码需要有一个
Excel.Application
实例才能使用。

您可以更改工作簿代码吗?调用私有成员比调用公共成员要困难得多。很好,我试试看,CommandButton2\u officelne\u Click()方法可能会让人厌烦。它实际上已经从事件处理程序中调用了,所以我所要做的就是公开它。我已经能够从VB中调用该函数,我遇到了一个关于我正在使用的加载项的问题。外接程序是ATPVBAEN.XLAM!(分析工具包)。它告诉我外接程序不存在,即使它在使用excel调用时可以工作。
Public Sub GoOffline()
    '...
    ' all the code that's currently in CommandButton2_Offline_Click
    '...
End Sub