アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして!現在、初めて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

A 回答 (6件)

>ワンドライブ上にあるから動作しないとかありますかね?


ありますね。
ExcelファイルがOneDriveと同期している?ThisWorkbook.PathはURLですか、、
>会社の上長とも相談しちゃんと動くようになったら改めてご報告させてください
はい。
    • good
    • 0
この回答へのお礼

最後までお付き合いいただきありがとうございました!
ワンドライブ環境下ではないフォルダに移したら、正常に動作しました( ノД`)!!
知らないことが多すぎて、これからもアホなこと質問するかもしれませんが見捨てないでください!
皆さま本当にありがとうございました!!

お礼日時:2020/06/08 10:47

こんにちは、#4です。

問題は解決されたでしょうか?
一点、アドバイスをしていなかった事を思い出しました。
Workbooks.Openメソッドを使用する場合、基本必須では無いかと思いますので、加筆します。

bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")
について、ファイル名を抽出しているのだと思いますが、拡張子を指定してみてください。

ファイルを抽出できた時にWorkbooks.Openで必ず開く事の出来るWorkbookを指定する為です。


bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*.xls*") 

If bookname = "" Thenの順番は、#4で示している通りです。
    • good
    • 1
この回答へのお礼

何度もご親切にありがとうございます(*^^*)
ご指摘いただいた通り試してみました!だけど、結果は変数booknameに代入する箇所でファイル名が不正ですとなってしまいます…。
MsgboxでThisWorkbook.Path、ActiveWorkbook.Pathも表示してみましたがちゃんと取得出来ているようで同じパスでした。
ワンドライブ上にあるから動作しないとかありますかね?
時間はかかるかもしれませんが、会社の上長とも相談しちゃんと動くようになったら改めてご報告させてください!
本当にありがとうございました。

お礼日時:2020/06/05 16:22

横から失礼します。


>新しい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
のような流れになると思います。
    • good
    • 1

No2です



>するとエラーの内容が変わり、booknameになにも格納されていないようです。
最初のご質問文の際のエラーはちょっと置いておいて、まずは、単純な3行のコードの方で考えてみます。
「エラーの内容が変わり」とありますが、3行のコードでもエラーが発生しているのでしょうか?
それとも、変数booknameの内容が空白なだけで、エラーは発生していないということでしょうか?

前者だと、ちょっと原因の想像がつきませんが、ちなみにエラー発生はどの行で、メッセージは何と出ていますか?(メッセージも大きなヒントになりますので)

後者だとすれば、コードとしてはちゃんと動作しているものと推測されます。
値が空白ということは、該当するものが見つからない(=存在しない)ということと考えられますので、フォルダ構成やパスを再確認してみてください。
    • good
    • 1
この回答へのお礼

立て続けにご回答いただきありがとうございます!!
今日改めて何回か動かしてみたのですが、bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")の箇所で「実行時エラー52 ファイル名または番号が不正です」とでるようになってしまいました。
このエラーが出る前は、おっしゃる通り変数booknameの内容が空白でした。
もうお手上げ状態です(´・・`)
色々と一緒に考えてくれてありがとうございました。

お礼日時:2020/06/04 18:06

こんにちは



ご質問のエラーに関係しそうなのは2行分しかないので、試みに
 Dim bookname As String
 bookname = Dir(ThisWorkbook.Path & "\操作対象フォルダ\*")
 MsgBox bookname
の3行で実行してみましたが、予想通り問題は無いようです。

「操作対象フォルダ」というフォルダが存在しない場合でも、「フォルダが存在しても内容が空」という場合でもエラーにはなりませんね。

ファイルオープンと条件判断の順序、及びファイル種類の限定に関しては、No1様のご指摘の通りと思いますが、これらはご質問のエラーとは直接の関係はないものと思います。
(その実行前にエラーが出ていますので。Openでエラーが出ているなら別ですが)

その他で原因になりそうなのは、「ThisWorkbook.Path」が取れないことですが、エクセルのVBAとして実行なさっているのですよね?
もしもそうでない場合は、ThisWorkbookが取得できないのでエラーになると推測しますが、一方で、その場合は別のメッセージになりそうな気がします。(←確認していません)


回答になっていなくて申し訳ありませんが、一度PCを再起動した上で、新しいエクセルブックに同じコード記して実行してもやはり同じエラーが発生しますでしょうか?
あるいは、単純化のために上記の3行コードで試してみるとか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
ご指摘の通り再起動後、新しいExcelから実行、3行コードで実行の2通りやってみました。
するとエラーの内容が変わり、booknameになにも格納されていないようです。
デスクトップに操作対象フォルダがありちゃんとExcelデータも格納してあるのに、なぜなのでしょうか(´;ω;`)
あとエラーの内容が変わったのも気になります。
もしご存じでしたらご教示くださいませ。
ありがとうございました。

お礼日時:2020/06/03 16:28

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
    • good
    • 0
この回答へのお礼

わー!!早速ありがとうございます~!嬉しいです!
ご指摘の通り修正したのですが、同じ個所で同じ内容のエラーが出てしまいます…。
本当に謎です(´;ω;`)
また何か違う方法ご存じでしたらご教示くださいませ。
ありがとうございました。

お礼日時:2020/06/03 14:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A