Excel vba создать папку - IT Справочник
Llscompany.ru

IT Справочник
21 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Excel vba создать папку

Есть ли способ создать папку и вложенные папки в Excel VBA?

Ok, для тех, кто знает, что мастера в Excel VBA, у меня есть выпадающее меню компаний, которое заполняется списком на другой вкладке. Три столбца: компания, Работа # и номер детали.

что у меня происходит, так это то, что при создании задания мне нужна папка для указанной компании, а затем подпапка, созданная на основе указанного номера детали. Так что если вы идете по пути, это будет выглядеть так:

C:ImagesCompany NamePart Number

теперь, если наименование компании или номер детали существует, не создает или перезаписывает старый. Просто перейдите к следующему шагу. Поэтому, если обе папки существуют, ничего не происходит, если одна или обе не существуют, создайте по мере необходимости.

имеет ли это смысл?

Если кто-то может помочь мне понять, как это работает и как заставить его работать, было бы очень признательно. Спасибо снова.

другой вопрос, если это не слишком много, есть ли способ сделать так, чтобы он работал на Mac и ПК одинаково?

10 ответов

один sub и две функции. Sub строит ваш путь и использует функции, чтобы проверить, существует ли путь, и создать, если нет. Если полный путь уже существует, он просто пройдет мимо. Это будет работать на ПК,но вам придется проверить, что нужно изменить для работы на Mac.

еще одна простая версия, работающая на ПК:

Я нашел гораздо лучший способ сделать то же самое, меньше кода, намного эффективнее. Обратите внимание, что «»» должен указывать путь, если он содержит пробелы в имени папки. Командная строка mkdir создает любую промежуточную папку, если необходимо, чтобы весь путь существовал.

здесь есть несколько хороших ответов, поэтому я просто добавлю некоторые улучшения процесса. Лучший способ определить, существует ли папка (не использует FileSystemObjects, которые не всем компьютерам разрешено использовать):

это работает как шарм в AutoCad VBA, и я схватил его с форума excel. Я не знаю, почему вы все так сложно?

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

вопрос: я не уверен, что определенный каталог уже существует. Если он не существует, я хотел бы создать его с помощью кода VBA. Как я могу это сделать?

ответ: вы можете проверить, существует ли каталог, используя код VBA ниже:

(ниже цитаты опущено, чтобы избежать путаницы программного кода)

никогда не пробовал с системами без Windows, но вот тот, который у меня есть в моей библиотеке, довольно прост в использовании. Не требуется специальная ссылка на библиотеку.

вот короткий sub без обработки ошибок, который создает подкаталоги:

Я знаю, что на это был ответ, и уже было много хороших ответов, но для людей, которые приходят сюда и ищут решение, я мог бы опубликовать то, что я решил в конечном итоге.

следующий код обрабатывает оба пути к диску (например, «C:Users — . ..») и на адрес сервера (стиль: «ServerPath..»), он принимает путь в качестве аргумента и автоматически удаляет из него любые имена файлов (используйте » » в конце, если это уже путь к каталогу), и возвращает false, если для чего-либо причина, по которой не удалось создать папку. О да, он также создает подкаталоги sub-sub-sub, если это было запрошено.

Я надеюсь, что кто-то может найти это полезным. Наслаждайтесь! 🙂

Excel (VBA) создать папку

Создать приложение в VBA, позволяющее создать примечание при открытии книги Excel
нужно 1. Создать приложение в VBA, позволяющее создать примечание при открытии книги Excel. как.

Создать робота на VBA Excel
Задача: Создать макрос, который развернет нужное мне приложение, и отработает нажатие определенных.

Надо создать тест на VBA Excel
, чтобы вопросы загружались из екселя, 5 любых вопросов с 3 вариантами ответов. Каждый

VBA Excel как создать подсказку
Доброго времени суток возможно ли создание подсказки (коммента) в пользовательской функции.

Решение

Зачем всё усложнять?

Отключаем вывод сообщений об ошибках, и пытаемся создать папку:

А теперь представим, что такого диска в системе нет. Или есть, но доступ на запись у пользователя отсутствует, что тогда? Строка сохранения книги просто не выполнится! Пользователь об этом даже не узнает, и все его труды в этой книге пропадут. Если уж вам так хочется простоты, то отключайте обработку ошибки On Error GoTo 0 после критического места.

А вообще повторюсь (в какой-то соседней теме уже поднимался вопрос обработки ошибок), ошибку, если есть такая возможность, лучше избегать, это пишут во всех книгах и это говорят все мои знакомые гуру. Ничего страшного в паре «лишних» строк кода нету! А начинающим даже полезно. Представим, что вылетает ошибка типа «Произошла ошибка, обратитесь к разработчику». А разработчик где-то на островах в этот момент, отдыхает . А у заказчика годовой отчёт горит. Хотела бы я позырить на то как он будет удалённо трассировать код, не видя чё жмёт пользователь када вылетает ошибка .

