vba - 添加 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 脚本中失败了。
解决方案
当我运行你的代码时,我得到了同样的结果。我尝试了一些不同的调整并且它起作用了:您只是忘记了 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")
推荐阅读
- docker - docker,创建了第二个 mavlan。但是容器不绑定 ip 地址
- python - Pycharm:如何使用从另一个项目安装的库?
- c++ - 在 C++ 中,这 3 种初始化对象的方式有什么区别?
- c# - UNITY2D:如何使用单例模式销毁以前的对象?
- html - 如何在 HTML 中使用 TTF 作为字体系列
- sql - 需要一个 SQL 查询,该查询将与另一个表连接,该表又将根据时间返回最新值,分组为一行
- html - 响应式断点不适用于 Slick 幻灯片
- list - 在 Haskell 中添加从第二个列表到另一个列表的差异
- css - 尝试使用 justify-content:center 将 .follow-btn 居中;
- java - 用一系列数字填充一个整数数组,该数字是一个字符串(java)