発生している問題
Dir関数でファイル一覧が取得できない。
前提
ディレクトリ構成は以下の通りです。
下記ディレクトリ構成において、
・「040」は、ファイル一覧取得対象のディレクトリ
・「aaa.xlsm、bbb.xlsm、ccc.xlsm、ddd.xlsm」はファイル一覧取得対象のファイル
となっています。
├── 040 │ ├── aaa.xlsm │ ├── bbb.xlsm │ └── ccc.xlsm │ └── ddd.xlsm
コードは以下の通りです。
Option Explicit Sub sub1() Dim wbS, wbD As Workbook Dim ws As Worksheet Dim strPath As String Dim strFile As String Dim iStartRow As Integer Set wbD = ThisWorkbook strPath = ThisWorkbook.Path & "\040" If Dir(strPath, vbDirectory) = "" Then Exit Sub End If strFile = Dir(strPath & "*.xls*") iStartRow = 2 Do While strFile <> "" Err.Clear Set wbS = Workbooks.Open(strPath & "\" & strFile) On Error Resume Next Set ws = wbS.Worksheets("名簿") If Err Then wbS.Saved = True wbS.Close GoTo Continue End If On Error GoTo 0 With ws.Range("A1").CurrentRegion.Offset(1).Resize(ws.Range("A1").CurrentRegion.Rows.Count - 1) .Copy Destination:=wbD.Worksheets("名簿").Range("A" & iStartRow) iStartRow = iStartRow + .Rows.Count End With wbS.Saved = True wbS.Close strFile = Dir() Continue: Loop End Sub
期待結果
Do While~Loop処理の中で、Dir関数を引数なしで実行し、対象ディレクトリ配下のファイルが取得されること。
実行結果
上記コードをデバックして確認したところ、「strFile = Dir()」のところで、実行時エラー「プロシージャの呼び出し、または引数が不正です。」となります。
補足情報(FW/ツールのバージョンなど)
OS: Windows10
Microsoft Visual Basic for Applications 7.1
回答ではないですが、
Dim wbS, wbD As Workbook
だと、wb5はWorkbook型じゃなくてVariant型です。もちろんそれでもいいのですが。
ご指摘ありがとうございました。
Workbook型として宣言する場合、下記のように宣言する必要があるということでしょうか。
Dim wbS As Workbook
Dim wbD As Workbook
コードをコピペして実行してみましたがエラーは出ませんでした。
Windows 10 Pro 20H2 / Microsoft Excel 2013
それでもいいし、
Dim wbS As Workbook, wbD As Workbook
でもいいです。
>コードをコピペして実行してみましたがエラーは出ませんでした。
ご確認いただき、ありがとうございました。
こちらの環境は Windows 10 Pro / Microsoft Excel 2016 ですが、
環境によってDir関数の挙動に違いがあるのでしょうか。こちらでももう少し確認してみます。
>それでもいいし、
Dim wbS As Workbook, wbD As Workbook
でもいいです。
承知いたしました。ご教授いただき、ありがとうございました。
ループの中を
strFile = Dir()
の1行だけにして、再現しなければ、すこしずつ行を戻していって調べる。
実は下記のようなコードで、ループの外で引数なしのDir関数を実行して確認していたのですが、同様に「strFile = Dir()」のところで実行時エラー「プロシージャの呼び出し、または引数が不正です。」となっていました。
~(略)~
strFile = Dir(strPath & "\*.xls*")
iStartRow = 2
strFile = Dir()
Do While strFile <> ""
~(略)~
回答1件
あなたの回答
tips
プレビュー