为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

弑天下 2019-09-02 09:44:28
我正在尝试从Excel文件外部运行Excel宏。我目前正在使用从命令行运行的“.vbs”文件,但它一直告诉我无法找到宏。这是我正在尝试使用的脚本Set objExcel = CreateObject("Excel.Application")Set objWorkbook = objExcel.Workbooks.Open("test.xls")objExcel.Application.Visible = TrueobjExcel.Workbooks.AddobjExcel.Cells(1, 1).Value = "Test value"objExcel.Application.Run "Macro.TestMacro()"objExcel.ActiveWorkbook.CloseobjExcel.Application.QuitWScript.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 directoryMyFile = "C:\Users\username\Desktop\" & "TestResult.txt"'set and open file for outputfnum = FreeFile()Open MyFile For Output As fnum'write project info and then a blank line. Note the comma is requiredWrite #fnum, "I wrote this"Write #fnum,'use Print when you want the string without quotation marksPrint #fnum, "I printed this"Close #fnumEnd Sub我尝试了位于的解决方案是否可以从外部命令在Excel中运行宏?到目前为止(并修改)但它似乎没有用。我一直收到错误`Microsoft Office Excel:无法找到宏'Macro.TestMacro'。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我试图将@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 - 批处理命令受限于(据我所知)它无法调用宏的事实。


我首先写了一个宏来启动我的userform同时隐藏应用程序:


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

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


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 1110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信