将VBA转换为VBScript

3
我将数据从一个工作簿复制到另一个工作簿,然后运行所复制工作簿中的宏。下面的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还很陌生,有谁能告诉我我做错了什么吗?我已经在stackoverflow上看过类似的问题,但是我没有解决问题。


它为什么不工作?它执行到哪一步了?出现了什么错误?(尝试传递一个完整路径给.run) - Alex K.
@AlexK。我没有收到任何错误信息。我也尝试了在.run中使用完整路径。数据没有从一本书复制到另一本书。 - Sivaprakash
ExcelApp 引用后面,你需要额外的 Application 语句吗?ExcelApp 已经被设置为一个应用程序。尝试从 ExcelApp.Application.Run ("other_work_data.xlsm!checkDate")ExcelApp.Application.Quit 中删除 Application - Jordan
5
在使用.copy之前,你可以添加 ExcelApp.visible = true 以查看是否正在打开 Excel。你可以添加一些 MsgBox "stop to check" 来停止操作并检查宏的这个阶段是否顺利进行。或者在中间某个地方暂时加入 Exit sub 来测试临时处理结果。 - Kazimierz Jawor
3
"Doesn't work"这个描述是不够充分的问题陈述。到底是什么“不工作”?它究竟是怎样“不工作”的?你的应用程序是否无法打开?更改是否没有保存?你期望得到什么结果,而实际获得的结果与期望的有何不同?正如KazimierzJawor所提到的,在调试时运行可见的应用程序应该是您的第一步。同时,在故障排除时不要将“DisplayAlerts”设置为“False”,因为那可能会隐藏问题。 - Ansgar Wiechers
显示剩余7条评论
1个回答

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

感谢所有通过评论帮助我的人。感谢你们的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接