VBA,如何打开新的 excel 实例
VBA, How to open new excel instance
当我没有打开excel APP时,抛出以下错误:
ActiveX Component can't create object
重现问题的步骤:
1 打开 Outlook,ALT + F11 并插入以下子内容:
Sub Test()
Dim myXL As New Excel.Application
Set myXL = GetObject(, "Excel.Application")
Set wb = myXL.Workbooks.Open("MyPath\MyXL.xlsx")
End Sub
关闭所有 excel 文件
运行 来自 outlook 的子测试。
错误将在 :
上抛出
Set myXL = GetObject(, "Excel.Application")
如何避免此错误?
更好的选择应该是下一种方式,我认为:
Dim objexcel As Object
On Error Resume Next 'firstly, try catching the existing open session, if any:
Set objexcel = GetObject(, "Excel.Application")
If err.Number <> 0 Then 'if no any existing session, create a new one:
err.Clear: Set objexcel = CreateObject("Excel.Application")
End If
On Error GoTo 0
引用“Microsoft Excel ... 对象库”,您可以声明
Dim objexcel As Excel.Application
智能感知建议的好处...
如果您知道其中打开的特定工作簿的全名,也可以找到 Excel 打开的会话:
Set objExcel = GetObject(ThisWorkbook.fullName).Application
Debug.Print objExcel.hwnd
甚至对于由第三方应用程序在新会话中打开的新工作簿,如“Book1”:
Set objExcel = GetObject("Book1").Application
Debug.Print objExcel.hwnd
如果相应的应用程序删除新工作簿(并在同一会话中打开它们),将它们命名为“Book2”、“Book3”等,循环构建工作簿名称,将“Book”根与增量变量可以用来获取它。
当我没有打开excel APP时,抛出以下错误:
ActiveX Component can't create object
重现问题的步骤:
1 打开 Outlook,ALT + F11 并插入以下子内容:
Sub Test()
Dim myXL As New Excel.Application
Set myXL = GetObject(, "Excel.Application")
Set wb = myXL.Workbooks.Open("MyPath\MyXL.xlsx")
End Sub
关闭所有 excel 文件
运行 来自 outlook 的子测试。
错误将在 :
上抛出Set myXL = GetObject(, "Excel.Application")
如何避免此错误?
更好的选择应该是下一种方式,我认为:
Dim objexcel As Object
On Error Resume Next 'firstly, try catching the existing open session, if any:
Set objexcel = GetObject(, "Excel.Application")
If err.Number <> 0 Then 'if no any existing session, create a new one:
err.Clear: Set objexcel = CreateObject("Excel.Application")
End If
On Error GoTo 0
引用“Microsoft Excel ... 对象库”,您可以声明
Dim objexcel As Excel.Application
智能感知建议的好处...
如果您知道其中打开的特定工作簿的全名,也可以找到 Excel 打开的会话:
Set objExcel = GetObject(ThisWorkbook.fullName).Application
Debug.Print objExcel.hwnd
甚至对于由第三方应用程序在新会话中打开的新工作簿,如“Book1”:
Set objExcel = GetObject("Book1").Application
Debug.Print objExcel.hwnd
如果相应的应用程序删除新工作簿(并在同一会话中打开它们),将它们命名为“Book2”、“Book3”等,循环构建工作簿名称,将“Book”根与增量变量可以用来获取它。