我正在寻求澄清“新”对对象和脚本的影响。
我的理解是,如果我需要对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")...
答案 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")
这将打开工作簿并提供参考,以便您可以使用代码操作它们。