Как сделать папку в excel?
Option ExplicitSub CreateFolders()
Dim sPath As String, FolderName As String
Dim objFSO As Object, objParentFolder As Object
Dim objChildFolder As Object
Dim lngValue&, sStartFoderFileName$, sFoderFileName$
Dim Number&, i&
sPath = "C:Temp"
If Dir(sPath, vbDirectory) = "" Then
MkDir sPath
End If
Number = Application.InputBox("Сколько создать папок?", "Создание папок", 1, , , , , 1)
If Number = 0 Then Exit Sub
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objParentFolder = objFSO.GetFolder(sPath)
For i = 0 To Number - 1
lngValue = 0
sFoderFileName = ""
For Each objChildFolder In objParentFolder.SubFolders
sFoderFileName = ExtractValue(Right(objChildFolder.Name, 4))
If lngValue < sFoderFileName Then
lngValue = sFoderFileName
sFoderFileName = objChildFolder.Name
End If
Next
If lngValue < 9 Then sFoderFileName = "000"
If lngValue >= 9 And lngValue < 99 Then sFoderFileName = "00"
If lngValue >= 99 And lngValue < 999 Then sFoderFileName = "0"
If lngValue >= 999 Then sFoderFileName = ""
If sStartFoderFileName = "" Then sStartFoderFileName = Format(Date, "YYYY/MM/DD") & "_" & sFoderFileName & (lngValue + 1)
sFoderFileName = Format(Date, "YYYY/MM/DD") & "_" & sFoderFileName & (lngValue + 1)
objFSO.CreateFolder (sPath & sFoderFileName)
Next i
MsgBox "Папки в количестве " & Number & " созданы!" & Chr(10) & _
"сохранены в папке: " & sPath & Chr(10) & _
"Начальная папка: " & sStartFoderFileName, 64, "Конец"
End SubFunction ExtractValue(pstrText)
Dim objRegExp As Object, GetDigitsFromText& On Error Resume Next
Set objRegExp = CreateObject("VBScript.RegExp")
With objRegExp
.MultiLine = True
.Global = True
.Pattern = "D"
GetDigitsFromText = .Replace(pstrText, vbNullString)
End With
ExtractValue = GetDigitsFromText
On Error GoTo 0
Set objRegExp = Nothing
End Function
В рамках одной из задач понадобилось создать папки с именами позиций заведенных в эксельку. Так как набралось больше сотни строк, да и в дальнейшем список грозит расширятся выполним эту задачу с помощью скрипта. Заодно добавим гиперссылок так, чтобы к каждой позиции у нас был доступ прямо из Эксель.
На выходе получаем список папок в экселе с со ссылками чтобы можно было их, папки, сразу открыть.
Sub Create_Folders()'для корректной работы необходимо выбрать ячейки перед тем как запустить макрос. Dim OpenAt As String 'Зададим каталог для папок по умолчанию.
OpenAt = «My computer:»
‘Вызовем диалог для выбора места папок. Set ShellApp = CreateObject(«Shell.Application»).BrowseForFolder(0, «Please Choose The Folder For This Project», 0, OpenAt)
‘Устанавливаем выбранную папку в качестве рабочей. (в случае ошибки отменяем процесс) On Error Resume Next
BrowseForFolder = ShellApp.Self.Path
‘Выхватываем список выбранных ячеек. Dim Rng As Range
Dim maxRows, maxCols, r, c As Integer
Set Rng = Selection
maxRows = Rng.Rows.Count
maxCols = Rng.Columns.Count
‘—в цикле проходим все ячейки в нашем— For c = 1 To maxCols
r = 1
Do While r
Обидевшись на ваши ответы, и посидев немного с VBA все таки написал скрипт, хоть и вышел за пределы сроков. Надеюсь вам пригодится, так что я выложу его сюда
Sub Кнопка1_Щелчок() Dim i As Long Dim ActWB As Workbook Dim avInp(), fl As Object Dim Kol_pid, Pid, kol1 As Integer Dim Stolbec, StrokaOtsch As Integer Dim NameFile() As String Dim NewFoldPth, OldFoldPth, FoldPth, NewFolder1, NewFolder As String Dim ki, counter As Long Dim Fiyli() As String Dim Stolbec1 As String Dim iSheet As Integer ' Индекс листа Dim sFPName As String ' Имя последней папки перед нумерацией Set FSO = CreateObject("Scripting.FileSystemObject") Stolbec1 = Application.InputBox("Укажите номер столбца, в котором находятся наименования файлов", "Номер столбца", "3") Kol_pid = Application.InputBox("Укажите количество файлов в папке", "Номер папки", "3") StrokaOtsch = Application.InputBox("Укажите номер строки начала данных", "Номер строки", "3") StolbecOut = Application.InputBox("Укажите номер столбца куда писать пути", _ "Номер столбца", "3") Stolbec = CInt(Stolbec1) StrokaOtsch = CInt(StrokaOtsch) StolbecOut = CInt(StolbecOut) Application.ScreenUpdating = False i1_n = Cells(Rows.Count, Stolbec).End(xlUp).Row Set ActWB = ActiveWorkbook iSheet = ActiveSheet.Index ' NewFolder = Application.InputBox("Укажите имя папки, в которую необходимо перенести файлы", "Имя новой папки", _ ' "Файлы из списка") ' StrokaOtsch = Application.InputBox("Укажите номер строки, в которой находится шапка таблицы", _ ' "Номер строки", "1") ' NewFolder = "fileout" ' counter = 3 ' StrokaOtsch = "1" Pid = 1 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "как сделать папку в excel" .ButtonName = "Select": .AllowMultiSelect = False If .Show Then FoldPth = .SelectedItems(1) Else Exit Sub End With With Application.FileDialog(msoFileDialogFolderPicker) .Title = "как сделать папку в excel" .ButtonName = "Select": .AllowMultiSelect = False If .Show Then NewFolderPath = .SelectedItems(1) Else Exit Sub 'MsgBox (.SelectedItems(1)) End With 'NewFolderPath = NewFolderPath & "" Time_1 = Timer If Right(NewFolder, 1) "" Then NewFolder = NewFolder & "" If Right(FoldPth, 1) "" Then FoldPth = FoldPth & "" bbb = Split(NewFolderPath, "") sFPName = bbb(UBound(bbb)) ReDim NameFile(i1_n - StrokaOtsch) 'For i1 = 1 To i1_n - StrokaOtsch + 1 ' If Cells(StrokaOtsch + i1 - 1, Stolbec) "" Then ' n = n + 1 ' NameFile(n) = Cells(StrokaOtsch + i1 - 1, Stolbec) ' End If ' Next i1 ReDim Preserve NameFile(n) Set FSO = CreateObject("Scripting.FileSystemObject") With FSO If Not .FolderExists(NewFolderPath & "" & Pid & "") Then .CreateFolder NewFolderPath & "" & Pid & "" 'создание нового каталога куда копировать каталога With .GetFolder(FoldPth) ' If .Files.Count = 0 Then MsgBox "Файлов в указанном пути не найдено", 48: Exit Sub 'проверка наличия файлов откуда происходит копирование ' ReDim Fiyly(.Files.Count) ' For Each fl In .Files ' ki = ki + 1 ' Fiyly(ki) = fl.Name ' MsgBox (Fiyly(ki)) Заполнение массива именами файлов, находящихся в каталоге которые надо копировать ' Next fl kol1 = 1 For i1 = StrokaOtsch To i1_n ' For i = 1 To UBound(Fiyly) If Cells(i1, Stolbec) "" Then ' MsgBox (Cells(i1, Stolbec)) ' NameFile(i1) = Cells(i1, Stolbec) ' If Fiyly(i) = NameFile(i1) Then If kol1 = Kol_pid + 1 Then Pid = Pid + 1 With FSO If Not .FolderExists(NewFolderPath & "" & Pid & "") Then .CreateFolder NewFolderPath & "" & Pid & "" End With kol1 = 1 End If ' MsgBox (FoldPth & NameFile(i1) & "Новая куда" & NewFolderPath) If FSO.FileExists(FoldPth & Cells(i1, Stolbec)) Then Kol = Kol + 1 kol1 = kol1 + 1 FSO.MoveFile FoldPth & Cells(i1, Stolbec), NewFolderPath & "" & Pid & "" ActWB.Sheets(iSheet).Cells(i1, StolbecOut).Value = sFPName & "" & Pid & "" & Cells(i1, Stolbec) End If ' End If ' Next i End If Next i1 End With End With time_ = Time_1 - Timer Time_delta = Format(time_ / 24 / 60 / 60, "hhч mmм ssс") Application.ScreenUpdating = True MsgBox ("Выполнено за " & Time_delta & Chr(13) & "Количество перемещённых файлов :" & Kol) End Sub