【问题标题】:Using VB script to run VBA Macros and save the excel workbook使用 VB 脚本运行 VBA 宏并保存 Excel 工作簿
【发布时间】:2017-04-20 17:32:22
【问题描述】:

我正在尝试从 * .vbs 文件运行宏。您可以在下面找到代码。该模块运行没有问题(已经过测试)。但工作簿没有保存。我尝试将ThisWorkbook.Save 添加到模块本身,但它会导致错误并告诉我我的文件是ReadOnly。澄清一下,我想知道如何在通过 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 之前添加了创建文本文件的行,它创建了它。因此,它运行宏但不保存工作簿。

【问题讨论】:

  • 首先,删除On Error Resume Next,因为我们要调试错误发生的位置。此外,它是否正在运行“更新”Sub,但不使用xlBook.Save 保存?
  • @ShaiRado 我把它注释掉了。但是想给你原始代码。这就是奇怪的部分。一旦它问我Resume.xlsw 已经存在。你想换掉它。但只有一次。我知道它运行Sub,因为我刚刚在End Sub 之前添加了一行write,它生成了一个文本文件。并创建文本文件。我也会将此添加到问题的正文中。
  • 试试Set xlBook = xlApp.Workbooks.Open("\\internal.company.com\River_Automated.xlsm", 0, False)

标签: vba excel vbscript


【解决方案1】:

这一行:

Set xlBook = xlApp.Workbooks.Open("\\internal.company.com\River_Automated.xlsm", 0, True) 

导致文件以ReadOnly 模式打开。 Open method 的第三个参数决定如果是True,是否以ReadOnly 模式打开文件,否则False

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

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

Set xlBook = xlApp.Workbooks.Open("\\internal.company.com\River_Automated.xlsm", 0, False)

或者,检查文件是否为ReadOnly,如果是,则将其另存为其他内容。

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 

【讨论】:

    最近更新 更多