从VBS打开或激活工作簿
我正在写一个小的VBScript来执行以下操作:
- 检查Excel是否打开; 如果没有打开它。
- 如果Excel打开,请检查是否打开了特定的工作簿。
- 如果工作簿已经打开,请将其激活; 如果没有,打开它。
到目前为止,我已经能够编写下面的代码:
ExcelFileName = "....xlsx" On Error Resume Next Set xl = GetObject(, "Excel.Application") IF Err Then If Err.Number = 429 Then WScript.Echo "Workbook not open (Excel is not running)." Else WScript.Echo Err.Description & " (0x" & Hex(Err.Number) & ")" End If WScript.Quit 1 End If On Error Goto 0 Set wb = Nothing For Each obj In xl.Workbooks If obj.Name = ExcelFileName Then Set wb=obj xl.DisplayAlerts = False wb.Save Exit For End If Next If wb Is Nothing Then xl.Workbooks.Open("C:\...") End If Set xl = Nothing Set wb = Nothing
但是,如果Excel尚未打开,则会默默无法打开新的实例。
GetObject行为正常给你一个运行的Excel实例或导致错误。 如果出现错误(Excel未运行),请使用CreateObject创buildExcel的新实例。
使用GetObject打开文件。
set wb = GetObject("c:\folder\excel.xls")
COM会解决需要做的事情。 这一条线就是你的三个要求所需要的。
这是VB要求COM使用带有文件名的GetObject时要做的事情。
BindMoniker
通过名字对象定位对象,如果对象处于非活动状态,则激活该对象,然后检索指向该对象上指定接口的指针。
HRESULT BindMoniker(LPMONIKER pmk,DWORD grfOpt,REFIID iidResult,LPVOID FAR * ppvResult);
- Powershell Excel – 从命名范围复制
- 使用Excel数据的简单任务不会导致“ContextSwitchDeadlock”
- PowerShell的:如果Excel已经运行,获取实例,否则启动它 – exception处理
- Powershell将数据粘贴到现有工作表中
- testingExcel是否完成启动/closures序列
- Excel Viewer(XLView)有没有COM API?
- 每当新版本的excel发布时,引用tlb都会丢失,我必须再次从excel中再次引用.tlb文件
- PowerShell中的Excel COM对象
- 我可以从Silverlight页面访问像Excel一样的COM资源,数据链接对话框吗?