在已打开的Excel上使用VBS运行宏

时间:2017-08-27 16:34:15

标签: excel vba excel-vba vbscript

我想使用VBS代码在Excel上运行宏。我的Excel将永远开放。我正在使用下面的代码。

Excel:main.xlsm,宏名:Inc

Option Explicit
Dim xlApp, xlBook
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("E:\Main.xlsm", 0, False)
xlApp.Run "Inc"
xlBook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlApp = Nothing

WScript.Quit

问题是每当我运行代码时,它看起来就像Excel试图以只读模式打开。一旦VBS运行,我将获得“保存更改窗口”并将工作表另存为副本。

我想将更改保存在同一张纸上,而不是将其保存为新副本。

2 个答案:

答案 0 :(得分:1)

Excel允许您保存副本,因为您创建了Application对象的新实例,因此您以只读模式再次打开工作簿。要使用已打开的工作簿获取对特定运行的Excel实例的Application对象的引用,您应该使用以下行:

Set xlBook = GetObject("E:\Main.xlsm")
Set xlApp = xlBook.Application

而不是

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("E:\Main.xlsm", 0, False)

然后您只需要使用.Save保存该工作簿。

答案 1 :(得分:0)

您正在使用Set xlApp = CreateObject("Excel.Application")创建新实例,然后WB会再次打开。最容易修复,如果您在执行代码之前关闭WB,那么它应该可以正常工作。关闭使用xlBook.Close SaveChanges:=True时,也不会出现提示。