从命令行或批处理文件运行Excel宏的方法?

Pol*_*ron 73 excel command-line vba batch-file

我有一个Excel VBA宏,我需要在从批处理文件访问文件时运行,但不是每次我打开它(因此不使用打开的文件事件).有没有办法从命令行或批处理文件运行宏?我不熟悉这样的命令.

假设一个Windows NT环境.

Rob*_*rns 81

您可以启动Excel,打开工作簿并从VBScript文件运行宏.

将下面的代码复制到记事本中.

更新" MyWorkbook.xls "和" MyMacro "参数.

使用vbs扩展名保存并运行它.

Option Explicit

On Error Resume Next

ExcelMacroExample

Sub ExcelMacroExample() 

  Dim xlApp 
  Dim xlBook 

  Set xlApp = CreateObject("Excel.Application") 
  Set xlBook = xlApp.Workbooks.Open("C:\MyWorkbook.xls", 0, True) 
  xlApp.Run "MyMacro"
  xlApp.Quit 

  Set xlBook = Nothing 
  Set xlApp = Nothing 

End Sub 
Run Code Online (Sandbox Code Playgroud)

运行宏的关键是:

xlApp.Run"MyMacro"

  • 这就是我要找的!有用.我应该添加一些更改,以便在没有故障的情况下工作:1.它是"xlApp.Run".2.在退出之前,应该使用xlApp.SaveAs,否则不会保存宏所做的任何修改.(可以使用xlApp.DisplayAlerts = False)来避免相关的弹出窗口)3.在退出之前,应该调用xlApp.ActiveWorkbook.Close或者电子表格保持打开状态(虽然是隐藏的),这会禁用进一步的编辑.总而言之,这就是我想要的:) (10认同)

小智 20

最简单的方法是:

1)从批处理文件启动Excel以打开包含宏的工作簿:

EXCEL.EXE /e "c:\YourWorkbook.xls"
Run Code Online (Sandbox Code Playgroud)

2)从工作簿的Workbook_Open事件中调用您的宏,例如:

Private Sub Workbook_Open()
    Call MyMacro1          ' Call your macro
    ActiveWorkbook.Save    ' Save the current workbook, bypassing the prompt
    Application.Quit       ' Quit Excel
End Sub
Run Code Online (Sandbox Code Playgroud)

现在,这将把控件返回到批处理文件以进行其他处理.

  • 想到这一点,但即使我不是通过批处理文件打开它,它也会运行,使文件本身无法使用而不首先禁用宏. (3认同)
  • 如果我以后必须更改某些内容,我将如何在不运行宏的情况下打开文件? (2认同)

Fin*_*ink 5

您可以编写一个 vbscript 通过 createobject() 方法创建 excel 实例,然后打开工作簿并运行宏。您可以直接调用 vbscript,也可以从批处理文件调用 vbscript。

这是我刚刚偶然发现的资源: http://www.codeguru.com/forum/showthread.php ?t=376401


ome*_*pes 5

下面显示的方法允许从批处理文件运行定义的Excel宏,它使用环境变量将批处理中的宏名称传递给Excel。

将此代码放入批处理文件(使用您EXCEL.EXE的工作簿路径):

Set MacroName=MyMacro
"C:\Program Files\Microsoft Office\Office15\EXCEL.EXE" "C:\MyWorkbook.xlsm"
Run Code Online (Sandbox Code Playgroud)

将此代码放入Excel VBA ThisWorkBook对象:

Private Sub Workbook_Open()
    Dim strMacroName As String
    strMacroName = CreateObject("WScript.Shell").Environment("process").Item("MacroName")
    If strMacroName <> "" Then Run strMacroName
End Sub
Run Code Online (Sandbox Code Playgroud)

并将您的代码放入Excel VBA模块,如下所示:

Sub MyMacro()
    MsgBox "MyMacro is running..."
End Sub
Run Code Online (Sandbox Code Playgroud)

启动批处理文件并获取结果:

宏的对话框

对于不打算运行任何宏的情况,只需将空值添加Set MacroName=到批处理中即可。