
はじめまして!現在、初めてVBAのコピペ自動ツールを作成しています!
具体的には、複数あるシートの中身をコピーし同シートのテンプレートにペーストしていく、というものを作っています。
動かしてみると「ファイル名または番号が不正です」と変数booknameにパスを代入する箇所「 bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")」でエラーが出てしまい原因が分かりません…
どこをどうすれば良いのか、どうかご教示いただけないでしょうか。
Sub avod_totals()
Application.ScreenUpdating = False
Dim i As Integer
Dim Row1 As Long
Dim targetSheet As Worksheet
Dim bookname As String
bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")
Workbooks.Open ThisWorkbook.Path & "\操作対象フォルダ\" & bookname
If bookname = "" Then
MsgBox ""
Exit Sub
End If
For i = 2 To Worksheets.Count
With Worksheets(i)
Row1 = .Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1
.Activate
.Range("a10", Range("h10").End(xlDown).End(xlToRight)) _
.Copy Sheets(1).Cells(Row1, 1)
End With
Next i
With Worksheets(1)
.Activate
.Columns("H").Value = .Columns("H").Value
.Range("F:G").Delete
.Range("F9").Value = Replace(Range("F9"), "8", "6")
End With
Application.DisplayAlerts = False
For Each targetSheet In Worksheets
If targetSheet.Name <> "テンプレート" Then
targetSheet.Delete
End If
Next
Application.DisplayAlerts = True
MsgBox "完了"
End Sub
No.6ベストアンサー
- 回答日時:
>ワンドライブ上にあるから動作しないとかありますかね?
ありますね。
ExcelファイルがOneDriveと同期している?ThisWorkbook.PathはURLですか、、
>会社の上長とも相談しちゃんと動くようになったら改めてご報告させてください
はい。
最後までお付き合いいただきありがとうございました!
ワンドライブ環境下ではないフォルダに移したら、正常に動作しました( ノД`)!!
知らないことが多すぎて、これからもアホなこと質問するかもしれませんが見捨てないでください!
皆さま本当にありがとうございました!!
No.5
- 回答日時:
こんにちは、#4です。
問題は解決されたでしょうか?一点、アドバイスをしていなかった事を思い出しました。
Workbooks.Openメソッドを使用する場合、基本必須では無いかと思いますので、加筆します。
bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")
について、ファイル名を抽出しているのだと思いますが、拡張子を指定してみてください。
ファイルを抽出できた時にWorkbooks.Openで必ず開く事の出来るWorkbookを指定する為です。
例
bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*.xls*")
If bookname = "" Thenの順番は、#4で示している通りです。
何度もご親切にありがとうございます(*^^*)
ご指摘いただいた通り試してみました!だけど、結果は変数booknameに代入する箇所でファイル名が不正ですとなってしまいます…。
MsgboxでThisWorkbook.Path、ActiveWorkbook.Pathも表示してみましたがちゃんと取得出来ているようで同じパスでした。
ワンドライブ上にあるから動作しないとかありますかね?
時間はかかるかもしれませんが、会社の上長とも相談しちゃんと動くようになったら改めてご報告させてください!
本当にありがとうございました。
No.4
- 回答日時:
横から失礼します。
>新しいExcelから実行
この時、新しいExcelは保存してから、実行してますでしょうか?
新規作成時、保存していないと、パスを取得できないと思いますので、
あと、ThisWorkbook.Path を ActiveWorkbook.Path にした場合は、どうでしょう?
また、エラー箇所が限定的な場所なので、
Debug.Print ActiveWorkbook.Path; "<>"; ThisWorkbook.Path
などで、イミディエイトウィンドウに同じか確認してみてください。(普通同じ)
また、booknameに空白が返されるのは、存在しない為ですので、
bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")
Workbooks.Open ThisWorkbook.Path & "\操作対象フォルダ\" & bookname
If bookname = "" Then
MsgBox ""
Exit Sub
End If
は、不具合が生じます。
bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")
If bookname <> "" Then
Workbooks.Open ThisWorkbook.Path & "\操作対象フォルダ\" & bookname
Else
MsgBox "ブックが見つかりませんでした。"
Exit Sub
End If
のような流れになると思います。
No.3
- 回答日時:
No2です
>するとエラーの内容が変わり、booknameになにも格納されていないようです。
最初のご質問文の際のエラーはちょっと置いておいて、まずは、単純な3行のコードの方で考えてみます。
「エラーの内容が変わり」とありますが、3行のコードでもエラーが発生しているのでしょうか?
それとも、変数booknameの内容が空白なだけで、エラーは発生していないということでしょうか?
前者だと、ちょっと原因の想像がつきませんが、ちなみにエラー発生はどの行で、メッセージは何と出ていますか?(メッセージも大きなヒントになりますので)
後者だとすれば、コードとしてはちゃんと動作しているものと推測されます。
値が空白ということは、該当するものが見つからない(=存在しない)ということと考えられますので、フォルダ構成やパスを再確認してみてください。
立て続けにご回答いただきありがとうございます!!
今日改めて何回か動かしてみたのですが、bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")の箇所で「実行時エラー52 ファイル名または番号が不正です」とでるようになってしまいました。
このエラーが出る前は、おっしゃる通り変数booknameの内容が空白でした。
もうお手上げ状態です(´・・`)
色々と一緒に考えてくれてありがとうございました。
No.2
- 回答日時:
こんにちは
ご質問のエラーに関係しそうなのは2行分しかないので、試みに
Dim bookname As String
bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")
MsgBox bookname
の3行で実行してみましたが、予想通り問題は無いようです。
「操作対象フォルダ」というフォルダが存在しない場合でも、「フォルダが存在しても内容が空」という場合でもエラーにはなりませんね。
ファイルオープンと条件判断の順序、及びファイル種類の限定に関しては、No1様のご指摘の通りと思いますが、これらはご質問のエラーとは直接の関係はないものと思います。
(その実行前にエラーが出ていますので。Openでエラーが出ているなら別ですが)
その他で原因になりそうなのは、「ThisWorkbook.Path」が取れないことですが、エクセルのVBAとして実行なさっているのですよね?
もしもそうでない場合は、ThisWorkbookが取得できないのでエラーになると推測しますが、一方で、その場合は別のメッセージになりそうな気がします。(←確認していません)
回答になっていなくて申し訳ありませんが、一度PCを再起動した上で、新しいエクセルブックに同じコード記して実行してもやはり同じエラーが発生しますでしょうか?
あるいは、単純化のために上記の3行コードで試してみるとか。
ご回答ありがとうございます!
ご指摘の通り再起動後、新しいExcelから実行、3行コードで実行の2通りやってみました。
するとエラーの内容が変わり、booknameになにも格納されていないようです。
デスクトップに操作対象フォルダがありちゃんとExcelデータも格納してあるのに、なぜなのでしょうか(´;ω;`)
あとエラーの内容が変わったのも気になります。
もしご存じでしたらご教示くださいませ。
ありがとうございました。
No.1
- 回答日時:
bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")
これだとフォルダを探している事になるのでは?
拡張子を付けて
bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*.xls?")
とか?
Workbooks.Open ThisWorkbook.Path & "\操作対象フォルダ\" & bookname
If bookname = "" Then
MsgBox ""
Exit Sub
End If
ここは逆では?
If bookname = "" Then
MsgBox ""
Exit Sub
End If
Workbooks.Open ThisWorkbook.Path & "\操作対象フォルダ\" & bookname
わー!!早速ありがとうございます~!嬉しいです!
ご指摘の通り修正したのですが、同じ個所で同じ内容のエラーが出てしまいます…。
本当に謎です(´;ω;`)
また何か違う方法ご存じでしたらご教示くださいませ。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
このQ&Aを見た人はこんなQ&Aも見ています
-
昨日まで動いていたエクセルのマクロが急に動かなくなりました
Excel(エクセル)
-
VB6 Dir関数で52エラー発生
Visual Basic(VBA)
-
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
6
ExcelでVBAを使用した際に、『パス名が無効です』とエラーになります。
Excel(エクセル)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
ExcelVBAのDirでスペース含むファイル名
Visual Basic(VBA)
-
9
実行時エラー52
Excel(エクセル)
-
10
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
13
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
15
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
16
Excel マクロでShearePoint先のフォルダ指定
Excel(エクセル)
-
17
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
18
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
19
マクロ 新しいシートにデータをコピペしてシートの名前を変更したい
Excel(エクセル)
-
20
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お助けください!VBAのファイル...
-
UserForm1.Showでエラーになり...
-
VBAでfunctionを利用しようとし...
-
String""から型'Double'への変...
-
文字列内で括弧を使うには
-
【VBA】ワークブックを開く時に...
-
On ErrorでエラーNoが0
-
VBA データ(特定値)のある最...
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
バッチファイルからVBA実行でエ...
-
ASPでこんなエラーが出たんです...
-
VBでSQL文のUPDATE構文を使った...
-
Excel VBA のFunctionプロシー...
-
.VBSだとADODBのプロバイダが見...
-
【Access】Excelインポート時に...
-
ACCESSで値を代入できないとは?
-
シングルクォーテーションを含...
-
実行時エラー 438 の解決策をお...
-
レコード登録時に「演算子があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
ApplicationとWorksheetFunctio...
-
【Access】Excelインポート時に...
-
インポート時のエラー「データ...
-
実行時エラー 438 の解決策をお...
-
オブジェクト型の変数にフォー...
-
.VBSだとADODBのプロバイダが見...
-
実行時エラー'-2147467259(8000...
-
【VB.NET】 パワポ操作を非表示で
-
フランスの生年月日(jj/mm/aaaa)
-
【VBAエラー】Nextに対するFor...
おすすめ情報