从命令行使用VBScript从外部Excel运行Excelmacros

我试图从Excel文件之外运行Excelmacros。 我目前使用从命令行运行的“.vbs”文件,但它一直告诉我无法findmacros。 这是我正在尝试使用的脚本

Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open("test.xls") objExcel.Application.Visible = True objExcel.Workbooks.Add objExcel.Cells(1, 1).Value = "Test value" objExcel.Application.Run "Macro.TestMacro()" objExcel.ActiveWorkbook.Close objExcel.Application.Quit WScript.Echo "Finished." WScript.Quit 

这里是我试图访问的macros:

 Sub TestMacro() 'first set a string which contains the path to the file you want to create. 'this example creates one and stores it in the root directory MyFile = "C:\Users\username\Desktop\" & "TestResult.txt" 'set and open file for output fnum = FreeFile() Open MyFile For Output As fnum 'write project info and then a blank line. Note the comma is required Write #fnum, "I wrote this" Write #fnum, 'use Print when you want the string without quotation marks Print #fnum, "I printed this" Close #fnum End Sub 

我试过位于的解决scheme是否可以从外部命令在Excel中运行macros? 为了得到这个(当然修改),但它似乎没有工作。 我不断收到错误“Microsoft Office Excel:无法findmacros'Macro.TestMacro'。

编辑:Excel 2003。

好吧,其实很简单。 假设你的macros是在一个模块中,而不是在一个表中,你可以使用:

  objExcel.Application.Run "test.xls!dog" 'notice the format of 'workbook name'!macro 

对于带空格的文件名,用引号将文件名包起来。

如果你已经把macros放在一个表单中,比如说sheet1,那么假设sheet1拥有这个函数。

  objExcel.Application.Run "'test 2.xls'!sheet1.dog" 

注意:你不需要你使用的macro.testfunction表示法。

