用VBAclosures文件
我有一个macros,打开一个文件夹中的几个文件,并将一个工作表复制到主文件…这是我的代码的一部分
x = 1 While x <= UBound(openfiles) Workbooks.Open Filename:=openfiles(x) Sheets("Sheet1").Copy After:=crntfile.Sheets(crntfile.Sheets.Count) x = x + 1 Wend
在Sheets("Sheet1").Copy
我想在循环到x+1
之前closures文件x
。 我尝试使用Workbooks(x).Close SaveFiles:= False
但它closures,而不是我的主文件crntfile
而不是文件x
Thx的帮助
您希望在打开该工作簿时掌握该工作簿。 为此,创build一个工作簿variables并将其设置为打开的工作簿。
另外请注意,我在复制时特别引用了该工作簿( openedWorkbook.Sheets("Sheet1").Copy
),这是因为你打开一个新文件的事实意味着它不是活动文件,当你使用Sheets
(或range
或cells
或许多被引用的对象),而不显式声明这个子对象来自哪个父对象Excel使用Active父对象。 有时候这是错误的。 最好是明确地声明你在哪里引用的东西,所以没有任何意外。
Dim openedWorkbook As Workbook x = 1 While x <= UBound(openfiles) Set openedWorkbook = Workbooks.Open(Filename:=openfiles(x)) openedWorkbook.Sheets("Sheet1").Copy After:=crntfile.Sheets(crntfile.Sheets.Count) openedWorkbook.Close SaveFiles:=False x = x + 1 Wend
你可以简单地做:
Workbooks(openfiles(x)).Close
您现在的方法是打开Workbooks(x)
,其中x
是Workbooks
Collection对象的索引。 Workbooks(x)
与您在该循环中打开的文件不同。