2016-07-18 146 views
-2

這個問題不應該很複雜。我有一個大文件夾,裏面有200個單獨的文件夾。現在,每個文件夾都有一個Excel表格。我想在控制文件夾(200旁邊)的vba文件中有一些代碼,它可以迭代200個文件夾並更改每個excel文件中的一位數據。我發現目錄的東西和文件夾迭代,但我無法在這裏和那裏合併它們,我需要一些簡單的幫助。如何編輯多個excel文件,每個文件位於一個文件夾中的不同文件夾中

我的代碼目前是:`子的button1_Click()

Dim wb  As Workbook 
Dim ws  As Excel.Worksheet 
Dim iIndex As Integer 
Dim strPath As String 
Dim strFile As String 

'Get the directories 
strPath = "C:\Users\generaluser\Desktop\testing main folder\" 
strFile = Dir(strPath, vbDirectory) 

'Loop through the dirs 
Do While strFile <> "" 

    'Open the workbook. 
    strFileName = Dir(strPath & strFile & "New Microsoft Excel Worksheet.xlsm", vbDirectory) 
    'Open the workbook. 
    Set wb = Workbooks.Open(Filename:=strPath & strFile & "\" & strFileName, ReadOnly:=False) 

    'Loop through the sheets. 

    Set ws = Application.Worksheets(1) 

    'Do whatever 



    'Close the workbook 
    wb.Close SaveChanges:=True 

    'Move to the next dir. 
    strFile = Dir 
Loop 

末次 `

請幫@MatthewD

+1

如果你沒有向我們展示你編寫的代碼以使它工作,那麼這很複雜。從概念上講,它可能很簡單,就是這樣,但是沒有代碼,我們沒有辦法可以夢想爲項目框架着色所需的具體細節。如果您發佈了您嘗試過的代碼,我們可以幫助您進行編輯。沒有多少人願意爲你做。 –

+0

好吧,我不確定從哪裏開始。我知道代碼需要先抓住主文件夾,然後遍歷每個文件夾。然後對於我知道的每個文件夾,需要製作工作簿,然後調用第一張工作表,然後進行必要的編輯。它只是一個循環和一些代碼,但我不知道如何調用原始文件夾的目錄,然後循環其餘的所有內容。 –

回答

1

既然你沒有顯示的代碼,它是這樣的。

Dim wb  As Workbook 
    Dim ws  As Excel.Worksheet 
    Dim iIndex As Integer 
    Dim strPath As String 
    Dim strFile As String 

    'Get the directories 
    strPath = "c:\temp\" 
    strFile = Dir(strPath, vbDirectory) 

    'Loop through the dirs 
    Do While strFile <> "" 

     'Open the workbook. 
     Set wb = Workbooks.Open(filename:=strPath & strFile & "\filename.xlsx", ReadOnly:=True) 

     'Loop through the sheets. 
     For iIndex = 1 To Application.Worksheets.count 
      Set ws = Application.Worksheets(iIndex) 

      'Do whatever 

     Next iIndex 

     'Close the workbook 
     wb.Close SaveChanges:=False 

     'Move to the next dir. 
     strFile = Dir 
    Loop 

如果工作簿名稱未知,則必須在目錄中指定xlsx文件。

strFileName = Dir(strPath & strFile & "*.xlsx") 
    'Open the workbook. 
    Set wb = Workbooks.Open(filename:=strPath & strFile & "\" & strFileName , ReadOnly:=True) 
+1

爲什麼保存更改= false。如果我想保存只是改變爲真? –

+0

爲什麼'ReadOnly'如果用戶需要更改文件?而且,代碼如何循環子文件夾 - > OP究竟在問什麼? –

+0

和strPath是主文件夾? –

0

好的,這應該很容易。只需遞歸列出所有文件夾中的每個文件。下面的腳本將爲您做到這一點。

Sub ListAllFiles() 
    SearchForFiles "C:\Users\rshuell001\Desktop\YourFolder\", "writefilestosheet", "*.*", True, True 
End Sub 

Sub searchForFiles(ByVal DirToSearch As String, ByVal ProcToCall As String, _ 
     Optional ByVal FileTypeToFind As String = "*.*", _ 
     Optional ByVal SearchSubDir As Boolean = False, _ 
     Optional ByVal FilesFirst As Boolean = False) 
    On Error GoTo ErrXIT 
    If Right(DirToSearch, 1) <> Application.PathSeparator Then _ 
     DirToSearch = DirToSearch & Application.PathSeparator 

If FilesFirst Then processFiles DirToSearch, ProcToCall, FileTypeToFind 
If SearchSubDir Then processSubFolders DirToSearch, ProcToCall, _ 
    FileTypeToFind, SearchSubDir, FilesFirst 

    If Not FilesFirst Then _ 
     processFiles DirToSearch, ProcToCall, FileTypeToFind 
    Exit Sub 
ErrXIT: 
    MsgBox "Fatal error: " & Err.Description & " (Code=" & Err.Number & ")" 
    Exit Sub 
End Sub 


Private Sub processFiles(ByVal DirToSearch As String, _ 
      ByVal ProcToCall As String, _ 
      ByVal FileTypeToFind As String) 
     Dim aFile As String 
     aFile = Dir(DirToSearch & FileTypeToFind) 
     Do While aFile <> "" 
      Application.Run ProcToCall, DirToSearch & aFile 
      aFile = Dir() 
      Loop 
End Sub 


Sub writeFilesToSheet(ByVal aFilename As String) 
    With ActiveSheet 
    .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = aFilename 
     End With 
End Sub 

接下來,你知道的,你需要訪問的每個文件,使用上述技術,打開每個做出更改,保存它,並關閉文件。使用以下URL中描述的技術進行更改。

http://www.rondebruin.nl/win/s3/win010.htm

你必須修改腳本只是有點,因爲看起來對所有文件上的一個文件夾,你需要羅恩的腳本,通過你的第一個腳本創建不同的路徑運行

相關問題