将VBA转换为VBScript

时间:2016-02-26 11:02:39

标签: vba excel-vba vbscript macros excel

我正在将数据从一个工作簿复制到另一个工作簿,然后从复制的工作簿中运行宏。以下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的新手,有人能告诉我我做错了什么吗?我在堆栈溢出中遇到过类似的问题,但我没有解决这个问题。

1 个答案:

答案 0 :(得分:2)

我已经解决了这个问题。实际上,问题很简单。我使用了子程序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

感谢大家帮助我完成评论。谢谢你的时间。