[[20150501111142]] 『「インデックスが有効範囲にありません」のエラー』(あき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『「インデックスが有効範囲にありません」のエラーの原因』(あき)

下記のVBAを作成したのですが、「インデックスが有効範囲にありません」とエラーが出ます。
ワークシートの数だけ繰り返すの部分を付け加えたのですが、その部分でエラーとなります。
原因を教えてください。

Sub データコピー()

    Dim fPath As String   
    Dim fname As String   
    Dim lngRow As Long    
    Dim fcnt, scnt As Long
    Dim i, j As Long

    With ActiveSheet
        fPath = .Range("A1").Value & "\"
        fcnt = Application.WorksheetFunction.CountA(.Range("A:A"))  
    End With

     Application.EnableEvents = False
     Application.ScreenUpdating = False
    For f = 5 To 3 + fcnt
        fname = ThisWorkbook.Sheets("BOM読み込み").Range("A" & f).Value

        Workbooks.Open (fPath & fname)      
        scnt = Workbooks(fname).Worksheets.Count    
        For j = 1 To scnt
        With Workbooks(fname).Sheets(j)  'デバックするとこの部分がエラーとなる
           .Range("F4", .Cells(.Rows.Count, "B").End(xlUp)).Copy  
        End With

        With ThisWorkbook.Sheets("BOM読み込み")
            lngRow = .Range("F" & .Rows.Count).End(xlUp).Row + 1
            .Range("F" & lngRow).PasteSpecial Paste:=xlPasteValues    
        End With
        ActiveWorkbook.Application.CutCopyMode = False
        ActiveWorkbook.Close False
    Next j
    Next f

    For i = Cells(Rows.Count, "F").End(xlUp).Row To 2 Step -1      
    If Cells(i, "I") = "DWG NAME" Then
            Cells(i, "F").Value = Cells(i, "J").Value
    End If

    Next i

      Application.EnableEvents = True
      Application.ScreenUpdating = True
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 一見良さそうですけれど、エラーが出たときの fname と j は何が入っているでしょうか。
 その時開いているファイルのシート数と、scnt は一致しているでしょうか。

 関係ありませんが、
    Dim fcnt, scnt As Long
 は
    Dim fcnt As Long, scnt As Long
 のつもりで書かれたと思いますので、蛇足ながらのコメントです。
(Mook) 2015/05/01(金) 11:43

 どのようなブックがあるのかが分からないので解決するかは不明。
 (たぶんこれでは解決しそうにはないが、念のため)

 >With Workbooks(fname).Sheets(j)  'デバックするとこの部分がエラーとなる
 を
 >With Workbooks(fname).Worksheets(j)  'デバックするとこの部分がエラーとなる
 ではどうだろうか?

(ねむねむ) 2015/05/01(金) 11:49


 あっ、わかりました。
            ActiveWorkbook.Close False
 が Next j の前にある!
(Mook) 2015/05/01(金) 11:52

 おお、それだ。
(ねむねむ) 2015/05/01(金) 11:54

 エラーはMookさん指摘の部分でしょうけど、コードにしっかりと(正しく)インデントをつけておけば
 この間違いは、視覚的に、もっと早く(自分自身で)わかったと思います。

 また、コードそのものでいえば Mookさん指摘の変数宣言の他に、几帳面にシート修飾しているところと
 ActiveSeet.なんとか や シート修飾なしの Cells(なんとか) が混在。
 また、ブックについても几帳面に、ブック修飾しているところと ActiveWorkbookが混在。

 徹底的にブック修飾、シート修飾をしておかれるべきだと思いますね。複数ブックを対象にする処理なんですから。

(β) 2015/05/01(金) 11:56


みなさんありがとうございました。
指摘通りにNext jを移動したら正常に動作しました。

(あき) 2015/05/01(金) 12:11


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.