|
行き詰りました。。お知恵をお借りできたら嬉しいです。
1つのフォルダに複数のブックにあり、
そのブックの中で、特定のシートにあるレコードだけを1つのブックに
コピぺで集約していくマクロを作成しています。
シートが有るか無いかをflagを使って処理をしようと入れてみました。
一番最初に該当するシートが無いブックに当たった場合は、処理ができたのですが、途中に該当するシートが無いブックにがあると、
「実行時エラー9、インデックスが有効範囲にありません。」となり、
ウォッチで見ると、flag の値が empty になっていました。
flag の値を空にする処理が必要なのでしょうか。。
以下がVBAになります。
宜しくお願い致します!
<行いたい処理>
ブックの中に、シートAがあったら値を集約先にコピーする処理、
なかったら次のブックに進む。
<VBA>
============================================
Sub 集約()
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim pass As String
pass = ThisWorkbook.Path & "\ファイルの保存先"
Dim i As Long, j As Long
j = 2
Dim f As File
Dim ws As Worksheet
Dim flag As Boolean
For Each f In fso.GetFolder(pass).Files
With Workbooks.Open(f)
For Each ws In Worksheets
If ws.Name = "A" Then flag = True
Next ws
If flag = False Then Close
If flag = True Then
With .Worksheets("A")
i = 2
Do While .Cells(i, 1).Value <> ""
Sheet1.Cells(j, 1).Value = .Cells(i, 1).Value
Sheet1.Cells(j, 2).Value = .Cells(i, 2).Value
Sheet1.Cells(j, 3).Value = .Cells(i, 3).Value
Sheet1.Cells(j, 4).Value = .Cells(i, 4).Value
Sheet1.Cells(j, 5).Value = .Cells(i, 5).Value
Sheet1.Cells(j, 6).Value = .Cells(i, 6).Value
Sheet1.Cells(j, 7).Value = .Cells(i, 7).Value
Sheet1.Cells(j, 8).Value = .Cells(i, 8).Value
Sheet1.Cells(j, 9).Value = .Cells(i, 9).Value
Sheet1.Cells(j, 9).Value = .Cells(i, 10).Value
i = i + 1
j = j + 1
Loop
End With
Set ws = Nothing
End If
.Close
End With
Next f
End Sub
|
|