2016-11-14 577 views
1

首先,我很抱歉,如果問題太新手,因爲我仍然自學VBA。VBA編程:workbooks.open打開多個文件

問題:我在「最終文件夾」中有6個excel文件。我需要依次打開每個代碼,從代碼所在的工作簿中放入一些數據(我正在使用此工作簿作爲源代碼)。

錯誤:我試過了多個選項,但是最新的代碼(下面)將所有6個文件打開在一起,而不是依次打開它們。

我的觀察:似乎在腳本循環中運行workbooks.open時,默認情況下所有文件都會打開。

請幫忙。謝謝

Sub PopulateFinalFile() 

    Dim filpath As String 
    Dim fso As Scripting.FileSystemObject 
    Dim fil As Scripting.File 
    Dim fldr As Scripting.Folder 

    filpath = "C:\Users\deepak.ved\Desktop\Reports\Final Reports" 
    Set fso = New Scripting.FileSystemObject 
    Set fldr = fso.GetFolder(filpath) 

    For Each fil In fldr.Files 
     Application.Workbooks.Open (fso.GetFile(fil.Path)) 
    Next fil 


End Sub 

無關的問題:如何指向使用FSO的工作簿。就像我使用getfilefolder.files一樣,它會返回一個路徑。當我將路徑傳遞給工作簿時,我需要有workbook.open(path),但我只想指向該工作簿而不是打開它。

+1

如果按順序打開多個文件,則需要在workbook.open代碼中使用MultiSelect:'Application.Workbooks.Open(fso.GetFile(fil.path),MultiSelect:= True)'。此外,當您使用MultiSelect時,文件的順序不再保留,因此您需要提供循環。嘗試這篇文章的幫助[鏈接](http://stackoverflow.com/questions/25180061/excel-vba-getopenfilename-error-on-multiselect-true) – user1

+0

嘿吉日,謝謝你的快速回復。我會檢查這個,並讓你知道它是否工作:) –

+0

創建一個工作簿變量,說'wb',然後在主循環中有'Set wb = Application.Workbooks.Open(fso.GetFile(fil.Path))' 。仍然在該循環的主體中,處理'wb',然後關閉它。這樣,目錄中的工作簿就會按順序處理,這就是您想要的。這個問題可能有所幫助:http://stackoverflow.com/q/5851531/4996248 –

回答

0

試試這個:

Option Explicit 

Sub PopulateFinalFile() 

    Dim filpath As String 
    Dim fso As Scripting.FileSystemObject 
    Dim fil As Scripting.File 
    Dim fldr As Scripting.Folder 

    filpath = "C:\Users\user\Desktop\TEST" 
    Set fso = New Scripting.FileSystemObject 
    Set fldr = fso.GetFolder(filpath) 

    For Each fil In fldr.Files 
     Application.Workbooks.Open (fil.Path) 
    Next fil 


End Sub 

應該開始開擴逐一。

+1

HI Vityata,謝謝你的幫助。代碼運行的很好。只有一個問題,你認爲「updatelink」屬性可能會推動workbook.open方法同時打開所有文件。因爲當我第一次執行你的代碼時,它會打開所有的文件,但是我稍微修改它以設置updatelinks,我工作。但我真誠地感謝你給予評論和幫助我的時間。 :) –

+0

恩,Idk。我想這是因爲這個'(fso.GetFile(fil.Path))' – Vityata

+0

好的。你也可以分享一下我的另一個問題。我在這裏重複一遍。我有fso.getfile生成了一個路徑。現在我希望將這個文件分配給一個聲明的WB對象,該對象將僅用作工作簿。 Workbooks.open(fil.path)確實指向該工作簿,但不打開它,我只想將其指定爲工作簿而不是fso文件。 –