Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用JACOB运行个人宏_Java_Vba_Excel_Jacob - Fatal编程技术网

在Java中使用JACOB运行个人宏

在Java中使用JACOB运行个人宏,java,vba,excel,jacob,Java,Vba,Excel,Jacob,这个问题以前曾被问过,但从未得到任何答案 如果将宏保存到特定(非个人宏)工作簿,则可以运行宏 打开Excel文件后,我无法使个人宏工作。这给了我一个错误 com.jacob.com.ComFailException:调用:运行 资料来源:Microsoft Excel 描述:很抱歉,我们找不到C:\Users\Me\Documents\!私人的,私人的。它是否可能被移动、重命名或删除? 逻辑表明程序正在错误中声明的文件路径中查找我的宏,但我有点困惑,为什么它首先要检查该文件路径。此外,如果它正在

这个问题以前曾被问过,但从未得到任何答案

如果将宏保存到特定(非个人宏)工作簿,则可以运行宏

打开Excel文件后,我无法使个人宏工作。这给了我一个错误

com.jacob.com.ComFailException:调用:运行
资料来源:Microsoft Excel
描述:很抱歉,我们找不到C:\Users\Me\Documents\!私人的,私人的。它是否可能被移动、重命名或删除?

逻辑表明程序正在错误中声明的文件路径中查找我的宏,但我有点困惑,为什么它首先要检查该文件路径。此外,如果它正在检查错误的文件路径,如何使它指向正确的路径

我的代码:

 public static void main(String[] args) throws IOException{
 final File file = new File( "path");
            final String macroName = "!PERSONAL.XLSB!Macro";
            callExcelMacro(file, macroName);


  }
private static void callExcelMacro(File file, String macroName) {
        ComThread.InitSTA();
        final ActiveXComponent excel = new ActiveXComponent("Excel.Application");

    try {
        // This will open the excel if the property is set to true
        // excel.setProperty("Visible", new Variant(true));

        final Dispatch workbooks = excel.getProperty("Workbooks")
                .toDispatch();
        final Dispatch workBook = Dispatch.call(workbooks, "Open",
                file.getAbsolutePath()).toDispatch();

        // Calls the macro
       final Variant result = Dispatch.call(excel, "Run", macroName);

        // Saves and closes
        Dispatch.call(workBook, "Save");

        com.jacob.com.Variant f = new com.jacob.com.Variant(true);
        Dispatch.call(workBook, "Close", f);

    } catch (Exception e) {
        e.printStackTrace();
    } finally {

        excel.invoke("Quit", new Variant[0]);
        ComThread.Release();
    }

}

尝试
final String macroName=“PERSONAL.XLSB!Macro”
@TimWilliams仍然给我同样的错误当你试图运行宏时你的
PERSONAL.XLSB
打开了吗?当您通过自动化启动Excel时,它通常不会打开任何个人宏工作簿或加载任何外接程序等:您必须通过代码执行此操作。通过Java代码或通过VBA代码执行此操作?尽管您愿意,但由于您在这里使用Java,这似乎是最好的方法。。。