質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

13657閲覧

ファイルが取得できない。実行時エラー1004

msys1987

総合スコア2

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/06/01 01:47

編集2020/06/01 02:03

前提・実現したいこと

あるフォルダの中に同じフォーマットでブック名が異なる日報のExcelが20個ぐらいあります。
それぞれのExcelから必要な部分のみ抽出して1つのExcelにまとめるプログラムを書いております。

発生している問題・エラーメッセージ

ファイル名を取得する際に以下のエラーが表示され止まってしまいます。

エラーメッセージ
実行時エラー '1004'
申し訳ございませんC:¥○○¥○○¥本体材料費.xlsxが見つかりません。
名前が変更されたか、移動や削除が行われた可能性があります。

該当のソースコード

Sub test()

'画面出力停止 Application.ScreenUpdating = False Dim file As String

  '以下のコードが本エラーの原因と思っております
file = ThisWorkbook.Path & "本体材料費"

Do While file <> "" Dim wb As Workbook

'以下のコードでエラーが出ます。
Set wb = Workbooks.Open(file)
Sheets("本体材料費明細提出用(新仕切併用)").Select

Dim i As Long For i = 22 To 36 If Not Cells(i, 2) = "" And Not Cells(i, 2) = HasFormula Then Range(Cells(i, 15), Cells(i, 45)).Select Selection.Copy Exit For End If Next i ThisWorkbook.Activate Dim x As Long For x = 22 To 75 If Cells(x, 2) = wb.Sheets("本体材料費明細提出用(新仕切併用)").Cells(i, 2) Then Cells(x, 15).PasteSpecial Paste:=xlPasteValues Exit For End If Next x Workbooks(file).Close savechanges:=False file = Dir Loop '画面出力再開 Application.ScreenUpdating = True MsgBox "コピー完了しました。"

End Sub

試したこと

5行目の

file = ThisWorkbook.Path & "本体材料費"
が原因と思ったので

file = Dir(ThisWorkbook.Path & "本体材料費")

へ変更したところ、エラーのメッセージが変わり

実行時エラー'1004'
申し訳ございません。「フォルダのなかにある日報Excelのファイル名.xlsm」が見つかりません。名前が変更されたか、移動や削除が行われた可能性があります。

となりました。フォルダの中にエラーメッセージに記載されているブック名のファイルは存在しております。

解決方法を教えていただけないでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

作りを見る限りフォルダ内のファイルをループで回そうとしているので、試したことのDirにするのは正しいです。
但し\マークが抜けているので追加が必要です。
またDirの戻り値はファイル名のみなので、ファイルをOpenするときはパス名も指定しないとダメな場合があります。
試しに次のようにしてみてはいかがでしょうか。

VBA

1file = Dir(ThisWorkbook.Path & "*本体材料費*") 23file = Dir(ThisWorkbook.Path & "*本体材料費*") 4 5Set wb = Workbooks.Open(file) 67Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & file)

投稿2020/06/01 02:32

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msys1987

2020/06/01 04:14

ありがとうございます。おかげさまで正しく動作するようになりました。 私はVBEを開いてプログラムを書いたのは初めてだったので、具体的なアドバイスが非常に役に立ちました。 またの機会がございましたら、よろしくお願いいたします。
guest

0

ファイル名を取得する際に以下のエラーが表示され止まってしまいます。

そういったファイルの命名規則が曖昧でも可能としてしまう、Scripting.FileSystemObjectという関数がございますので、是非ご利用下さい。

投稿2020/06/01 02:28

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/06/01 02:34

問題の原因も提示せずに代替案だけ提案するのはいかがなものでしょうか。
msys1987

2020/06/01 04:19

ご回答ありがとうございました。 今回初めてVBを書き出したので、理解するまでもう少し時間がかかりそうですが、今後参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問