使用VB脚本运行VBA宏并保存excel工作簿

使用VB脚本运行VBA宏并保存excel工作簿,vba,excel,vbscript,Vba,Excel,Vbscript,我正在尝试从*.vbs文件运行宏。您可以在下面找到代码。模块运行时没有问题(已测试)。但工作簿未保存。我尝试添加此工作簿。将保存到模块本身,但它会导致错误,并告诉我我的文件是只读的。为了澄清,我想知道如何在通过VBScript运行宏后保存工作簿 Option Explicit 'On Error Resume Next 'Comment-out for debugging ExcelMacro Sub ExcelMacro() Dim xlApp Dim xlBook Se

我正在尝试从*.vbs文件运行宏。您可以在下面找到代码。模块运行时没有问题(已测试)。但工作簿未保存。我尝试添加
此工作簿。将
保存到模块本身,但它会导致错误,并告诉我我的文件是只读的。为了澄清,我想知道如何在通过VBScript运行宏后保存工作簿

Option Explicit

'On Error Resume Next 'Comment-out for debugging

ExcelMacro

Sub ExcelMacro() 

 Dim xlApp 
 Dim xlBook 

 Set xlApp = CreateObject("Excel.Application") 
 Set xlBook = xlApp.Workbooks.Open("\\internal.company.com\River_Automated.xlsm", 0, True) 
 xlApp.Run "Update"

 xlBook.Save
 xlBook.Close
 xlApp.Quit 

 Set xlBook = Nothing 
 Set xlApp = Nothing 

End Sub 
一些可能有用的旁注:

运行VBScript后,我收到以下消息:

Resume.xlsw已存在。你想更换它吗

我在
End Sub
前面添加了创建文本文件的行,它创建了文本文件。因此,它运行宏但不保存工作簿。

此行:

Set xlBook = xlApp.Workbooks.Open("\\internal.company.com\River_Automated.xlsm", 0, True) 
正在导致文件以
只读模式打开。的第三个参数确定如果
True
,是以
ReadOnly
模式打开文件,还是以其他方式
False

只读|可选|变体| True以只读模式打开工作簿

解决方案是通过以下方式在
ReadOnly=False
中打开文件:

Set xlBook = xlApp.Workbooks.Open("\\internal.company.com\River_Automated.xlsm", 0, False)
或者,要检查文件是否为只读文件,如果是,请将其另存为其他文件

If Not xlBook.ReadOnly Then
    xlBook.Save

Else
    xlBook.SaveAs ... '### Modify as needed
End If
xlBook.Close
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 
这一行:

Set xlBook = xlApp.Workbooks.Open("\\internal.company.com\River_Automated.xlsm", 0, True) 
正在导致文件以
只读模式打开。的第三个参数确定如果
True
,是以
ReadOnly
模式打开文件,还是以其他方式
False

只读|可选|变体| True以只读模式打开工作簿

解决方案是通过以下方式在
ReadOnly=False
中打开文件:

Set xlBook = xlApp.Workbooks.Open("\\internal.company.com\River_Automated.xlsm", 0, False)
或者,要检查文件是否为只读文件,如果是,请将其另存为其他文件

If Not xlBook.ReadOnly Then
    xlBook.Save

Else
    xlBook.SaveAs ... '### Modify as needed
End If
xlBook.Close
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

首先,删除下一步恢复出错时的
,因为我们想调试出错的地方。此外,它是否正在运行“Upadate”
Sub
,但未使用
xlBook.Save进行保存?@ShaiRado我将其注释掉。但是我想给你原始代码。这就是奇怪的部分。有一次它问我,
Resume.xlsw
已经存在。你想更换它吗。但只有一次。我知道它运行
Sub
,因为我刚刚在
End Sub
之前添加了一行write,这将生成一个文本文件。然后创建文本文件。我也会将此添加到问题的主体中。请尝试
Set xlBook=xlApp.Workbooks.Open(“\\internal.company.com\River\u Automated.xlsm”,0,False)
首先,删除下一步错误恢复时的
,因为我们要调试发生错误的位置。此外,它是否正在运行“Upadate”
Sub
,但不使用
xlBook.Save
?@ShaiRado我对此进行了注释。但是我想给你原始代码。这就是奇怪的部分。有一次它问我,
Resume.xlsw
已经存在。你想更换它吗。但只有一次。我知道它运行
Sub
,因为我刚刚在
End Sub
之前添加了一行write,这将生成一个文本文件。然后创建文本文件。我也会将此添加到问题的主体中。请尝试
Set xlBook=xlApp.Workbooks.Open(“\\internal.company.com\River\u Automated.xlsm”,0,False)