実行時エラー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
No.1
- 回答日時:
こちらで、話が出ていましたが、同じ人ですか?
http://oshiete1.goo.ne.jp/qa5578701.html
「インデックスが有効範囲にありません」の問題の解答自体は、もうすでに書いています。
私は、他人のコード自体を直して掲示することは基本的にはしません。非常に大きなトラブルになることがあるからです。
ブックを開いていないのに、ブック・オブジェクトを操作しようとすれば、エラーが出るのは当然だと思います。
コード自体は、まだ、実用レベルにない達していない人のコードのようですが、入門者ではないように見受けられますから、こちらの指摘が理解できないはずがありません。もし、ご自身のコードではないのなら、Office 系のカテゴリでおまかせで作ってもらったほうがよいです。
この回答への補足
早速のご答え、どうもありがとう。実は、だちに頼まれて、書き込みしたんですが。
そっちでは、回答をいただいたみたいですが、実に分からないところが多いって言われて、
もっと理解しやすい回答を得られないかなと考えているらしい。
それに、無理矢理に頼んだら、恥ずかしいし、回答者にも迷惑じゃないかって心配しているみたいです。
>Office 系のカテゴリでおまかせで作ってもらったほうがよいです。
ということは、また本人に知らせますが、とりあえず、できることなら、もっと詳しく教えてくれませんか。
今度のことは、私たちを助けて、作っているんですが、いろいろ苦労しているみたいで、助けてあげたい。
できれば、ご回答のほう、お願いします。
誰かの責めじゃなくて、よろしく頼む。
No.2
- 回答日時:
何処でエラーが出るかぐらいは示した方が良いと思うよ
:
:
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:・・のみ)回避できないかも
参考まで
hige_082さん。
ご回答どうもありがとうございました。
確かに'Windows(bookName).Activateのところで、エラーが出ました。
示さなくてすみませんでした。
おかげで、このエラーは無事解決しました。
でも、その次の
actSheet = ActiveWorkbook.Sheets
のところで、また、"実行時エラー91:オブジェクト変数またはWithブロック変数が設定されていません"
というエラーが出ました。
申し訳ないですが、そちらは、どういうことでしょうか。
教えていただけないでしょうか。
無理を言って申し訳ありません。
No.3ベストアンサー
- 回答日時:
>actSheet = ActiveWorkbook.Sheetsのところで、また、"実行時エラー91:・・・
:
:
'actSheet = ActiveWorkbook.Sheets '使い方が間違っている
'For Each actSheet In Worksheets
For Each actSheet In ActiveWorkbook.Worksheets '追加
If ActiveSheet.Name = "A" Then
:
:
ご回答、どうもありがとうございました。
このたび、いろいろと助けてくれて本当に感謝します。
また、直していただいたコードも、これから参考させながら、
自分の不足ももう一度考え直します。
本当にどうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
エクセル関数を教えてください
-
String""から型'Double'への変...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
インポート時のエラー「データ...
-
マクロで"#N/A"のエラー行を削...
-
ApplicationとWorksheetFunctio...
-
VBA データ(特定値)のある最...
-
実行時エラー 438 の解決策をお...
-
【VB.NET】 パワポ操作を非表示で
-
文字列内で括弧を使うには
-
ASPで、変数名に、変数を入れら...
-
マクロの「SaveAs」でエラーが...
-
VBスクリプトでIEの404 not fou...
-
変数にするとエラーになる理由は?
-
「実行時エラー '3167' レコー...
-
実行時エラー'-2147467259(8000...
-
【VBA】ワークブックを開く時に...
-
ACCESSで値を代入できないとは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
マクロで"#N/A"のエラー行を削...
-
On ErrorでエラーNoが0
-
エクセルVBA 「On Error GoTo...
-
VBA データ(特定値)のある最...
-
実行時エラー'-2147467259(8000...
-
【VBA】ワークブックを開く時に...
-
VBでSQL文のUPDATE構文を使った...
-
ACCESSで値を代入できないとは?
-
マクロの「SaveAs」でエラーが...
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
Filter関数を用いた結果、何も...
-
「実行時エラー '3167' レコー...
-
バッチファイルで、あるスクリ...
おすすめ情報