2017-06-16 5 views
1

同様の質問がされていることは知っていますが、すべてのソリューションコードを試してみましたが成功しませんでした。私はVBAで初心者だと私は何を達成しようとしていることである:VBAがフォルダ内の各ファイルをループしています

  1. ファイルのコピーがsfolから、「概要」タブが存在する場合は、dfolになりました各ファイルについて
  2. をdfolために、セルI3を変更
  3. dfol内の各ファイルに対して
  4. 、「シート2」タブが存在する場合は、変更のピボットフィルタ

コードが実行され、変更が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. 私も、「... 2018」、言う、であることを「... 2017」で始まるフォルダ内のすべてのファイルの名前を変更する必要があります

すべてのヘルプは大歓迎です!

答えて

0

リンクを開くときにリンクを更新しないように指定できます。

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

開いているブックの名前を変更するには、[名前を付けて保存]を使用します。

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

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

ファイルdirについてはわかりません。それはOKと思われますが、私はさらにテストします。 – Jeeped

+0

はSaveAsに戻りますが、どのようにdfolに保存するよう指定できますか?あなたが言及したことは、名前を変更するのに効果的でしたが、ランダムなフォルダに保存されました。 – AppleSnapple

関連する問題