【问题标题】:Difference between CreateObject("Excel.Application") .Workbooks.Open and just Workbooks.OpenCreateObject("Excel.Application") .Workbooks.Open 和 Workbooks.Open 之间的区别
【发布时间】:2012-10-24 07:15:56
【问题描述】:

我目前正在使用Workbooks.Open 处理目录中包含的大量文件。但是打开和关闭这些文件会使文件出现在任务栏中,我想避免不断闪烁。

我得到一个建议,我可以使用CreateObject 创建一个新实例,因为这会打开一个隐藏的新 Excel 实例。

  1. 两种打开新工作簿的方式在性能方面还有其他区别吗?

  2. 另外,我应该只使用一个使用CreateObject 创建的 Excel 实例来打开所有工作簿,还是需要为我必须处理的每个工作簿创建一个实例(这似乎浪费了大量的内存和较低的速度)?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    Workbooks.Open 使用当前的 MS Excel 实例,CreateObject(“Excel.Application”) 创建一个新的 MS Excel 实例。你可以阅读CreateObjecthere

    在创建新实例后简单地发出Workbooks.Open 并不能确保工作簿在新实例中打开。你将不得不与它绑定。例如

    Dim oXLApp As Object, wb As Object
    
    Set oXLApp = CreateObject("Excel.Application")
    
    '~~> Hide Excel
    oXLApp.Visible = False
    
    '~~> Open files
    Set wb = oXLApp.Workbooks.Open("C:\Sample.xls")
    

    关于你的其他问题

    另外,我应该只使用一个使用 CreateObject 创建的 Excel 实例来打开所有工作簿,还是需要为我必须处理的每个工作簿创建一个实例

    您不需要多个实例。您可以使用一个实例。例如

    Dim oXLApp As Object, wb As Object
    
    Set oXLApp = CreateObject("Excel.Application")
    
    '~~> Hide Excel
    oXLApp.Visible = False
    
    '~~> Open files
    Set wb = oXLApp.Workbooks.Open("C:\Sample1.xls")
    
    '
    '~~> Do some Stuff
    '
    
    wb.Close (False)
    
    '~~> Open files
    Set wb = oXLApp.Workbooks.Open("C:\Sample2.xls")
    '
    '~~> Do some Stuff
    '
    
    wb.Close (False)
    
    '
    '~~> And So on
    '
    

    【讨论】:

      【解决方案2】:

      后期绑定比早期绑定稍慢,但您甚至可能没有注意到差异。是的,您可以对所有工作簿只使用一个实例。请注意:

      Dim xl As New Excel.Application
      
      xl.Workbooks.Open "z:\docs\test.xlsm"
      

      除非你说:

      xl.Visible = True
      

      确保关闭错误陷阱中的所有实例。

      【讨论】:

        猜你喜欢
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-27
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        • 2017-03-28
        相关资源
        最近更新 更多