Pro*_*oVB 6 excel vba instance excel-vba 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")...
Run Code Online (Sandbox Code Playgroud)
我将编写一个长脚本,该脚本将对至少 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
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果我需要对 Excel 文档执行操作并且应用程序已关闭,那么我应该使用 New Excel.Application
如果您在 Excel 之外(如在 Access 中),那么您可能想要创建一个 Excel.Application 对象,这里有一些提示:
Dim nXlApp as New Excel.Application
Run Code Online (Sandbox Code Playgroud)
具有相同的效果:
Dim xlApp as Excel.Application
Set xlApp = New Excel.Application 'Early Binding
Set xlApp = CreateObject(“Excel.Application”) 'Late Binding
Run Code Online (Sandbox Code Playgroud)
不要在循环内定义 (dim),但是您可以根据需要多次实例化 (Set) 同一个对象。如果您在控件(按钮等)中使用全局对象(不推荐但有时很方便),您可以使用以下内容:
if xlApp is Nothing then set xlApp = CreateObject(“Excel.Application”)
Run Code Online (Sandbox Code Playgroud)
完成后别忘了打扫房子!
wb1.Close False
set wb1 = Nothing 'do this once for each defined object, anything using New/Set
Run Code Online (Sandbox Code Playgroud)
也可以看看,
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")
Run Code Online (Sandbox Code Playgroud)
这将打开工作簿并提供参考,以便您可以使用代码操作它们。