我需要编写一个选择单元格并在该单元格上运行宏的vbs 这是我在网上找到的代码(不起作用)
ActiveSheet.Cells(5, 3).Select
xl.Run "'Book1.xls'!Calc"
我在Eclips中创建此vbs(通过
运行此VBS)Runtime.getRuntime().exec("cmd /c RUN_MACRO.vbs "+xlsFile+" "+ macroName);
运行后仍然没有错误,也没有改变excel。 请帮忙
VBS for RUN_MACRO.vbs的完整代码 这里Calc是保存在某些模块中的宏名称(因为我在Open Office中创建了这个宏(以乘以A2 * B2),当我选择一个单元格并运行一个宏时,我的单元格值会发生变化)
Set xl = CreateObject(WScript.Arguments(0))
Set wb = xl.Workbooks.Open(WScript.Arguments(1))
ActiveSheet.Cells(5, 3).Select
Range("C5").Select
xl.Run "'Book1.xls'!Calc"
ActiveWorkbook.Save
wb.Close
xl.Quit
在我的java文件中调用此vbs的方法
public static void executeMacros(String xlsFile, String macroName){
try{
Runtime.getRuntime().exec("cmd /c RUN_MACRO.vbs "+xlsFile+" "+ macroName);
}catch(Exception e)
{ System.out.println(e);}
}
答案 0 :(得分:1)
您的VBS文件中有一些奇怪之处。第一个是您尝试从Excel文件而不是从类创建对象。所以你需要做的第一件事是Set xl = CreateObject("Excel.Application")
。
因为您正在执行Set wb = xl.Workbooks.Open(WScript.Arguments(1))
并且您的第二个参数是宏名称,脚本正在尝试打开名为“macroname”的工作簿。
您还尝试在实际执行宏之前选择两个不同的单元格。所以ActiveSheet.Cells(5, 3).Select
似乎没有必要,反正也无法发挥作用。
xl.Run "'Book1.xls'!Calc"
实际上需要采用xl.Run "ModuleName.MacroName"
您可能需要使用此代码更新其他单元格。因此,您可能有兴趣向实际需要更新的单元格添加第三个参数。
因此请尝试将此作为您的vbs:
WorkBookToOpen = WScript.Arguments(0)
MacroToRun = WScript.Arguments(1)
CellToUpdate = WScript.Arguments(2)
Set xl = CreateObject("Excel.Application")
Set wb = xl.Workbooks.Open(WorkBookToOpen)
xl.Range( CellToUpdate ).Select
xl.Run "Module1." & MacroToRun
xl.ActiveWorkbook.Save
wb.Close
xl.Quit
然后改为:
Runtime.getRuntime().exec("cmd /c RUN_MACRO.vbs "+xlsFile+" "+ macroName + " " + cellToUpdate);