はじめまして!現在、初めて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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
【お題】逆襲の桃太郎
【大喜利】桃太郎が1回鬼退治に失敗したところから始まる新作昔話「リベンジオブ桃太郎」にはこんなシーンがある
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
【お題】追い込まれた犯人が咄嗟に言った一言とは?
-
昨日まで動いていたエクセルのマクロが急に動かなくなりました
Excel(エクセル)
-
VB6 Dir関数で52エラー発生
Visual Basic(VBA)
-
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
-
4
ExcelVBAのDirでスペース含むファイル名
Visual Basic(VBA)
-
5
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
-
6
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
7
ファイル名を変更するマクロを作成したが「ファイル名または番号が不正です」と表示されます
Excel(エクセル)
-
8
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
9
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
10
実行時エラー52
Excel(エクセル)
-
11
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
12
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
13
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
14
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
15
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
16
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
17
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
18
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
19
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
20
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お助けください!VBAのファイル...
-
UserForm1.Showでエラーになり...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
実行時エラー 438 の解決策をお...
-
On ErrorでエラーNoが0
-
python初心者です。
-
インポート時のエラー「データ...
-
文字列内で括弧を使うには
-
SQLでエラーです。
-
変数にするとエラーになる理由は?
-
VBA データ(特定値)のある最...
-
VBでSQL文のUPDATE構文を使った...
-
pythonのopenpyxlについて
-
String""から型'Double'への変...
-
フランスの生年月日(jj/mm/aaaa)
-
エクセル 足し算引き算で 空...
-
【VB.NET】 パワポ操作を非表示で
-
グラフを表示するとき「’~’メソ...
-
エクセル関数式=ABSで#VALUE!...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
お助けください!VBAのファイル...
-
On ErrorでエラーNoが0
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
VBA データ(特定値)のある最...
-
Excel vbaについての質問
-
実行時エラー 438 の解決策をお...
-
Filter関数を用いた結果、何も...
-
ApplicationとWorksheetFunctio...
-
ACCESSで値を代入できないとは?
-
LaTeXのエラーについて(コンパ...
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
HTMLソースが表示のページのも...
-
VBAのリストボックスで、横スク...
-
ExecuteNonQueryメソッドの戻り値
おすすめ情報