【问题标题】:Convert VBA to VBScript将 VBA 转换为 VBScript
【发布时间】: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

由于我是 vbavbscript 的新手,谁能告诉我我做错了什么?我在堆栈溢出中遇到了类似的问题,但我没有解决这个问题。

【问题讨论】:

  • 怎么不行?能走多远?发生什么错误? (尝试传递 .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,因为这可能会隐藏问题。

标签: excel vba vbscript


【解决方案1】:

我已经解决了这个问题。其实问题很简单。我使用了子程序test(),但我忘了打电话。所以,我使用了Call test()

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.Run ("other_work_data.xlsm!checkDate")    'ExcelApp.Run is enough

y.Close

ExcelApp.DisplayAlerts = False
ExcelApp.Quit                                      'ExcelApp.Quit is enough
Set ExcelApp = Nothing

End Sub

Call 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.Run ("other_work_data.xlsm!checkDate")    'ExcelApp.Run is enough

y.Close

ExcelApp.DisplayAlerts = False
ExcelApp.Quit                                      'ExcelApp.Quit is enough
Set ExcelApp = Nothing

感谢大家通过 cmets 帮助我。感谢您的宝贵时间。

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2013-02-03
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多