7

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

我的理解是,如果我需要对 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")...
4

2 回答 2

6

我将编写一个长脚本,它将对至少 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 文档执行操作并且应用程序已关闭,那么我应该使用 New 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

也可以看看,

于 2015-10-26T23:05:53.550 回答
2

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")

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

于 2013-11-06T20:54:55.987 回答