我想你正在尝试这样做? ( 试验和testing

此代码将打开文件Test.xls并运行macrosTestMacro ,它将写入文本文件TestResult.txt

 Option Explicit Dim xlApp, xlBook Set xlApp = CreateObject("Excel.Application") '~~> Change Path here Set xlBook = xlApp.Workbooks.Open("C:\Test.xls", 0, True) xlApp.Run "TestMacro" xlBook.Close xlApp.Quit Set xlBook = Nothing Set xlApp = Nothing WScript.Echo "Finished." WScript.Quit 

我试图将@ Siddhart的代码调整到运行我的open_formmacros的相对path,但似乎不起作用。 这是我第一次尝试。 我的工作解决scheme如下。

 Option Explicit Dim xlApp, xlBook dim fso dim curDir set fso = CreateObject("Scripting.FileSystemObject") curDir = fso.GetAbsolutePathName(".") set fso = nothing Set xlApp = CreateObject("Excel.Application") '~~> Change Path here Set xlBook = xlApp.Workbooks.Open(curDir & "Excels\CLIENTES.xlsb", 0, true) xlApp.Run "open_form" xlBook.Close xlApp.Quit Set xlBook = Nothing Set xlApp = Nothing WScript.Echo "Finished." 

编辑

我实际上已经完成了,以防万一有人想运行一个用户表单“一样”一个独立的应用程序:

我正面临的问题:

1 – 我不想使用Workbook_Open事件,因为excel被locking在只读状态。 2 – 批处理命令是有限的,(据我所知),它不能调用macros。

我首先写了一个macros来启动我的用户表单,同时隐藏应用程序:

 Sub open_form() Application.Visible = False frmAddClient.Show vbModeless End Sub 

然后,我创build了一个vbs来启动这个macros(用相对path做这件事一直很棘手):

 dim fso dim curDir dim WinScriptHost set fso = CreateObject("Scripting.FileSystemObject") curDir = fso.GetAbsolutePathName(".") set fso = nothing Set xlObj = CreateObject("Excel.application") xlObj.Workbooks.Open curDir & "\Excels\CLIENTES.xlsb" xlObj.Run "open_form" 

我终于做了一个batch file来执行VBS …

 @echo off pushd %~dp0 cscript Add_Client.vbs 

请注意,我还在我的Userform_QueryClose包含了“设置回可见”

 Private Sub cmdClose_Click() Unload Me End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ThisWorkbook.Close SaveChanges:=True Application.Visible = True Application.Quit End Sub 

无论如何,谢谢你的帮助,我希望这将有助于如果有人需要它

我试过上述方法,但我得到了“macros找不到”的错误。 这是最后的代码,工作!

 Option Explicit Dim xlApp, xlBook Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True ' Import Add-Ins xlApp.Workbooks.Open "C:\<pathOfXlaFile>\MyMacro.xla" xlApp.AddIns("MyMacro").Installed = True ' Open Excel workbook Set xlBook = xlApp.Workbooks.Open("<pathOfXlsFile>\MyExcel.xls", 0, True) ' Run Macro xlApp.Run "Sheet1.MyMacro" xlBook.Close xlApp.Quit Set xlBook = Nothing Set xlApp = Nothing WScript.Quit 

在我的情况下,MyMacro恰好在Sheet1下,因此Sheet1.MyMacro。

由于我的相关问题在我整天search如何击败“macros观未发现或被禁用”的错误之后被一个正义的手去除了,在这里发布了唯一适用于我的语法(application.run没有,无论我试过的)

 Set objExcel = CreateObject("Excel.Application") ' Didn't run this way from the Modules 'objExcel.Application.Run "c:\app\Book1.xlsm!Sub1" ' Didn't run this way either from the Sheet 'objExcel.Application.Run "c:\app\Book1.xlsm!Sheet1.Sub1" ' Nor did it run from a named Sheet 'objExcel.Application.Run "c:\app\Book1.xlsm!Named_Sheet.Sub1" ' Only ran like this (from the Module1) Set objWorkbook = objExcel.Workbooks.Open("c:\app\Book1.xlsm") objExcel.Run "Sub1" 

Excel 2010,Win 7

如果您尝试从个人工作簿运行macros,则可能无法正常工作,因为使用VBScript打开Excel文件不会自动打开您的PERSONAL.XLSB。 你将需要做这样的事情:

 Dim oFSO Dim oShell, oExcel, oFile, oSheet Set oFSO = CreateObject("Scripting.FileSystemObject") Set oShell = CreateObject("WScript.Shell") Set oExcel = CreateObject("Excel.Application") Set wb2 = oExcel.Workbooks.Open("C:\..\PERSONAL.XLSB") 'Specify foldername here oExcel.DisplayAlerts = False For Each oFile In oFSO.GetFolder("C:\Location\").Files If LCase(oFSO.GetExtensionName(oFile)) = "xlsx" Then With oExcel.Workbooks.Open(oFile, 0, True, , , , True, , , , False, , False) oExcel.Run wb2.Name & "!modForm" For Each oSheet In .Worksheets oSheet.SaveAs "C:\test\" & oFile.Name & "." & oSheet.Name & ".txt", 6 Next .Close False, , False End With End If Next oExcel.Quit oShell.Popup "Conversion complete", 10 

所以在循环的开始,它打开personals.xlsb并从那里运行所有其他工作簿的macros。 只是以为我应该在这里张贴,以防万一有人跑过这个像我一样,但无法弄清楚为什么macros仍然没有运行。

您好使用这个线程来获得解决scheme,然后我想分享我所做的,以防万一有人可以使用它。

我想要的是调用一个macros来改变一些单元格并删除一些行,但是我需要超过1500个excel(大概每个文件花了3分钟)

主要问题: – 当从vbe调用macros时,我遇到同样的问题,从PERSONAL.XLSB调用macros,当脚本运行excel没有执行personal.xlsb,并且在macros窗口中没有任何选项

我解决了这个问题,保持打开一个与加载macros(a.xlsm)的Excel文件(在执行脚本之前)

然后我从脚本调用的excel中调用macros

  Option Explicit Dim xl Dim counter counter =10 Do counter = counter + 1 Set xl = GetObject(, "Excel.Application") xl.Application.Workbooks.open "C:\pruebas\macroxavi\IA_030-08-026" & counter & ".xlsx" xl.Application.Visible = True xl.Application.run "'a.xlsm'!eraserow" Set xl = Nothing Loop Until counter = 517 WScript.Echo "Finished." WScript.Quit