
プログラムを編集するところ、実行時エラー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ベストアンサー
- 回答日時:
ステップインにて動作すればわかると思います。
Windows(bookName).Activateで実行時エラーのようです。
bookName = Dir()にてファイル名を次々に取得していますが
全てのファイルを取得した後、bookName = Dir()を実行すると
bookNameには""が格納されます。
ブック名""なんてのはありえないので
実行時エラーが発生します。
で、もう少し見てみると
見つからなかった場合の処理も変な感じがします。
たぶん、最初に戻ってフォルダを再指定したいはずなのに
そうなっていませんね。もう少し考える必要があるようです。
この回答への補足
ご回答、ありがとうございます。
やっぱり勉強足りなくて。。。
もうちょっと詳しく話していただけないでしょうか。
よろしくお願いします。
No.3
- 回答日時:
こんばんは。
>本を参考しても、調べても正確になってくれないので、ここで問題を出したわけです。
もう、ここら辺は、本で調べるレベルではなくて、ひたすらコードを書く段階に入っているように思います。一週間、あれこれいじってもうまく通らない場合、「あれこれいじった」こと自体が実力を上げているものだと思います。しかし、うまく行かない場合は、新たに書き直しても、スタートラインは、かなりレベルが上がった段階からなので、意外にうまく行くことが多いような気がします。
ご質問のコードから、私がどれほど読みきれているのか、という評価にもなりますが、私の書いたものも見ていただけますか?
一応、表示は、日本語をそのまま英語にしました。だから、少し、語順がヘンですが、それは、余興の範囲だとしてください。
'-------------------------------------------
'Option Explicit
Sub OpenFileProgram1()
Dim myFolder As String
Dim objFolder As Object
Dim fn As String
Dim rngData As Range
Dim myDir As Variant
Dim orgDir As Variant
Dim msgRet As VbMsgBoxResult
Dim temp As String
Dim x As Long, n As Variant
Const sEXT As String = "*.xls"
'フォルダ記録
myDir = ThisWorkbook.Path
orgDir = myDir
Set rngData = ActiveSheet.Range("B4:G4")
If Application.Count(rngData) = 0 Then _
MsgBox "fileData on Activesheet, not found", vbExclamation: Exit Sub
Do
Set objFolder = CreateObject("Shell.Application").BrowseForFolder(0, _
"Choose Folder and Push Enter Key", 1, myDir)
If objFolder Is Nothing Then
Exit Sub
Else
myFolder = objFolder.Items.Item.Path
End If
If Dir(myFolder & "\" & sEXT) <> "" Then
For x = 1 To 6 ' start only from '1'
n = rngData(, x).Value 'Checkpoint
If n <> "" Then
fn = Dir(myFolder & "\" & n & Mid(sEXT, 2), vbNormal)
End If
If fn <> "" Then
msgRet = MsgBox(fn & " is OK?", vbQuestion + vbYesNoCancel) '
If msgRet = vbYes Then
Exit Do
'geting out
ElseIf msgRet = vbCancel Then
Exit Sub
'canceling
End If
End If
Next
End If
If fn = "" Then
temp = Mid(myFolder, InStrRev(myFolder, "\") + 1)
If MsgBox(temp & ":Target File No found" & _
vbCrLf & "Coutinue?", vbInformation + vbOKCancel) = vbCancel Then
End If
End If
Loop
On Error Resume Next
With Workbooks.Open(myFolder & "\" & fn)
.Worksheets("A").Range("C55:F55", "H55:I55").Copy
ThisWorkbook.Sheets(4).Range("B5").Cells(1, x).PasteSpecial _
Paste:=xlValues, Transpose:=True
' Not better the usage of Sheets(4) but get the explicit name of worksheet in a 'Worksheets object'
.Close False
End With
If Err.Number > 0 Then
MsgBox Err.Number & " : " & Err.Description, vbExclamation
Else
MsgBox "Completed!", vbInformation
End If
On Error GoTo 0
ChDir orgDir
End Sub
この回答への補足
ご回答ありがとうございます。
親切に、詳しく書いていただいて、どうもありがとうございました。
コードをコピーして、実行したのですが、思うとおりになりませんでした。
でも、おっしゃったとおり、お書きになったコードを参考しながら、もう一度書き直したいです。
どうも、ありがとうございました。
No.2
- 回答日時:
こんにちは。
私の目からは、かなりコードの無駄が多すぎるような気がしますが、もし、ご自分で書いたものなら、この程度のエラーの原因は自力で解決してほしいなって思います。せっかくのコードが泣いてしまいます。こういうバグつぶしが、上達させますからね。
単に、Workbooks.Openがないだけですね。
たぶん、その引数は、myPath & "\" & bookName と間に「\」が入るとは思いますが。
もし、これが、ご自分が書いたコードで、ご希望があれば、こちらも試しに見本のコードを出しても良いと思いますが、もし、マクロの勉強中なら、今回のようなコードは悪くないです。盛りだくさんのメソッドは、めったに使わないものでも、一度や二度は使ってみなければ覚えないからです。
この回答への補足
ご回答ありがとうございます。
実はこの問題は、一週間前から出てきて、ずっとこれを解決しようとしたのですが、本を参考しても、調べても正確になってくれないので、ここで問題を出したわけです。
できれば、見本を参考させていただければ、自分の勉強には役に立つと考えておりますが、ご都合がよろしければ、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
実行時エラー -'-2147417848
-
VBAがブレークモードになっ...
-
VBAでのエラー
-
【Excel VBA】マクロをボタンに...
-
INSERT INTOステートメント構文...
-
アクセス 実行時エラー3265
-
マクロについて教えてください...
-
VBAのコードがエラーになっ...
-
ExcelVBAで、ユーザー定義型は...
-
Outlook.ApplicationをCreateOb...
-
ExcelVBA Range クラスの Page...
-
VBSで変数の宣言はできないので...
-
ADODB.Streamを使用してUTF-8を...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー3001「引数が間違...
-
Invalid procedure call or arg...
-
vbaのvlookup関数エラー原因を...
-
Access2000での未定義関数repla...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
なぜこんな初歩的なVBAのIf文で...
-
ExcelVBA Range クラスの Page...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー -'-2147417848
-
【Excel VBA】マクロをボタンに...
-
Outlook.ApplicationをCreateOb...
-
VBAでのエラー
-
マクロについて教えてください...
-
実行時エラー3001「引数が間違...
-
実行時エラー48発生時のDLL特定...
-
VB6+SQL サーバー 2000 で 実行...
-
エクセルエラー13型が一致しま...
-
VBS実行時エラー オブジェクト...
-
ADODB.Streamを使用してUTF-8を...
-
INSERT INTOステートメント構文...
-
VBAで、定数式が必要ですのエラ...
-
OLEDB.NETで接続できない
-
VBSで変数の宣言はできないので...
おすすめ情報