Читать еще:  Excel таймер обратного отсчета

Никто и не говорил про необходимость проверять возникновение ошибок.
Я в подобных случаях использую примерно такие конструкции:

В любом случае, всех возможных ошибок не предусмотришь.

Ладно, если было бы достаточно пары строк.
В случаях, когда любое из последовательных действий может вызвать ошибку, я сам использую подобные конструкции (например, в цикле открываем файл excel, в нем ищем определённый лист, на нём — некую таблицу, и т.д.)

В данном же случае, ИМХО, вполне достаточно и On Error Resume Next

Не спорю, полезно.
Но, если человеку нужен ОДИН работающий макрос, и он в будущем не намерен углубляться в дебри программирования, — его вполне устроит и «урезанный» вариант макроса.

Зачем пытаться предусмотреть все ошибки, не зная, на каких данных и оборудовании будет работать этот макрос?
Бывает, я пишу на форум макросы из 2 строк: первая — это On Error Resume Next, вторая — длинная строка типа этого:

Решение

Потому что после этого, пользователи будут медленно и с наслаждением рвать тебя на кусочки…

Abu, мой респект.
Ты тоже тут немножко пролетела. Представь, что в 28-го пользователь не открывал файл. Может он был в отпуске или на больничном, или 28 было выходным? И зачем сложности с удалением? В этот раз ты чего то перемудрила.

Объект FileSystemObject для работы с файлами. С примерами на VBA

Объект FileSystemObject

Ниже приведен справочник по объекту FileSystemObject, который умеет работать с файлами, каталогами, файловыми потоками. Данный объект позволяет читать файлы, писать в файлы, получать информацию о файлах и др. Данный объект используется в ОС Windows, в некоторых скриптовых языках.

1. Создание объекта

2. Свойства

2.1. Drives

Возвращаемое значение: объект-коллекция «Drives».

Замечание: только чтение.

3. Методы

3.1. CreateFolder

Назначение: создаёт каталог с указанным именем.

  • — строка, путь к каталогу. Если такой каталог уже существует, произойдёт ошибка.

3.2. CopyFile

Назначение: копирует один или несколько файлов.

  • — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — строка, путь назначения (куда копировать).
  • — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).

3.3. CopyFolder

Назначение: рекурсивно копирует каталог.

  • — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — строка, путь назначения (куда копировать).
  • — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).

Описание: процесс копирования прерывается после первой возникшей ошибки.

3.4. MoveFile

Назначение: перемещает один или несколько файлов.

  • — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — строка, путь назначения (куда копировать).

Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый файл уже существует или является папкой в Destination, возникнет ошибка.

3.5. MoveFolder

Назначение: рекурсивно перемещает один или несколько каталогов.

  • — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — строка, путь назначения (куда копировать).

Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый каталог уже существует или является файлом в Destination, возникнет ошибка.

3.6. DeleteFile

Назначение: удаляет указанный файл.

  • — строка, путь к файлу. В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — необязательный, булево (число). Определяет, удалять или нет файлы с атрибутом read-only. По умолчанию — False (не удалять).

3.7. DeleteFolder

Назначение: удаляет указанную папку.

  • — строка, путь к папке. В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — необязательный, булево (число). Определяет, удалять или нет файлы с атрибутом read-only. По умолчанию — False (не удалять).

3.8. BuildPath

Назначение: добавляет к заданному пути новое имя. Если необходимо, вставляется «».

