1

我的目标是使用我的应用程序(用 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 中的“设计模式”

4

0 回答 0