VBAで手間取る
Do While ~ Loopがうまく使えない
会社のVBA作成に手間取っています。
Do While ~ Loopなのですが、短いと普通に回るのに、For Nextの入れ子にするとなぜか一回でLoopが抜けてしまう。
成功してるのはこんな感じ。
Sub Macro1() Dim Filename As String Do While Filename <> "" MsgBox Filename Filename = Dir() Loop End Sub
長いやつにすると「プロシージャの呼び出し、または引数が不正です。」となってします。
'失敗作のため下記はエラーが出ます Sub Macro1() Dim Filename As String Do While Filename <> "" If Filename <> newBook.Name Then For Each OpenBook In Workbooks '処理 Next For Each Sh In newBook.Worksheets '処理 Next For i = s + 1 To Worksheets.Count 'シートを統合シートの次~末尾までループ '処理 With newBook.Worksheets(i) '各シート '処理 End With With JoinSh '統合シート ’その後も処理が続く End With Next i End If Filename = Dir() Loop End Sub
もう一度見直します。
For Nextにしたら動いた
結局Do While~Loop文では他のFor~Nextと相性が悪いことが判明。
Do~Loop文をFor Each~Next文に書き換えたところ問題は解消しました。
' For Nextに変更 Sub Macro1() Dim f As File ' VBA記載ワークブックがあるフォルダ内をループ For Each f In fso.GetFolder(ThisWorkbook.Path).Files If Filename <> newBook.Name Then For Each OpenBook In Workbooks '処理 Next For Each Sh In newBook.Worksheets '処理 Next For i = s + 1 To Worksheets.Count 'シートを統合シートの次~末尾までループ '処理 With newBook.Worksheets(i) '各シート '処理 End With With JoinSh '統合シート ’その後も処理が続く End With Next i End If Filename = Dir() Next f End Sub