【问题标题】:Call a VBA Macro in an exel Workbook from Visual Studio从 Visual Studio 调用 excel 工作簿中的 VBA 宏
【发布时间】:2019-02-17 05:41:42
【问题描述】:

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

Private Sub CommandButton2_Offline_Click()

【问题讨论】:

  • 您可以更改工作簿代码吗?调用私人成员比调用公共成员要困难得多。

标签: excel vba vb.net visual-studio excel-addins


【解决方案1】:

想要调用 Click 事件处理程序意味着一件事:您正在查看在事件处理程序本身中实现的宏。

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

在任何情况下,您最不想做的就是“只创建处理程序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 实例才能使用。

【讨论】:

  • 完美 我试一试,CommandButton2_Offilne_Click() 方法可能会让人们失望。它实际上已经从事件处理程序中调用了,所以我所要做的就是公开它。
  • 我已经能够从 VB 调用该函数,但我遇到了关于我正在使用的加载项的问题。插件是 ATPVBAEN.XLAM! (分析工具包)。它告诉我加载项不存在,即使它在使用 excel 调用时有效。
猜你喜欢
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
相关资源
最近更新 更多