【发布时间】:2016-06-09 13:40:02
【问题描述】:
我将数据从一个工作簿复制到另一个工作簿,然后从复制的工作簿运行宏。下面的 VBA 代码工作正常。
VBA 代码
Sub test()
Dim x As Workbook
Dim y As Workbook
Set x = Workbooks.Open("D:\mywork\work_data.xlsx")
Set y = Workbooks.Open("D:\mywork\other_work_data.xlsm")
x.Sheets("myworksheet").UsedRange.Copy
y.Sheets("Sheet1").Range("A1").PasteSpecial
y.Save
x.Close
Application.Run ("other_work_data.xlsm!checkDate")
y.Close
End Sub
现在,我正在尝试将以下 vba 代码更改为 vbscript,但这对我不起作用。
VBScript 代码
Sub test()
Dim ExcelApp
Dim x
Dim y
Set ExcelApp = CreateObject("Excel.Application")
Set x = ExcelApp.Workbooks.Open("D:\mywork\work_data.xlsx")
Set y = ExcelApp.Workbooks.Open("D:\mywork\other_work_data.xlsm")
x.Sheets("myworksheet").UsedRange.Copy
y.Sheets("Sheet1").Range("A1").PasteSpecial
y.Save
x.Close
ExcelApp.Application.Run ("other_work_data.xlsm!checkDate")
y.Close
ExcelApp.DisplayAlerts = False
ExcelApp.Application.Quit
Set ExcelApp = Nothing
End Sub
由于我是 vba 和 vbscript 的新手,谁能告诉我我做错了什么?我在堆栈溢出中遇到了类似的问题,但我没有解决这个问题。
【问题讨论】:
-
怎么不行?能走多远?发生什么错误? (尝试传递 .run 完整路径)
-
@AlexK。我没有收到任何错误。还尝试使用 .run 中的完整路径。数据没有从一本书复制到另一本书。
-
在
ExcelApp引用之后是否需要额外的Application语句? ExcelApp 已设置为应用程序。尝试从ExcelApp.Application.Run ("other_work_data.xlsm!checkDate")和ExcelApp.Application.Quit中删除Application -
在
.copy之前,您可以添加ExcelApp.visible = true以查看Excel 是否正在打开。您可以添加一些MsgBox "stop to check"来停止操作并检查在宏的那个阶段是否一切正常。或临时的Exit sub在中间某处测试临时过程结果。 -
“不起作用”是一个不充分的问题描述。 什么“不起作用”?它究竟如何“不起作用”?您的应用程序没有打开吗?更改没有保存吗?您期望什么结果,您实际得到的结果与此有何不同?正如 KazimierzJawor 所提到的,运行可见的应用程序应该是调试时的第一步。另外,在进行故障排除时不要将
DisplayAlerts设置为False,因为这可能会隐藏问题。