首页 > 解决方案 > 添加 OLEObjects 在宏内工作,如果在 cmd 中作为 vbs 脚本执行则失败

问题描述

在 excel 文件 (xlsm) 中执行的代码完美运行

 Sub insertObject()
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("YourPath\Datasheet.xlsx")
    objExcel.Application.Visible = True
    objWorkbook.ActiveSheet.OLEObjects.Add(Filename:="YourPath\Placeholder.txt", _
            Link:=False, DisplayAsIcon:=True, IconFileName:= _
            "C:\Windows\system32\packager.dll", IconIndex:=0, IconLabel:= _
            "C:\Placeholder.txt").Select
    objWorkbook.SaveAs "yourPath\test.xlsx"
    objExcel.ActiveWorkbook.Close
    objExcel.Application.Quit
    WScript.Quit
    End Sub

这是我尝试使用 vbs 脚本执行的代码

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("YourPath\Datasheet.xlsx")
objExcel.Application.Visible = True
ActiveSheet.OLEObjects.Add(Filename:="YourPath\Placeholder.txt", _
        Link:=False, DisplayAsIcon:=True, IconFileName:= _
        "C:\Windows\system32\packager.dll", IconIndex:=0, IconLabel:= _
        "C:\Placeholder.txt").Select
objWorkbook.SaveAs "YourPath\test.xlsx"
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
WScript.Quit

我用真实的路径替换了路径,当然代码在宏中完美地工作,但是当我尝试使用 cmd 命令运行它时,在 vbs 脚本中失败了。

标签: vbaexcelvbscript

解决方案


当我运行你的代码时,我得到了同样的结果。我尝试了一些不同的调整并且它起作用了:您只是忘记了 OLEobject 的 add 函数的第一个参数,并且不要忘记删除参数名称:

 Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("YourPath\Datasheet.xlsx")
    objExcel.Application.Visible = false
    Set ob = objWorkbook.ActiveSheet.OLEObjects
    Set t = ob.Add (,"YourPath\Placeholder.txt",False, True,    "C:\Windows\system32\packager.dll", 0,"C:\Placeholder.txt")

推荐阅读