用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 (或rangecells或许多被引用的对象),而不显式声明这个子对象来自哪个父对象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) ,其中xWorkbooks Collection对象的索引。 Workbooks(x)与您在该循环中打开的文件不同。