我正在一个有Visual Studio C#Excel加载项项目(VSTO)的项目中工作。从VSTO代码中,我将带有按钮的功能区添加到Excel(Office.IRibbonExtensibility)。从Excel中添加的按钮中,我可以对C#代码(在VSTO加载项中)的方法进行回调调用。我正在寻找(但没有找到)从该按钮调用Excel文件中的VBA代码的VBA(功能子)的方法。换句话说,从描述的按钮中,我知道如何调用C#中的代码,但不知道如何调用Excel文件本身中的VBA代码。我花了很多时间搜索信息并测试了一些盲目的想法,但是从测试中发现任何东西或获得一些好的结果都没有成功。我希望朝正确的方向开球。
这是可能的。您必须注意,尽管工作簿处于活动状态,但VSTO加载项在应用程序中加载时,VBA代码存储在特定的工作簿中。除非开发人员知道,否则彼此都不了解。为了实现这种交互,您必须了解以下内容:1.宏保存工作簿的名称;2.宏名称。
知道这一点,您将可以应用3d注释中发布的解决方案。下面是一个例子。先决条件:1.我已经准备了启用宏的工作簿“ VBA.xlsm”;2.此工作簿的常规模块中有一个名为“ Foo”的宏。
实施:1.创建新的VSTO加载项;2.添加名为“ Ribbon1”的功能区(可视设计器),并将其设置为具有“自定义” ControlIdType(作为单独的选项卡,称为“测试”);3.在该功能区上添加一个名为“ callVBA”的按钮,该按钮将检查工作簿的名称并尝试运行工作簿的宏。
我没有向ThisAddIn.cs类添加任何代码。我使用的唯一代码-在Ribbon类的按钮click事件中:
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
}
private void callVBA_Click(object sender, RibbonControlEventArgs e)
{
if (Globals.ThisAddIn.Application.ActiveWorkbook.Name == "VBA.xlsm")
{
Globals.ThisAddIn.Application.Workbooks["VBA.xlsm"].Application.Run("Foo");
}
}
}