[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エラー 52「ファイル名または番号が不正です。」』(わたなべ)
下記コードのマクロで「ァイル名または番号が不正です。」とエラーになり、エラー箇所は「A = Dir(ThisWorkbook.Path & "\1012コピー\*")」です。
解決するにはどのような変更が必要か教えてください。
Sub シートコピー()
Dim FolderName As String '文字列を入れる変数として「FolderName」を使う Dim FileName As String '文字列を入れる変数として「FileName」を使う With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then FolderName = .SelectedItems(1) & "\" Else Exit Sub End If End With Dim A 'フォルダ内のブック名を取得 A = Dir(ThisWorkbook.Path & "\1012コピー\*") Do While A <> "" 'ブックを開く Workbooks.Open ThisWorkbook.Path & "\1012コピー" & A With ActiveWorkbook 'シートをコピーして取得 .Worksheets("Sheet4").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) 'シート名をブック名に変更 ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name = Left(.Name, 10) .Close False 'ブックを閉じる End With A = Dir() '次のブック名を取得 Loop End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
(隠居Z) 2022/10/12(水) 14:38:49
誤 Workbooks.Open ThisWorkbook.Path & "\1012コピー" & A 正 Workbooks.Open ThisWorkbook.Path & "\1012コピー\" & A
↑なんじゃないかと。
あと、好みの問題ではありますが以下のようにするとすっきりするかと思います。
With ActiveWorkbook ↓ With Workbooks.Open(ThisWorkbook.Path & "\1012コピー\" & A)
(もこな2) 2022/10/12(水) 15:10:23
Sub シートコピー2()
Dim Filename As String
Dim IsBookOpen As Boolean
Dim OpenBook As Workbook
Dim ShCount As Long
Dim fullName As String
Filename = Dir(ThisWorkbook.Path & "\1012コピー\*.xlsx") Do While Filename <> "" If Filename <> ThisWorkbook.Name Then IsBookOpen = False For Each OpenBook In Workbooks If OpenBook.Name = Filename Then IsBookOpen = True Exit For End If Next If IsBookOpen = False Then ShCount = ThisWorkbook.Worksheets.Count fullName = ThisWorkbook.Path & "\1012コピー\" & "\" & Filename Workbooks.Open fullName, UpdateLinks:=1 Worksheets("Sheet4").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) Workbooks(Filename).Close SaveChanges:=False End If End If Filename = Dir() Loop End Sub」 (わたなべ) 2022/10/12(水) 16:01:59
コードにはそんなところが無いです。
でたらめ書いてる?
(めっちゃ) 2022/10/12(水) 18:33:41
Dirで「実行時エラー52」と言えば、 フォルダ名(ファイル名ではない)にShift-JIS にマッピングされない文字が含まれてると発生する場合がありますね。 例えば ChrW(9312)はセーフ、ChrW(10112)だとエラー。って経験があります。
(白茶) 2022/10/12(水) 19:39:33
問題の解決にはつながらないと思いますが何点か。
■1
「シートコピー2」のインデントをちゃんと付け直してみると↓のようになります。
Sub シートコピー2() Dim Filename As String, fullName As String Dim IsBookOpen As Boolean Dim OpenBook As Workbook Dim ShCount As Long
Filename = Dir(ThisWorkbook.Path & "\1012コピー\*.xlsx") Do While Filename <> "" If Filename <> ThisWorkbook.Name Then IsBookOpen = False For Each OpenBook In Workbooks If OpenBook.Name = Filename Then IsBookOpen = True Exit For End If Next
If IsBookOpen = False Then ShCount = ThisWorkbook.Worksheets.Count fullName = ThisWorkbook.Path & "\1012コピー\" & "\" & Filename Workbooks.Open fullName, UpdateLinks:=1 Worksheets("Sheet4").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) Workbooks(Filename).Close SaveChanges:=False End If End If
Filename = Dir() Loop End Sub
上記をみて思うのですが、↓は必要ですか?
For Each OpenBook In Workbooks If OpenBook.Name = Filename Then IsBookOpen = True Exit For End If Next
結局、ファイル名が自ブックと同じでなければ処理するということでいいんですよね?
■2
また↓は、開いてアクティブになったブックの「Sheet4」という名前のシートですよね。
Worksheets("Sheet4").Copy
■3
上記を踏まえて整理すると↓のようになるとおもうので
Sub シートコピー2_整理() Dim フォルダパス As String, ブック名 As String
フォルダパス = ThisWorkbook.Path & "\1012コピー\" ブック名 = Dir(フォルダパス & "*.xlsx")
Do While ブック名 <> "" Debug.Print ブック名 Stop
If ブック名 <> ThisWorkbook.Name Then With Workbooks.Open(フォルダパス & ブック名, UpdateLinks:=1) .Worksheets("Sheet4").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) .Close SaveChanges:=False End With End If
ブック名 = Dir() Loop End Sub
【ステップ実行】してみて、思うとおりのファイルがつかめているかチェックしてみてはどうでしょうか?
(もこな2) 2022/10/12(水) 19:58:24
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.