我的目标是使用我的应用程序(用 Visual c++ 2010 编写)在 excel 中打开一些文件并运行用 VBA 编写的宏
这是我现在拥有的代码
try
{
System::Object^ oMissing = System::Reflection::Missing::Value;
Excel::Application^ pExcel = gcnew Excel::Application();
pExcel->Visible = true;
Excel::Workbooks^ pBooks = pExcel->Workbooks;
Excel::_Workbook^ pBook = pBooks->Open(_XLSFile, ... );
Excel::_Workbook^ pBook2 = pBooks->Open(_XMLFile, ... );
Excel::_Workbook^ pBook3 = pBooks->Open(_MacroFile, ... );
pExcel->Run(macroName, ... );
// ....
}
catch(Exception^ e)
{
System::Windows::Forms::MessageBox::Show(e->Message);
}
我省略了 Open() 和 Run() 所需的 20ish“System::Reflection::Missing::Value”参数。
Run 命令抛出异常,被捕获,消息框显示错误:
Cannot run the macro '<macroName>'. The macro may not be available in this workbook or all macros may be disabled
我的问题是这个消息出现在一个宏文件而不是另一个宏文件上,即使它们非常相似并且都确实在其中定义了宏。
我认为这与启用宏有关,excel 使用户手动执行。我的困惑是为什么它适用于一个文件而不适用于另一个文件。
非常感谢任何有关如何解决此问题的建议!
编辑:我的特定问题的解决方案(虽然我不确定它为什么起作用)是将我的宏文件放入 VBA IDE 中的“设计模式”