从外部的Excel使用VBScript运行命令行Excel宏从外部的Excel使用VBScript运

2019-05-13 14:37发布

我试图从运行Excel文件之外的Excel宏。 我目前使用命令行运行“.VBS”的文件,但它一直告诉我,宏无法找到。 下面是我想要使用的脚本

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

这里是我尝试访问的宏:

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

我试过位于解决方案是否有可能从运行外部命令在Excel中的宏? 到了这一步(和修改过程中),但它似乎没有工作。 我不断收到错误'Microsoft Office Excel中:宏“Macro.TestMacro”无法找到。

编辑:Excel 2003中。

Answer 1:

好吧,它实际上很简单。 假设你的宏模块中,而不是在片之一,您可以使用:

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

对于带有空格的文件名,包住引号的文件名。

如果您放置一个纸下的宏,说Sheet1中,只是假设sheet1中拥有的功能,它的作用。

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

注意:您不需要你一直在使用macro.testfunction符号。



Answer 2:

我认为你正在试图做到这一点? ( 久经考验的

此代码将打开该文件TEST.XLS并运行宏TestMacro这将反过来写入文本文件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


Answer 3:

我试着去适应@ Siddhart的代码能在相对路径来运行我的open_form宏,但它似乎没有工作。 这是我第一次尝试。 我的工作解决方案如下。

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是锁定在只读的。 2 - 批处理命令限制这一事实,(据我所知)不能调用宏。

我第一次写一个宏来启动我的用户窗体,而隐藏应用程序:

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

然后我创建了一个VBS推出这款宏(使用相对路径做它一直棘手):

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"

我终于做了一个批处理文件来执行的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

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



Answer 4:

由于我相关的问题是由一个公义的手取出我杀了一整天后,寻找如何击败“宏找不到或已禁用”错误,张贴在这里只为我工作的语法(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的



Answer 5:

我想上面的方法,但我得到了“宏无法找到”错误。 这是工作的最终代码!

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。



Answer 6:

如果你想从你个人的工作簿中运行宏它可能不会像打开一个Excel文件与一个VBScript犯规自动打开您的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并从那里运行宏对所有其他工作簿。 只是觉得我应该张贴在这里,以防万一有人碰到这个运行像我一样,但无法弄清楚,为什么宏始终没有运行。



Answer 7:

喜用这个线程得到解决的话,我想和大家分享我做了什么,以防万一有人可能会使用它。

我想要的是调用该改变一些细胞并清除某些行的宏,但我需要为超过1500款车型(大约花了3分钟再予每个文件)

主要问题: - 当调用从VBE宏,我得到了同样的问题,这是IMPOSIBLE调用从PERSONAL.XLSB宏,当脚本oppened Excel的didnt执行personal.xlsb和wasnt在宏窗口的任何选项

我解决了这个通过保持开放的Excel文件加载宏(a.xlsm)(执行脚本前)

然后,我打电话从Excel中通过脚本oppened宏

    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


文章来源: Run Excel Macro from Outside Excel Using VBScript From Command Line