Переместите присваивания Path
и Folder
в теле цикла и замените & NewPath
на & sheetz0r.Name
- не уверен, каким должен быть ActiveSheet.Sheets.Name
, класс коллекции Sheets
не имеет Name
участник.
Я бы немного перестроил вещи, удалил избыточные переменные и приблизил бы объявления к их использованию. Я думаю, что вы хотите сделать, это что-то вроде этого?
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
Dim Path As String
Path = Dir("C:\Test" & sheet.Name, vbDirectory)
If Path = vbNullString Then
If MsgBox("Path does not exist. Would you like to create it?", vbYesNo, "Create Path?") = vbYes Then
VBA.FileSystem.MkDir Path
Else
Exit For
End If
End If
Next
Тем не менее, проверить, существует ли папка, и создать новую, намного проще / чище, используя FileSystemObject
из библиотеки Scripting
- я бы также абстрагировал подсказывающую часть в ее собственную функцию:
With New Scripting.FileSystemObject
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
Dim Path As String
Path = "C:\Test\" & sheet.Name
If Not .FolderExists(Path) Then
If ConfirmCreateFolder(Path) Then
.CreateFolder Path
Else
Exit For
End If
End If
Next
End With
Private Function ConfirmCreateFolder(ByVal Path As String) As Boolean
Dim prompt As String
prompt = "Folder '" & Path & "' does not exist. Would you like to create it?"
ConfirmCreateFolder = (MsgBox(prompt, vbYesNo, "Create Folder?") = vbYes)
End Function