首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“新”Excel.Application vs Excel.Application

“新”Excel.Application vs Excel.Application
EN

Stack Overflow用户
提问于 2013-11-07 03:50:14
回答 2查看 41.4K关注 0票数 7

我要求澄清"New“对对象和脚本的影响。

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

如果我保持此应用程序处于活动状态(例如,通过诸如工作簿之类的对象),然后在脚本中决定打开另一个工作簿,我应该仍然使用新的Excel.Application,还是使用Excel.Application更好?

我担心的是我要写一个很长的脚本,它将在至少5个工作簿上执行操作。我将不得不从一个工作簿切换到另一个工作簿,然后返回到前者...

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

写这样的代码是不是更合适:

代码语言:javascript
复制
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")...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-07 04:54:56

excel应用程序可以同时打开多个工作簿,因此您不需要实例化一个新的工作簿。如果是从excel内部进行操作,则不需要引用应用程序即可打开工作簿。您可能希望创建多个工作簿实例,例如

代码语言:javascript
复制
Dim wbWorkbookA As Workbook
Dim wbWorkbookB As Workbook

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

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

票数 2
EN

Stack Overflow用户

发布于 2015-10-27 07:05:54

我将写一个长脚本,它将在至少5个工作簿上执行操作

问得好,简而言之,您可以在一个Application对象中打开5个工作簿。

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

代码语言:javascript
复制
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对象,下面是一些提示:

代码语言:javascript
复制
Dim nXlApp as New Excel.Application

具有与以下内容相同的效果:

代码语言:javascript
复制
Dim xlApp as Excel.Application
Set xlApp = New Excel.Application             'Early Binding
Set xlApp = CreateObject(“Excel.Application”) 'Late Binding

不要在循环中定义(dim),但是您可以根据需要多次实例化(设置)同一个对象。如果你在一个控件(按钮等)中使用全局对象(不推荐这样做,但有时很方便),你可以这样使用:

代码语言:javascript
复制
if xlApp is Nothing then set xlApp = CreateObject(“Excel.Application”)

当你做完的时候,别忘了清理房间!

代码语言:javascript
复制
wb1.Close False
set wb1 = Nothing 'do this once for each defined object, anything using New/Set

另请参见

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19821426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档