kha*_*ane 5 java excel vba excel-vba jacob
我正在使用JACOB API从VB宏调用一些Sub.我想阻止这个宏生成的MsgBox.
这是我打开宏XXXX.xls并运行包含一些MsgBox的子traiteOT的代码.
`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();
//String eventSink = null ;
Dispatch.call(workbooks,"Add");
Dispatch workBook = Dispatch.call(workbooks,"Open", file.getAbsolutePath()).toDispatch();
ExcelEventHandler w = new ExcelEventHandler();
Variant V1=new Variant(file.getName() + macroName);
// Calls the macro
final Variant result = Dispatch.call(excel, "Run", V1 );
// 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();
}
}
public static void main(String[] args) {
ExcelMacroTest emt = null;
try {
final File file = new File("D:XXXXXXXX.xls");
final String macroName = "!TraiteOT";
callExcelMacro(file, macroName);
} finally {
if (emt != null) {
emt.quit();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
`
除非您注释执行该函数的代码,或者避免以其他方式调用该代码,否则您无法阻止消息框。
如果确实需要,您可以将 VBA 代码读入变量,去掉 Msgbox 函数调用,然后执行它(使用 Visual Basic For Applications Extensibility)
最好只编写一个没有工作簿中的 MsgBox 的特殊函数
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |