“新”Excel.Application与Excel.Application

时间:2013-11-06 19:50:14

标签: excel vba excel-vba instance excel.application

我正在寻求澄清“新”对对象和脚本的影响。

我的理解是,如果我需要对excel文档执行操作并关闭应用程序,那么我应该使用New Excel.Application。

如果我保持此应用程序处于活动状态(例如通过工作簿等对象),稍后在脚本中我决定打开另一个工作簿,我是否还应该使用New Excel.Application或者使用Excel.Application会更好然后?

我担心的是,我将编写一个长脚本,该脚本将对至少5个工作簿执行操作。我将不得不从一个工作簿切换到另一个工作簿,然后再回到前一个......

如果每次脚本创建一个新的Excel.Application,我可能最终会运行很多,我担心这个混乱会产生问题。

写一些类似的东西更合适:

Dim NxlApp as New Excel.Application
Dim xlApp as Excel.Application

  NxlApp.Workbooks.Open "C:\Users\...\WorkbookA.xlsx"
  NxlApp.Visible = True

'Perform actions on WorkbookA (keep it open)


  Set ExcelApp = GetObject("", "Excel.Application.14")
  xlApp.Workbooks.Open "C:\Users\...\WorkbookB.xlsx"
  xlApp.Visible = True

'Perform actions on WorkbookB (keep it open)


'Go back to WorkbookA (using the xlApp variable this time)

  xlApp.Workbook("A.xlsx")...

2 个答案:

答案 0 :(得分:4)

  

我打算编写一个长脚本来执行操作   至少5本工作簿

很好的问题,简短的回答是你可以在一个Application对象中打开5个工作簿。

如果您在excel中(否则请参阅下文),那么您已经拥有了Excel.Application。然后,您可以将每个工作簿设置为不同的对象或按名称引用它们:

dim wb1, wb2 as Excel.Workbook, wb3 as New Excel.Workbook 'blank is
same as Variant set wb1 = application.open("path/wb.xlsx") msgbox
wb1.name                  'ref by object msgbox
workbooks("wb.xlsx").name 'ref by name
  

我的理解是,如果我需要在excel上执行操作   文档和应用程序关闭然后我应该使用新的   Excel.Application

如果您在Excel之外(如在Access中),那么您可能想要创建一个Excel.Application对象,这里有一些提示:

Dim nXlApp as New Excel.Application

具有与以下相同的效果:

Dim xlApp as Excel.Application
Set xlApp = New Excel.Application             'Early Binding
Set xlApp = CreateObject(“Excel.Application”) 'Late Binding

不要在循环内定义(暗淡),但是可以根据需要多次实例化(设置)同一个对象。如果您在控件(按钮等)中使用全局对象(不建议但有时也很方便),您可以使用以下内容:

if xlApp is Nothing then set xlApp = CreateObject(“Excel.Application”)

当你完成后别忘了打扫房子!

wb1.Close False
set wb1 = Nothing 'do this once for each defined object, anything using New/Set

另见,

答案 1 :(得分:1)

excel应用程序可以同时打开多个工作簿,因此您无需实例化新工作簿。如果您来自excel内部,则不需要引用该应用程序来打开工作簿。您可能希望创建多个工作簿实例,例如

Dim wbWorkbookA As Workbook
Dim wbWorkbookB As Workbook

Set wbWorkbookA = Workbooks.Open("C:\Users\...\WorkbookA.xlsx")
Set wbWorkbookB = Workbooks.Open("C:\Users\...\WorkbookB.xlsx")

这将打开工作簿并提供参考,以便您可以使用代码操作它们。