У меня есть файл Excel с сотнями имен клиентов и несколькими номерами статей.
Чего я хочу добиться, так это иметь макрос, который проверяет, существует ли папка с выбранным именем клиента, и создает новую папку, если она отсутствует. Как только папка клиента найдена или создана, макрос должен проверить, существует ли папка для каждого номера статьи, и, если она отсутствует, создать новую.
Я нашел код, который, кажется, делает все это и многое другое, опубликованный Скоттом Хольцманом, но, поскольку моя репутация слишком низка, чтобы комментировать, я не могу попросить объяснения в этой теме.
Я ссылался на Microsoft Scripting Runtime в качестве запросов кода, но оба оператора «Если нет» помечены красным, а во всплывающем окне отображается только «Ошибка компиляции». Я проверил синтаксис операторов «Если нет», и он кажется правильным, но так как я не имею опыта в VBA, я не могу быть уверен. Есть ли что-то еще, что я должен активировать где-нибудь, чтобы это работало?
'requires reference to Microsoft Scripting Runtime
Sub MakeFolder()
Dim strComp As String, strPart As String, strPath As String
strComp = Range("A1") ' assumes company name in A1
strPart = CleanName(Range("C1")) ' assumes part in C1
strPath = "C:\Images\"
If Not FolderExists(strPath & strComp) Then
'company doesn't exist, so create full path
FolderCreate strPath & strComp & "\" & strPart
Else
'company does exist, but does part folder
If Not FolderExists(strPath & strComp & "\" & strPart) Then
FolderCreate strPath & strComp & "\" & strPart
End If
End If
End Sub
Function FolderCreate(ByVal path As String) As Boolean
FolderCreate = True
Dim fso As New FileSystemObject
If Functions.FolderExists(path) Then
Exit Function
Else
On Error GoTo DeadInTheWater
fso.CreateFolder path ' could there be any error with this, like if the path is really screwed up?
Exit Function
End If
DeadInTheWater:
MsgBox "A folder could not be created for the following path: " & path & ". Check the path name and try again."
FolderCreate = False
Exit Function
End Function
Function FolderExists(ByVal path As String) As Boolean
FolderExists = False
Dim fso As New FileSystemObject
If fso.FolderExists(path) Then FolderExists = True
End Function
Function CleanName(strName as String) as String
'will clean part # name so it can be made into valid folder name
'may need to add more lines to get rid of other characters
CleanName = Replace(strName, "/","")
CleanName = Replace(CleanName, "*","")
etc...
End Function