我的目标是使用我的应用程序(用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”参数。
“运行”命令抛出异常,被捕获,消息框显示错误:
Cannot run the macro '<macroName>'. The macro may not be available in this workbook or all macros may be disabled
我的问题是这个消息是针对一个宏文件而不是另一个宏文件出现的,即使它们非常相似并且两者都确实在其中定义了宏。
我认为它与启用宏有关,excel使用户可以手动执行。我的困惑是为什么它适用于一个文件而不是另一个文件。
非常感谢任何有关如何解决这个问题的建议!
编辑:我的特定问题的解决方案(虽然我不确定它为什么有效)是将我的宏文件放入VBA IDE中的“设计模式”