【问题标题】:VBA, How to open new excel instanceVBA,如何打开新的excel实例
【发布时间】:2021-12-23 19:22:09
【问题描述】:

当我没有打开excel APP时,会抛出以下错误:

ActiveX 组件无法创建对象

重现问题的步骤:

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
  1. 关闭所有 Excel 文件

  2. 从 Outlook 运行子测试。

错误将被抛出:

Set myXL = GetObject(, "Excel.Application")

我怎样才能避免这个错误?

【问题讨论】:

  • 如果你想要一个new实例,你不需要GetObject。直接使用myXL,因为你声明它As New(我认为这是不好的做法)
  • @Rory I tried As New 问题还是一样
  • 我想你错过了关于不使用GetObject的部分。
  • @Rory 确实...

标签: excel vba outlook


【解决方案1】:

我认为下一个方法应该是更好的选择:

   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”根与递增变量可以用来获取它。

【讨论】:

    猜你喜欢
    • 2019-08-07
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多