プロが教えるわが家の防犯対策術!

実行時エラー9:インデックスが有効範囲にありません」ができてた。調べたのですが、原因は分からない、皆さん、助けてください。
以下はあるフォルダーを選定して、セルの値と一致するファイルを探し出して、シートAの中のデータを取り上げて、コピーしたいです。けど、エラーが出てきた。皆さん。よろしくお願いします。
Sub test()
Dim forName, bookName As String
Dim x, y, l As Long
Const cnsDIR = "\*.xls"
Dim bFound As Boolean
Dim myBook, actBook As Workbook
Dim mySheet, actSheet As Worksheet
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
myPath = .SelectedItems(1)
End If
End With
forName = Dir(myPath, vbDirectory)
If Dir(myPath, vbDirectory) = "" Then
MsgBox "It's nothing!", vbExclamation
Exit Sub
End If
bFound = False
For x = 2 To 7 Step 1
bookName = Dir(myPath & cnsDIR, vbNormal)
Do While bookName <> ""
l = InStrRev(bookName, ".xls")

If Mid(bookName, l - 4, 4) = Format(Cells(4, x), "0000") Then
bFound = True
Exit Do 'hang/lie
Else

bookName = Dir()
End If
Loop
If bFound = False Then
Rtn = MsgBox("This is no found. Do you want to continue?", vbYesNo, "選択")
If Rtn = vbNo Then Exit For
End If
Windows(bookName).Activate
actSheet = ActiveWorkbook.Sheets
For Each actSheet In Worksheets
If ActiveSheet.Name = "A" Then
Application.Union(Range("C55:F55"), Range("H55:I55")).Copy
ThisWorkbook.Sheets(4).Range("B5").PasteSpecial Paste:=xlValues, Transpose:=True
End If
Next
Next x
End Sub

A 回答 (3件)

こちらで、話が出ていましたが、同じ人ですか?


http://oshiete1.goo.ne.jp/qa5578701.html

「インデックスが有効範囲にありません」の問題の解答自体は、もうすでに書いています。

私は、他人のコード自体を直して掲示することは基本的にはしません。非常に大きなトラブルになることがあるからです。

ブックを開いていないのに、ブック・オブジェクトを操作しようとすれば、エラーが出るのは当然だと思います。

コード自体は、まだ、実用レベルにない達していない人のコードのようですが、入門者ではないように見受けられますから、こちらの指摘が理解できないはずがありません。もし、ご自身のコードではないのなら、Office 系のカテゴリでおまかせで作ってもらったほうがよいです。

この回答への補足

早速のご答え、どうもありがとう。実は、だちに頼まれて、書き込みしたんですが。
そっちでは、回答をいただいたみたいですが、実に分からないところが多いって言われて、
もっと理解しやすい回答を得られないかなと考えているらしい。
それに、無理矢理に頼んだら、恥ずかしいし、回答者にも迷惑じゃないかって心配しているみたいです。
>Office 系のカテゴリでおまかせで作ってもらったほうがよいです。
ということは、また本人に知らせますが、とりあえず、できることなら、もっと詳しく教えてくれませんか。

今度のことは、私たちを助けて、作っているんですが、いろいろ苦労しているみたいで、助けてあげたい。
できれば、ご回答のほう、お願いします。
誰かの責めじゃなくて、よろしく頼む。

補足日時:2010/01/10 18:00
    • good
    • 0

何処でエラーが出るかぐらいは示した方が良いと思うよ


  :
  :
Windows(bookName).Activate '←ここで出るのでは?
actSheet = ActiveWorkbook.Sheets
For Each actSheet In Worksheets
If ActiveSheet.Name = "A" Then
Application.Union(Range("C55:F55"), Range("H55:I55")).Copy
ThisWorkbook.Sheets(4).Range("B5").PasteSpecial Paste:=xlValues, Transpose:=True
End If
Next
Next x
End Sub

上記の場所でエラーが出るのであれば
下記の修正で取り敢えずはしのげるかも
  :
  :
'Windows(bookName).Activate '←ここで出るのでは?

Workbooks.Open bookName '追加

actSheet = ActiveWorkbook.Sheets
For Each actSheet In Worksheets
If ActiveSheet.Name = "A" Then
Application.Union(Range("C55:F55"), Range("H55:I55")).Copy
ThisWorkbook.Sheets(4).Range("B5").PasteSpecial Paste:=xlValues, Transpose:=True
End If
Next

Workbooks(bookName).Close '追加

Next x
End Sub

ちゃんとコードを読み解いてないので
エラー(実行時エラー9:・・のみ)回避できないかも
参考まで
    • good
    • 0
この回答へのお礼

hige_082さん。
ご回答どうもありがとうございました。
確かに'Windows(bookName).Activateのところで、エラーが出ました。
示さなくてすみませんでした。

おかげで、このエラーは無事解決しました。
でも、その次の
actSheet = ActiveWorkbook.Sheets
のところで、また、"実行時エラー91:オブジェクト変数またはWithブロック変数が設定されていません"
というエラーが出ました。
申し訳ないですが、そちらは、どういうことでしょうか。
教えていただけないでしょうか。

無理を言って申し訳ありません。

お礼日時:2010/01/12 12:49

>actSheet = ActiveWorkbook.Sheetsのところで、また、"実行時エラー91:・・・



   :
   :
'actSheet = ActiveWorkbook.Sheets '使い方が間違っている
'For Each actSheet In Worksheets

For Each actSheet In ActiveWorkbook.Worksheets '追加

If ActiveSheet.Name = "A" Then
   :
   :
    • good
    • 0
この回答へのお礼

ご回答、どうもありがとうございました。
このたび、いろいろと助けてくれて本当に感謝します。
また、直していただいたコードも、これから参考させながら、
自分の不足ももう一度考え直します。
本当にどうもありがとうございました。

お礼日時:2010/01/15 09:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!