Excel vba создание папки: VBA Excel. Создание, копирование, перемещение папок
Содержание
VBA Excel. Создание, копирование, перемещение папок
Создание, копирование, перемещение и удаление папок в VBA Excel методами объекта FileSystemObject. Удаление папок с помощью оператора RmDir.
1.
Создание папки (метод CreateFolder)
1.1.
Синтаксис
1.2.
Параметры
2.
Копирование папки (метод CopyFolder)
2.1.
Синтаксис
2.2.
Параметры
3.
Перемещение папки (метод MoveFolder)
3.1.
Синтаксис
3.2.
Параметры
4.
Удаление папки (метод DeleteFolder)
4.1.
Синтаксис
4.2.
Параметры
5.
Удаление папки (оператор RmDir)
5.1.
Синтаксис
6.
Примеры
Создание папки (метод CreateFolder)
CreateFolder – это метод объекта FileSystemObject, предназначенный для создания новой папки.
Синтаксис
object.CreateFolder (foldername) |
Параметр foldername
можно в скобки не заключать.
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
foldername | Строковое выражение, указывающее папку, которую необходимо создать. |
Если папка, указанная параметром foldername
уже существует, произойдет ошибка.
Копирование папки (метод CopyFolder)
CopyFolder – это метод объекта FileSystemObject, предназначенный для копирования папки из одного расположения в другое.
Синтаксис
object.CopyFolder source, destination, [overwrite] |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
source | Строковое выражение, указывающее папку, которую требуется скопировать в другое расположение. Для копирования нескольких папок используются подстановочные знаки. |
destination | Строковое выражение, задающее конечное расположение, куда требуется скопировать папку (папки) со всеми вложениями из элемента source. Подстановочные знаки не допускаются. |
overwrite | Логическое значение, которое указывает, требуется ли перезаписывать существующие папки и файлы в конечном расположении. True – папки и файлы будут перезаписаны, False – перезапись не выполняется. Необязательный параметр. По умолчанию – True. |
Перемещение папки (метод MoveFolder)
MoveFolder – это метод объекта FileSystemObject, предназначенный для перемещения папки из одного расположения в другое.
Синтаксис
object.MoveFolder (source, destination) |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
source | Строковое выражение, указывающее папку, которую требуется переместить в другое расположение. Для перемещения нескольких папок используются подстановочные знаки. |
destination | Строковое выражение, задающее конечное расположение, куда требуется переместить папку (папки) со всеми вложениями из элемента source. Подстановочные знаки не допускаются. |
Удаление папки (метод DeleteFolder)
DeleteFolder – это метод объекта FileSystemObject, предназначенный для удаления папки с диска со всем ее содержимым.
Синтаксис
object.DeleteFolder folderspec, [force] |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. |
folderspec | Строковое выражение, указывающее папку, которую следует удалить. Для удаления нескольких папок используются подстановочные знаки. |
force | Значение типа Boolean: True – удаляются все папки, False (по умолчанию) – не удаляются папки с атрибутом «только для чтения» (необязательный параметр). |
Метод DeleteFolder
удаляет папки независимо от того, есть ли в них содержимое или нет.
Удаление папки (оператор RmDir)
RmDir – это оператор, предназначенный для удаления пустых папок и каталогов.
Синтаксис
RmDir path |
- path – строковое выражение, определяющее каталог или папку, которую необходимо удалить.
Если удаляемый каталог или папка содержит файлы, произойдет ошибка.
Примеры
Пример 1
Создание папок в VBA Excel с помощью метода CreateFolder:
1 2 3 4 5 6 7 8 9 10 11 12 | Sub Primer1() Dim fso As Object, i As Integer ‘Создаем новый экземпляр FileSystemObject Set fso = CreateObject(«Scripting. FileSystemObject») ‘Создаем несколько новых папок With fso .CreateFolder («C:\Папка главная») For i = 1 To 5 .CreateFolder «C:\Папка главная\Папка » & i Next End With End Sub |
В результате работы этого кода на диске C
будет создана Папка главная
и в ней еще 5 папок, которые будем использовать для копирования, перемещения и удаления.
Пример 2
Копирование папок в VBA Excel с помощью метода CopyFolder:
1 2 3 4 5 6 7 8 9 | Sub Primer2() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») ‘Копируем папки With fso .CopyFolder «C:\Папка главная\Папка 2», «C:\Папка главная\Папка 1\» .CopyFolder «C:\Папка главная\Папка 3», «C:\Папка главная\Папка 1\Папка 2\» End With End Sub |
Код этого примера копирует папки следующим образом: Папка 2
в Папка 1
, а Папка 3
в расположение \Папка 1\Папка 2\
.
Пример 3
Перемещение папок в VBA Excel с помощью метода MoveFolder:
1 2 3 4 5 6 7 8 9 10 | Sub Primer3() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») ‘Перемещаем папки With fso .MoveFolder «C:\Папка главная\Папка 3», «C:\Папка главная\Папка 2\» .MoveFolder «C:\Папка главная\Папка 4», «C:\Папка главная\Папка 2\» .MoveFolder «C:\Папка главная\Папка 5», «C:\Папка главная\Папка 2\Папка 4\» End With End Sub |
Пример 4
Удаление папок в VBA Excel с помощью метода DeleteFolder:
1 2 3 4 5 6 7 8 9 | Sub Primer4() Dim fso As Object Set fso = CreateObject(«Scripting. FileSystemObject») ‘Удаляем папки с содержимым With fso .DeleteFolder «C:\Папка главная\Папка 1» .DeleteFolder «C:\Папка главная\Папка 2» End With End Sub |
Пример 5
Удаление пустой папки в VBA Excel с помощью оператора RmDir:
Sub Primer5() ‘Удаляем пустую папку RmDir «C:\Папка главная» End Sub |
Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.
excel — VBA — как создать папки и переместить туда файлы?
Обидевшись на ваши ответы, и посидев немного с 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 = "Папка Откуда копировать файлы" .ButtonName = "Select": .AllowMultiSelect = False If .Show Then FoldPth = .SelectedItems(1) Else Exit Sub End With With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Папка Куда копировать файлы" .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
Создать папку и подпапку в Excel VBA
спросил
Изменено
6 месяцев назад
Просмотрено
267 тысяч раз
У меня есть выпадающее меню компаний, которое заполнено списком на другом листе. Три столбца: компания, номер задания и номер детали.
При создании задания мне нужна папка для указанной компании и подпапка для указанного номера детали.
Если пройти по пути, он будет выглядеть так:
C:\Изображения\Название компании\Номер детали\
Если существует название компании или номер детали, не создавайте или перезапишите старый. Просто перейдите к следующему шагу. Поэтому, если обе папки существуют, ничего не происходит, если одна или обе не существуют, создайте их по мере необходимости.
Другой вопрос, есть ли способ сделать так, чтобы он работал на Маках и ПК одинаково?
- excel
- vba
- macos
- каталог
- создать каталог
16
Еще одна простая версия, работающая на ПК:
Sub CreateDir(strPath As String) Тусклый вяз Как вариант Dim strCheckPath как строка стрчеккпас = "" Для каждого вяза в Split(strPath, "\") strCheckPath = strCheckPath & вяз & "\" Если Len(Dir(strCheckPath, vbDirectory)) = 0, тогда MkDir strCheckPath Следующий Конец сабвуфера
5
Одна вспомогательная и две функции. Sub строит ваш путь и использует функции, чтобы проверить, существует ли путь, и создать, если нет. Если полный путь уже существует, он просто пройдет мимо.
Это будет работать на ПК, но вам нужно будет проверить, что нужно изменить, чтобы работать и на Mac.
'требуется ссылка на Microsoft Scripting Runtime Подпрограмма MakeFolder() Dim strComp как строка, strPart как строка, strPath как строка strComp = Range("A1") ' принимает название компании в A1 strPart = CleanName(Range("C1")) ' принимает участие в C1 strPath = "C:\Изображения\" Если ПапкаНе существует(strPath и strComp), то 'компания не существует, поэтому создайте полный путь ПапкаСоздать strPath & strComp & "\" & strPart Еще 'компания существует, но разделяет папку Если папка не существует (strPath & strComp & "\" & strPart), то ПапкаСоздать strPath & strComp & "\" & strPart Конец, если Конец, если Конец сабвуфера Функция FolderCreate (путь ByVal как строка) как логическое значение ПапкаСоздать = Истина Dim fso как новый FileSystemObject Если Functions. FolderExists(путь) Тогда Выход из функции Еще При ошибке Перейти к DeadInTheWater fso.CreateFolder path ' может ли быть какая-то ошибка с этим, например, если путь действительно облажался? Выход из функции Конец, если Мертвые в воде: MsgBox "Не удалось создать папку для следующего пути: " & путь & ". Проверьте имя пути и повторите попытку." ПапкаКреате = Ложь Выход из функции Конечная функция Функция FolderExists (путь ByVal в виде строки) в виде логического значения ПапкаЕсть = Ложь Dim fso как новый FileSystemObject Если fso.FolderExists(путь), то FolderExists = True Конечная функция Функция CleanName(strName as String) as String 'удалит имя части #, чтобы его можно было преобразовать в правильное имя папки 'может потребоваться добавить больше строк, чтобы избавиться от других символов CleanName = Заменить (strName, "/", "") CleanName = Заменить(CleanName, "*","") и т. д... Конечная функция
16
Я нашел гораздо лучший способ сделать то же самое, меньше кода, гораздо эффективнее. Обратите внимание, что «»»» означает заключение пути в кавычки, если он содержит пробелы в имени папки. Командная строка mkdir создает любую промежуточную папку, если необходимо, чтобы существовал весь путь.
Если Dir(YourPath, vbDirectory) = "" Тогда Оболочка ("cmd /c mkdir """ & YourPath & """") Конец, если
4
Частная подпрограмма CommandButton1_Click() Dim fso как объект Dim fldrname As String Dim fldrpath как строка Установите fso = CreateObject("scripting.filesystemobject") fldrname = Формат(Сейчас(), "дд-мм-гггг") fldrpath = "C:\Temp\" & имя_флдр Если Не fso.FolderExists(fldrpath) Тогда fso.createfolder (fldrpath) Конец, если Конец сабвуфера
1
Здесь есть несколько хороших ответов, поэтому я просто добавлю некоторые улучшения процесса. Лучший способ определить, существует ли папка (не использует FileSystemObjects, которые разрешено использовать не всем компьютерам):
Функция FolderExists(FolderPath As String) As Boolean Папкасуществует = Истина При ошибке Возобновить Далее Путь к папке ChDir Если Err <> 0, то FolderExists = False При ошибке Перейти к 0 Конечная функция
Аналогично,
Функция FileExists(FileName As String) As Boolean Если Dir(FileName) <> "" Then FileExists = True Иначе FileExists = False Конечная функция
Функция MkDir (ByVal strDir как строка) Dim fso: Set fso = CreateObject("Scripting. FileSystemObject") Если Не fso.FolderExists(strDir) Тогда ' создать родительскую папку, если она не существует (рекурсивно) MkDir (fso.GetParentFolderName(strDir)) ' не существует, поэтому создайте папку fso.CreateFolder strDir Конец, если Конечная функция
3
Это прекрасно работает в AutoCad VBA, и я взял его с форума Excel. Я не знаю, почему вы все так усложняете?
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Вопрос: Я не уверен, что конкретный каталог уже существует. Если он не существует, я хотел бы создать его с помощью кода VBA. Как я могу это сделать?
Ответ: Вы можете проверить, существует ли каталог, используя приведенный ниже код VBA:
(Цитаты ниже опущены во избежание путаницы в программном коде)
If Len(Dir("c:\TOTN\Excel\Examples", vbDirectory)) = 0 Then MkDir "c:\TOTN\Excel\Examples" Конец, если
http://www. techonthenet.com/excel/formulas/mkdir.php
1
Для тех, кто ищет кроссплатформенный способ, который работает как на Windows, так и на Mac, работает следующее:
Sub CreateDir(strPath As String) Тусклый вяз Как вариант Dim strCheckPath как строка стрчеккпас = "" Для каждого вяза в Split(strPath, Application.PathSeparator) strCheckPath = strCheckPath & вяз & Application.PathSeparator Если (Len(strCheckPath) > 1 и не существует FolderExists(strCheckPath)) тогда MkDir strCheckPath Конец, если Следующий Конец сабвуфера Функция FolderExists (FolderPath As String) As Boolean Папкасуществует = Истина При ошибке Возобновить Далее Путь к папке ChDir Если Err <> 0, то FolderExists = False При ошибке Перейти к 0 Конечная функция
Никогда не пробовал с системами, отличными от Windows, но вот тот, что есть в моей библиотеке, довольно простой в использовании. Не требуется специальной ссылки на библиотеку.
Функция CreateFolder (ByVal sPath As String) As Boolean 'Патрик Онорес - www.idevlop.com 'создать сразу полный sPath, если требуется 'возвращает False, если папка не существует и НЕ может быть создана, иначе True пример использования: If CreateFolder("C:\toto\test\test") Then debug.print "OK" 'обновлен 20130422 для правильной обработки путей UNC ("\\MyServer\MyShare\MyFolder") Dim fs как объект Dim FolderArray Папка Dim как строка, i как целое число, sShare как строка Если Right(sPath, 1) = "\", тогда sPath = Left(sPath, Len(sPath) - 1) Установите fs = CreateObject("Scripting.FileSystemObject") 'UNC-путь? заменить 3 "\" на 3 "@" Если sPath Как "\\*\*" Тогда sPath = Заменить(sPath, "\", "@", 1, 3) Конец, если 'теперь разделен FolderArray = Разделить (sPath, "\") 'затем верните @ в \ в элементе 0 массива FolderArray(0) = Заменить(FolderArray(0), "@", "\", 1, 3) При ошибке иди к черту 'начать от корня до конца, создавая то, что должно быть Для i = 0 To UBound (FolderArray) Шаг 1 Папка = Папка и Массив Папок (i) и "\" Если Не fs. FolderExists(Папка) Тогда fs.CreateFolder (Папка) Конец, если Следующий Создать папку = Истина ад: Конечная функция
Вот короткая подпрограмма без обработки ошибок, которая создает подкаталоги:
Открытая функция CreateSubDirs (ByVal vstrPath As String) Dim marrPath() как строка Dim Mint As Integer marrPath = Разделить (vstrPath, "\") vstrPath = marrPath(0) & "\" For mint = 1 To UBound(marrPath) 'идти вниз по дереву каталогов до тех пор, пока не будет существовать Если (Dir(vstrPath, vbDirectory) = ""), то выход для vstrPath = vstrPath & marrPath (мятный) & "\" Следующий монетный двор MkDir vstrPath For mint = mint To UBound(marrPath) 'создать каталоги vstrPath = vstrPath & marrPath (мятный) & "\" MkDir vstrPath Следующий монетный двор Конечная функция
Я знаю, что на этот вопрос уже был дан ответ, и уже было много хороших ответов, но для людей, которые приходят сюда и ищут решение, я мог бы опубликовать то, с чем я в конечном итоге согласился.
Следующий код обрабатывает как пути к диску (например, «C:\Users…»), так и к адресу сервера (стиль: «\Server\Path..»), он принимает путь в качестве аргумента и автоматически удаляет из него любые имена файлов (используйте «\» в конце, если это уже путь к каталогу) и возвращает false, если по какой-либо причине папка не может быть создана. Ах да, он также создает под-под-под-подкаталоги, если это было запрошено.
Открытая функция CreatePathTo (путь как строка) как логическое значение Dim sect() As String 'разделы пути Dim Reserve As Integer ' количество участков пути, которые следует оставить нетронутыми. Dim cPath As String ' временный путь Dim pos As Integer 'позиция в пути Dim lastDir As Integer ' последняя допустимая длина пути Dim i As Integer ' переменная цикла ' если все работает нормально, предположим, что это не сработало: СоздатьПатто = Ложь ' обрезать любое имя файла и разделитель пути в конце: путь = левый (путь, InStrRev (путь, Application.PathSeparator) - 1) ' разбить путь на имена каталогов секта = Разделить (путь, "\") 'Что это за путь? If (UBound(sect) < 2) Then 'недопустимый путь Выход из функции ElseIf (InStr(sect(0), ":") = 2) Тогда резерв = 0 'зарезервировано только имя диска ElseIf (sect(0) = vbNullString) И (sect(1) = vbNullString) Тогда резерв = 2 ' путь к серверу - резерв "\\Сервер\" Еще ' неизвестный тип Выход из функции Конец, если ' проверить назад, откуда путь отсутствует: последний каталог = -1 Для pos = UBound(sect) Зарезервировать Шаг -1 ' построить путь: cPath = vbNullString Для i = 0 до поз. cPath = cPath & sect(i) & Application.PathSeparator Далее ' я ' проверяем, существует ли этот путь: Если (Каталог(cPath, vbDirectory) <> vbNullString) Тогда последний каталог = позиция Выход для Конец, если Следующая поз. ' создать подкаталоги с этого момента и далее: При ошибке Перейти к ошибке 01 Для pos = lastDir + 1 To UBound(sect) ' построить путь: cPath = vbNullString Для i = 0 до поз. cPath = cPath & sect(i) & Application.PathSeparator Далее ' я ' создаем каталог: MkDir cPath Следующая поз. CreatePathTo = Истина Выход из функции Ошибка01: Конечная функция
Надеюсь, кому-то это будет полезно. Наслаждаться! 🙂
Это рекурсивная версия, которая работает как с буквенными дисками, так и с UNC. Я использовал перехват ошибок, чтобы реализовать его, но если кто-то может обойтись без него, мне было бы интересно это увидеть. Этот подход работает от ветвей к корню, поэтому его можно использовать, когда у вас нет разрешений в корневой и нижней частях дерева каталогов.
' Обратный путь создания каталога. Это создаст дерево каталогов сверху вниз к корню. ' Полезно при работе с сетевыми дисками, где у вас может не быть доступа к каталогам, близким к корню. Sub RevCreateDir (strCheckPath как строка) При ошибке GoTo goUpOneDir: Если Len(Dir(strCheckPath, vbDirectory)) = 0 И Len(strCheckPath) > 2 Тогда MkDir strCheckPath Конец, если Выйти из подпрограммы ' Идти вверх по дереву, только если путь с кодом ошибки не найден (76). goUpOneDir: Если Число Ошибок = 76 Тогда Вызов RevCreateDir(Left(strCheckPath, InStrRev(strCheckPath, "\") - 1)) Вызов RevCreateDir (strCheckPath) Конец, если Конец сабвуфера
1
Создание подпапки() MkDir "C:\Test" Конец сабвуфера
1
Sub MakeAllPath (ByVal PS$) Дим ПП$ Если ПС <> "" Тогда ' отрезать любое конечное имя PP = Left(PS, InStrRev(PS, "\") - 1) 'если нет, так постройте Если Dir(PP, vbDirectory) = "" Тогда MakeAllPath Left(PP, InStrRev(PS, "\") - 1) 'если обратно не гонять то строить на том что есть Если Right(PP, 1) <> ":" Тогда MkDir PP Конец, если Конец, если Конец сабвуфера 'Версия цикла Мартинса выше лучше, чем МОЯ рекурсивная версия так что улучшите ниже Sub MakeAllDir (PathS$) ' в формате "K:\firstfold\secf\fold3" Если Dir(PathS) = vbNullString Тогда ' иначе не заморачивайся Dim LI&, MYPath$, BuildPath$, PathStrArray$() PathStrArray = Разделить (ПутьS, "\") BuildPath = PathStrArray(0) & "\" ' Если Dir(BuildPath) = vbNullString Тогда 'проблема ловушки отсутствия диска :\ указан путь Если vbYes = MsgBox(PathStrArray(0) & "< не существует для >" & PathS & " попробуйте добавить к " & CurDir, vbYesNo) Тогда BuildPath = CurDir & "\" Еще Выйти из подпрограммы Конец, если Конец, если ' ' пройтись по нужным папкам ' Для LI = 1 в UBound(PathStrArray) BuildPath = BuildPath & PathStrArray(LI) & "\" Если Dir(BuildPath, vbDirectory) = vbNullString, тогда MkDir BuildPath Следующий ЛИ Конец, если ' уже был там Конец сабвуфера ' использовать как 'MakeAllDir "K:\bil\joan\Johno" 'MakeAllDir "K:\bil\joan\Fredso" 'MakeAllDir "K:\bil\tom\wattom" 'MakeAllDir "K:\bil\herb\watherb" 'MakeAllDir "K:\bil\herb\Jim" 'MakeAllDir "bil\joan\wat" ' диск по умолчанию
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Excel VBA — Создайте папку с подпапками и дополнительной подпапкой + скопируйте Excel в основную папку
, во-первых, извините, если мой английский не идеален, так как я француз.
Я новичок в этом, и я пытаюсь сделать так, чтобы моя компания работала, чтобы сэкономить время.
Я хотел бы сделать код VBA, который создает папку с 9 подпапками внутри, но сложная часть, я думаю, заключается в том, что внутри этих 9 подпапок мне снова нужны подпапки.
Затем мне нужно автоматически скопировать файл Excel в основную папку с таким же именем
Имя основной папки должно быть основано на 3-х строках Excel «A2» «C2» «B2»
Ниже снимок экрана внутри Основная папка:
У меня есть код, который я нашел в Интернете, который делает некоторые вещи, которые мне нужны, но я не знаю, как это сделать.
Ниже код, который у меня есть:
Sub CreateDirs() Dim r As Диапазон Dim RootFolder как строка Корневая папка = Диапазон ("K2"). Значение Диапазон("A2").Выбрать Для каждого r в диапазоне (Selection, Selection.End (xlDown)) Если Лен(р.Текст) > 0 Тогда При ошибке Возобновить Далее MkDir RootFolder & "\" & r.Text MkDir RootFolder & "\" & r. Text & "\" & Range("L2").Value MkDir RootFolder & "\" & r.Text & "\" & Range("L3").Value MkDir RootFolder & "\" & r.Text & "\" & Range("L4").Value При ошибке Перейти к 0 Конец, если Следующий р Конец сабвуфера
в сочетании с этим кодом:
Sub File_Transfer() ' Dim src как строка, dst как строка, fl как строка Dim л до тех пор, пока 'Исходный каталог 'Диапазон("A2").Выбрать lr = Cells(Rows.Count, "H").End(xlUp).Row Для X = 2 To lr источник = Диапазон ("F" & X). Значение 'Каталог назначения dst = Диапазон ("G" & X). Значение 'Имя файла fl = Диапазон ("E" & X). Значение При ошибке Возобновить Далее 'получить идентификатор проекта FileCopy src & "\" & fl, dst & "\" & fl Если Err.Number <> 0 Тогда Конец, если Следующий X При ошибке Перейти к 0 Конец сабвуфера
Эти 2 кода будут создавать папки с подпапками и копировать файл Excel в основную папку, но основная папка основана только на одном столбце
с этим кодом, у меня есть этот лист Excel:
У меня есть третий код, который создаст только основную папку, но с моим именем на основе моего 3 столбца:
Sub ExampleCode()
Dim strName как строка
Dim strCode как строка
Dim strCode1 как строка
Dim fName как строка
Dim fPath как строка
Dim lastRow As Long
Дим и пока
Dim ws As рабочий лист'Где мы будем создавать эти папки?
fPath = "C:\Users\WBRICET\Documents\TESTVBA"'Проверка ошибок
Если Правильно(fPath, 1) <> Application.