使用vbs在特定单元格选择上运行宏

时间:2014-07-03 12:28:13

标签: macros vbscript apache-poi xls

我需要编写一个选择单元格并在该单元格上运行宏的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);}  
     }

1 个答案:

答案 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);