用VBA

2014-04-29 57 views
1

我有一個文件夾中打開多個文件和一個表複製到一個主文件宏... 這裏關閉文件是我的代碼的一部分用VBA

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之前關閉文件x。 我試着用Workbooks(x).Close SaveFiles:= False但它關閉,而不是我的主文件crntfile,而不是文件x

THX的幫助

回答

3

你想獲得一個句柄上打開工作簿時打開它。爲此,創建一個工作簿變量並將其設置爲打開的工作簿。

還要注意我專門引用複製(openedWorkbook.Sheets("Sheet1").Copy),這是因爲你打開一個新的文件的事實意味着它是不活動的文件時,該工作簿,當你只是用Sheets(或rangecells或多個對象引用)沒有顯式聲明這個子對象來自哪個父對象,Excel使用活動父對象。有時這是錯誤的。最好明確地聲明你從哪裏引用東西,這樣就沒有意外。

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 
+1

+1用於推薦使用工作簿對象變量。雖然在這種情況下並不是非常必要(因爲打開的文件通常是「ActiveWorkbook」(除非該文件中的事件處理程序打開add'l工作簿...),這是一個好習慣,我發現顯式聲明對象變量使代碼更容易閱讀和修改。 –

+0

謝謝你完美的作品 – sharkantipav

0

你可以簡單地做:

Workbooks(openfiles(x)).Close

你現在AVE它的方式是開放Workbooks(x),其中xWorkbooks集合對象的索引。 Workbooks(x)與您在該循環中打開的文件不同。