2017-06-16 71 views
1

循環通過每一個文件,我知道類似的問題已經被問過,但我已經嘗試沒有成功的所有解決方案的代碼。我在VBA初學者,我試圖做到的是:從SfoI位VBA文件夾

  1. 將文件複製到dfol
  2. 對於每個文件現在dfol,如果「摘要」選項卡存在,改變細胞I3
  3. 對於dfol每一個文件,如果「Sheet2的」標籤存在,改變樞過濾

代碼運行和變化是完全在dfol的第一個文件,但它甚至不打開每個其餘的的文件。我需要它來打開每個文件。另外,作爲一個側面說明,在結束最後MSGBOX不彈出,所以我想代碼甚至不運行它的全部課程。

Sub GenerateReports() 

'Generate Seed Run Validation Reports Macro 

Dim wb As Workbook 
Dim MainFile, dfol, sfol As String 
Dim vDate, Fname, myExtension As String 
Dim wsCount As Integer 
Dim fso 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

'Confirm the user wants to proceed 
    If MsgBox("Compile?", vbYesNo) = vbNo Then Exit Sub 

'Define current workbook 
    MainFile = ThisWorkbook.Name 

'Define Dates 
    vDate = "Potato" 

'Set file path 
    sfol = "I:\ABCFolder" 
    dfol = "I:\DEFFolder" 

'Copy all files from source folder 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    fso.CopyFolder sfol, dfol 

'Target Path with extension 
    myExtension = "*.xls*" 
    dfol = dfol & "\" 
    Fname = Dir(dfol & myExtension) 

'Loop through files in folder 
    Do While Fname <> "" 
     Set wb = Workbooks.Open(fileName:=dfol & Fname) 

     'Ensure workbook opened 
     DoEvents 

     wsCount = wb.Worksheets.Count 

     For i = 1 To wsCount 
      'Update Date on Summary tab 
      If wb.Worksheets(i).Name = "Summary" Then 
       wb.Worksheets(i).Range("I3") = vDate 
      End If 
     Next i 

     'save changes and close 
     wb.Close SaveChanges:=True 

     'Ensure workbook closed 
     DoEvents 

     'Get next file name 
     Fname = Dir 

    Loop 

'***************************** End of Macro *************************** 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
MsgBox ("Assumptions Compiled!") 
End Sub 

其他問題:

  1. 每一個文件被打開的時候,有人問我,如果我想更新鏈接。我需要它只是不更新​​。
  2. 我還需要在文件夾中的所有文件重命名開頭「2017年......」是,比如說,「2018 ......」

任何幫助,不勝感激!

回答

0

您可以指定不更新打開鏈接時。

Set wb = Workbooks.Open(fileName:=dfol & Fname, UpdateLinks:=false) 

使用SaveAs更改打開的工作簿的名稱。

wb.saveas FileName:=replace(wb.name, "2017", "2018") 

After SaveAs,wb將是原來的新副本。

使用on error resume next用於對彙總表變化的數據更直接的途徑。

on error resume next 
with wb.worksheets("summary") 
    .Range("I3") = vDate 
end with 
on error goto 0 
+0

謝謝:)現在,只要找出它爲什麼不循環所有的文件... – AppleSnapple

+0

我不知道有關文件目錄。它看起來不錯,但我會進一步測試。 – Jeeped

+0

要回另存爲,我怎麼可以指定它被保存在dfol?你提到的重命名偉大的工作,但它被保存到一個隨機文件夾。 – AppleSnapple