— строка, путь.

  • — строка, имя файла.
  • 3.9. GetAbsolutePathName

    Назначение: возвращает полный путь для заданного относительного пути (из текущего каталога).

    — строка, относительный путь.

    3.10. GetBaseName

    Назначение: возвращает имя (без расширения) последнего компонента в заданном пути.

    Читать еще:  Формат градусов минут секунд в excel

    3.11. GetExtensionName

    Назначение: возвращает расширение последнего компонента в заданном пути.

    3.12. GetFileName

    Назначение: возвращает имя (с расширением) последнего компонента в заданном пути.

    3.13. GetParentFolderName

    Назначение: возвращает путь к последнему компоненту в заданном пути (его каталог).

    3.14. GetDriveName

    Назначение: возвращает имя диска в заданном пути.

    3.15. DriveExists

    Назначение: возвращает True, если указанный диск сущесвтвует, и False в противном случае.

    3.16. FileExists

    Назначение: возвращает True, если указанный файл сущесвтвует, и False в противном случае.

    3.17. FolderExists

    Назначение: возвращает True, если указанный каталог сущесвтвует, и False в противном случае.

    3.18. GetDrive

    Назначение: возвращает объект «Drive» по указанному имени или пути.

    • — строка, имя диска или путь к корневому каталогу диска, возможно UNC-путь.

    3.19. GetFile

    Назначение: возвращает объект «File» по указанному пути.

    Описание: если файл не существует, произойдёт ошибка.

    3.20. GetFolder

    Назначение: возвращает объект «Folder» по указанному пути.

    Описание: если каталог не существует, произойдёт ошибка.

    3.21. GetSpecialFolder

    Назначение: возвращает объект «Folder» для некоторых специальных папок Windows.

    • — число, определяет специальную папку. Возможные значения:
      • 0 — Каталог Windows.
      • 1 — Системный каталог библиотек и драйверов.
      • 2 — Каталог временных файлов, путь к которому хранится в переменной среды «TMP».

    Описание: если каталог не существует, произойдёт ошибка.

    3.22. GetTempName

    Назначение: возвращает случайным образом сгенерированное имя файла, которое может быть использовано для создания временного файла.

    3.23. CreateTextFile

    Назначение: создаёт новый текстовый файл и возвращает объект «TextStream», указывающий на него.

    • — строка, путь к файлу.
    • — необязательный, булево (число). Перезаписывать файл, если он существует (True), или нет (False). По умолчанию — False. Если указано False и файл существует — произойдёт ошибка.
    • — необязательный, булево (число). Файл в формате Unicode (True), или ASCII (False). По умолчанию — False.

    3.24. OpenTextFile

    Бесплатный видеокурс по SQL

    Создать папку и подпапку в Excel VBA

    У меня есть выпадающее меню компаний, которое заполняется списком на другом листе. Три столбца: Компания, Номер задания и Номер детали.

    Когда создается вакансия, мне нужна папка для указанной компании и подпапка для указанного номера детали.

    Если вы пойдете по пути, это будет выглядеть так:

    C:ImagesНазвание компании Part Number

    Если существует либо название компании, либо номер детали, не создавайте и не перезаписывайте старое. Просто перейдите к следующему шагу. Таким образом, если обе папки существуют, ничего не происходит, если одна или обе не существуют, создайте как требуется.

    Другой вопрос, есть ли способ сделать так, чтобы он одинаково работал на Mac и ПК?

    Одна вспомогательная и две функции. Sub строит ваш путь и использует функции, чтобы проверить, существует ли путь и создать, если нет. Если полный путь уже существует, он просто пройдет. Это будет работать на ПК, но вам нужно будет проверить, что нужно изменить для работы на Mac.

    Еще одна простая версия, работающая на ПК:

    Я нашел гораздо лучший способ сделать то же самое, меньше кода, гораздо более эффективным. Обратите внимание, что «» » — это указать путь в случае, если он содержит пробелы в имени папки. Командная строка mkdir создает любую промежуточную папку, если необходимо, чтобы весь путь существовал.

    Здесь есть несколько хороших ответов, поэтому я просто добавлю некоторые улучшения в процессе. Лучший способ определить, существует ли папка (не использует FileSystemObjects, которую не все компьютеры могут использовать):

    Это работает как прелесть в AutoCad VBA, и я схватил его с форума excel. Я не знаю, почему вы все так усложняете?

    ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

    Вопрос: Я не уверен, существует ли определенная директория. Если он не существует, я хотел бы создать его с помощью кода VBA. Как я могу это сделать?

    Ответ. Вы можете проверить, существует ли каталог с помощью кода VBA ниже:

    (Котировки ниже опущены, чтобы избежать путаницы кода программирования)

    Здесь короткий sub без обработки ошибок, который создает подкаталоги:

    Никогда не пробовал с не Windows системами, но вот тот, который у меня есть в моей библиотеке, довольно прост в использовании. Никакой специальной библиотеки не требуется.

    Я знаю, что на это был дан ответ, и уже было много хороших ответов, но для людей, которые приходят сюда и ищут решение, я мог бы опубликовать то, что я решил со временем.

    Следующий код обрабатывает оба пути к диску (например, «C:Users. » ) и к адресу сервера (style: » ServerPath..» ), он принимает путь в качестве аргумента и автоматически удаляет из него любые имена файлов (используйте «» в конце, если это уже путь к каталогу) и возвращает false, если по какой-то причине невозможно создать папку. О да, он также создает суб-под-подкаталоги, если это было запрошено.

    Читать еще:  Как увеличить масштаб графика в excel

    Надеюсь, кто-то найдет это полезным. Наслаждайтесь!: -)

    Это рекурсивная версия, которая работает как с буквенными дисками, так и с UNC. Я использовал перехват ошибок для реализации, но если кто-то может сделать это без, мне было бы интересно увидеть это. Этот подход работает от ветвей до корня, поэтому он будет несколько полезен, если у вас нет разрешений в корневой и нижней частях дерева каталогов.

    Версия цикла Martins выше, чем моя рекурсивная версия так улучшить до

    Sub MakeAllDir (PathS $)

    Если Dir (PathS) = vbNullString, то

    иначе не беспокойтесь

    Dim LI & amp;, MYPath $, BuildPath $, PathStrArray $()

    PathStrArray = Split (PathS, «»)

    ‘проблема с ловушкой без диска:указан путь

    использовать как ‘MakeAllDir «K:biljoanJohno»

    Диск по умолчанию ‘MakeAllDir «biljoanwat»

    Создать папку и подпапку в Excel VBA

    У меня есть выпадающее меню компаний, которое заполняется списком на другом листе. Три столбца: Компания, Номер задания и Номер детали.

    Когда создается вакансия, мне нужна папка для указанной компании и подпапка для указанного номера детали.

    Если вы пойдете по пути, это будет выглядеть так:

    C:ImagesНазвание компании Part Number

    Если существует либо название компании, либо номер детали, не создавайте и не перезаписывайте старое. Просто перейдите к следующему шагу. Таким образом, если обе папки существуют, ничего не происходит, если одна или обе не существуют, создайте как требуется.

    Другой вопрос, есть ли способ сделать так, чтобы он одинаково работал на Mac и ПК?

    Одна вспомогательная и две функции. Sub строит ваш путь и использует функции, чтобы проверить, существует ли путь и создать, если нет. Если полный путь уже существует, он просто пройдет. Это будет работать на ПК, но вам нужно будет проверить, что нужно изменить для работы на Mac.

    Еще одна простая версия, работающая на ПК:

    Я нашел гораздо лучший способ сделать то же самое, меньше кода, гораздо более эффективным. Обратите внимание, что «» » — это указать путь в случае, если он содержит пробелы в имени папки. Командная строка mkdir создает любую промежуточную папку, если необходимо, чтобы весь путь существовал.

    Здесь есть несколько хороших ответов, поэтому я просто добавлю некоторые улучшения в процессе. Лучший способ определить, существует ли папка (не использует FileSystemObjects, которую не все компьютеры могут использовать):

    Это работает как прелесть в AutoCad VBA, и я схватил его с форума excel. Я не знаю, почему вы все так усложняете?

    ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

    Вопрос: Я не уверен, существует ли определенная директория. Если он не существует, я хотел бы создать его с помощью кода VBA. Как я могу это сделать?

    Ответ. Вы можете проверить, существует ли каталог с помощью кода VBA ниже:

    (Котировки ниже опущены, чтобы избежать путаницы кода программирования)

    Здесь короткий sub без обработки ошибок, который создает подкаталоги:

    Никогда не пробовал с не Windows системами, но вот тот, который у меня есть в моей библиотеке, довольно прост в использовании. Никакой специальной библиотеки не требуется.

    Я знаю, что на это был дан ответ, и уже было много хороших ответов, но для людей, которые приходят сюда и ищут решение, я мог бы опубликовать то, что я решил со временем.

    Следующий код обрабатывает оба пути к диску (например, «C:Users. » ) и к адресу сервера (style: » ServerPath..» ), он принимает путь в качестве аргумента и автоматически удаляет из него любые имена файлов (используйте «» в конце, если это уже путь к каталогу) и возвращает false, если по какой-то причине невозможно создать папку. О да, он также создает суб-под-подкаталоги, если это было запрошено.

    Надеюсь, кто-то найдет это полезным. Наслаждайтесь!: -)

    Это рекурсивная версия, которая работает как с буквенными дисками, так и с UNC. Я использовал перехват ошибок для реализации, но если кто-то может сделать это без, мне было бы интересно увидеть это. Этот подход работает от ветвей до корня, поэтому он будет несколько полезен, если у вас нет разрешений в корневой и нижней частях дерева каталогов.

    Версия цикла Martins выше, чем моя рекурсивная версия так улучшить до

    Sub MakeAllDir (PathS $)

    Если Dir (PathS) = vbNullString, то

    иначе не беспокойтесь

    Dim LI & amp;, MYPath $, BuildPath $, PathStrArray $()

    PathStrArray = Split (PathS, «»)

    ‘проблема с ловушкой без диска:указан путь

    использовать как ‘MakeAllDir «K:biljoanJohno»

    Диск по умолчанию ‘MakeAllDir «biljoanwat»

    Ссылка на основную публикацию
    ВсеИнструменты 220 Вольт
    Adblock
    detector