[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エラー 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.