Нужна помощь в написании макроса 1. нужно макросом проверить наличие по пути D:\work\ARCH\IN\ папки yyyy(год, например 2015), если нет такой папки то создать, затем в папке yyyy проверить наличие папки mm.yy(номер месяца.год, например , 07.15) если нет такой папки то создать, затем в папке mm.yy создать папки, например папка 1, папка 2, папка 3 в результате должно получится например, D:\work\ARCH\IN\2015\07.15\папка 1
2. нужно макросом проверить для каждой папки например, папка 1, папка 2, папка 3(ети папки находятся по пути D:\temp\OD\обработание файли\Отчети\ ) наличие папки yyyy(год, например 2015), если нет такой папки то создать, затем проверить в папке yyyy наличие папки mm(номер месяца например , 07) если нет такой папки то создать в результате должно получится например, D:\temp\OD\обработание файли\Отчети\папка 1\2015\07
код для задания 1. Может быть по аналогии сделаете задание 2 посмотрите комментарии в коде
код
Код
Sub Main()
Const strRootFolder As String = "D:\work\ARCH\IN\"
Dim strYear As String, strMonth As String
Dim i As Long
'здесь в переменные запишите нужный год и месяц
strYear = "2015"
strMonth = "07.15"
If Dir(strRootFolder & strYear, vbDirectory) = "" Then
MkDir strRootFolder & strYear
End If
If Dir(strRootFolder & strYear & "\" & strMonth, vbDirectory) = "" Then
MkDir strRootFolder & strYear & "\" & strMonth
End If
Do
i = i + 1
If Dir(strRootFolder & strYear & "\" & strMonth & "\" & "Папка " & i, vbDirectory) = "" Then
MkDir strRootFolder & strYear & "\" & strMonth & "\" & "Папка " & i
Exit Do
End If
Loop
End Sub
Под виндой проще так (пример какой был, не под задачу):
Код
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
Sub bb()
Const ROOT = "d:\"
Dim c
For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp)).Cells
MakeSureDirectoryPathExists ROOT & c & "\"
Next
End Sub
Хотя смотрю выше Игорь уже показал анологичное на Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" _ (ByVal hwnd As Long, ByVal pszPath As String, _ ByVal psa As Any) As Long
sergey2303 написал: 1. как сработает макрос при запуске в августе, нужно править переменние ?
да, в переменную strMonth нужно так записать: strMonth = "08.15"
Цитата
sergey2303 написал: 2. я извеняюсь что неправильно написал "затем в папке mm.yy создать папки, например папка 1, папка 2, папка 3", нужно создать папки с разними именами
по аналогии используйте оператор MkDir. Оператор MkDir создает папку: указываете путь и имя папки и создается папка
sergey2303 написал: а можно без записи в переменную, что би каждий месяц не лазить в макрос
этот код работает с текущим годом и месяцем -в коде не нужно теперь писать год и месяц
код
Код
Sub Main()
Const strRootFolder As String = "D:\work\ARCH\IN\"
Dim strYear As String, strMonth As String
Dim i As Long
strYear = Format(Date, "yyyy")
strMonth = Format(Date, "mm.yy")
If Dir(strRootFolder & strYear, vbDirectory) = "" Then
MkDir strRootFolder & strYear
End If
If Dir(strRootFolder & strYear & "\" & strMonth, vbDirectory) = "" Then
MkDir strRootFolder & strYear & "\" & strMonth
End If
Do
i = i + 1
If Dir(strRootFolder & strYear & "\" & strMonth & "\" & "Папка " & i, vbDirectory) = "" Then
MkDir strRootFolder & strYear & "\" & strMonth & "\" & "Папка " & i
Exit Do
End If
Loop
End Sub
Sub Main()
Const strRootFolder As String = "D:\work\ARCH\IN\"
Dim strYear As String, strMonth As String
strYear = Format(Date, "yyyy")
strMonth = Format(Date, "mm.yy")
If Dir(strRootFolder & strYear, vbDirectory) = "" Then
MkDir strRootFolder & strYear
End If
If Dir(strRootFolder & strYear & "\" & strMonth, vbDirectory) = "" Then
MkDir strRootFolder & strYear & "\" & strMonth
End If
'эта строка создает папку "Папка". Заместо имени "Папка" можете использовать другое имя
MkDir strRootFolder & strYear & "\" & strMonth & "\" & "Папка"
End Sub
Sub Main()
Const strRootFolder As String = "D:\temp\OD\обработание файли\Отчети\"
Dim strYear As String, strMonth As String
strYear = Format(Date, "yyyy")
strMonth = Format(Date, "mm")
If Dir(strRootFolder & strYear, vbDirectory) = "" Then
MkDir strRootFolder & strYear
End If
If Dir(strRootFolder & strYear & "\" & strMonth, vbDirectory) = "" Then
MkDir strRootFolder & strYear & "\" & strMonth
End If
'эта строка создает папку "Папка". Заместо имени "Папка" можете использовать другое имя
MkDir strRootFolder & strYear & "\" & strMonth & "\" & "Папка"
End Sub
Альтернативный вариант Великий и могучий FileSystemObject в помощь Рабочая функция создания папок, с примером использования
Код
Sub Primer()
Dim sPath
sPath = CreatePath("D:\work\ARCH\IN\2015\07.15\папка 1")
If sPath Then MsgBox "папка создана", vbInformation
End Sub
Function CreatePath(PathName) As Boolean
' Формирование папки с указанным именем.
' Имя папки должно быть полным и начинаться с имени драйвера (диска или сетевого сервера).
' Функция создает указанную папку с любым уровнем вложения папок _
(в отличие от стандраного средтва объекта FileSystemObject, который создает только концевую папку).
' Возвращает True если папка уже существует или если она успешно создана.
Dim FSO, cDrive$, cFolder$, aFolders, nFolder, pSp
Set FSO = CreateObject("Scripting.FileSystemObject")
pSp = Application.PathSeparator
If FSO.FolderExists(PathName) Then
CreatePath = True
Exit Function
End If
cDrive = FSO.GetDriveName(PathName)
cFolder = Mid$(PathName, Len(cDrive) + 2)
If Right$(cFolder, 1) = pSp Then cFolder = Left$(cFolder, Len(cFolder) - 1)
If Left$(cFolder, 1) = pSp Then cFolder = Mid$(cFolder, 2)
aFolders = Split(cFolder, pSp, -1, 0)
cFolder = cDrive & pSp
If Not FSO.FolderExists(cFolder) Then
On Error GoTo Break
FSO.CreateFolder cFolder
End If
If Not IsEmpty(aFolders) Then
For nFolder = 0 To UBound(aFolders)
cFolder = cFolder & aFolders(nFolder) & pSp
If Not FSO.FolderExists(cFolder) Then
On Error GoTo Break
FSO.CreateFolder cFolder
End If
Next
End If
If Not FSO.FolderExists(cFolder) Then GoTo Break
CreatePath = True
Set FSO = Nothing
Exit Function
Break:
If MsgBox(Err.Description, vbExclamation + vbOKCancel, _
"clsFSO.CreatePath") = vbCancel Then Stop
End Function