Vba excel переименовать папку

Обновлено: 20.11.2024

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

Выполнение этого вручную было бы очень утомительной задачей.

  1. Скопируйте название подсказки в буфер обмена.
  2. Откройте проводник и щелкните правой кнопкой мыши, чтобы создать новую папку.
  3. Вставьте название заголовка подсказки в имя папки.
  4. Добавьте к имени папки префикс «001 —», потому что я хотел, чтобы они были перечислены в проводнике в том же порядке, что и сообщение.
  5. Повторите шаги с 1 по 4 еще сто раз 🙁

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

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

Создание папок из списка

Я установил именованный диапазон на своем листе под названием MakeFolderPath в качестве входных данных для пути к папке. Здесь вы можете указать расположение, в котором хотите создать все свои папки.

Я также создал таблицу из 1 столбца и назвал ее MakeFolderNames. Эта таблица будет содержать имена всех папок, которые я хочу создать.

Создание именованных диапазонов и таблиц для наших входных данных просто позволит нам перемещать их на листе без необходимости обновлять ссылку в VBA.

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

Удаление папки из списка

Удалить все папки в каталоге несложно. Просто выделите их все и нажмите Удалить. Но если у вас большое количество папок и вы хотите удалить только часть из них, их удаление может занять много времени. В этом случае вам нужно будет отдельно выбирать и удалять папки.

Если у вас есть список подмножества папок, мы можем использовать VBA для их удаления аналогично тому, как мы создавали папки из списка.

Именованный диапазон для чтения пути называется DeleteFolderPath, а таблица, содержащая мой список имен папок для удаления, называется DeleteFolderNames.

Это приведет к циклическому просмотру и удалению всех папок в моем списке с помощью команды RmDir. Он пропустит любые ошибки из несуществующих папок или пустых ячеек в списке.

Однако будьте осторожны, вы не сможете отменить это действие. Как только оно исчезло, оно исчезло!

Переименование папок из списка

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

Именованный диапазон для чтения пути называется RenameFolderPath, а таблица, содержащая мой список имен папок и соответствующие им новые имена, называется RenameFolderNames.

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

У меня есть проект VBA, в котором он автоматически создает папку для некоторых определенных категорий данных на основе их заданных имен и идентификаторов (имя папки будет ID_CategoryName). Поэтому, когда я изменяю или обновляю название категории, я также хочу обновить имя папки, чтобы оно представляло новое имя.

Я использую синтаксис оператора Name для переименования папки, как показано ниже:

Проблема: он работает для пустых папок и переименовывает их, однако папки, содержащие файлы, возвращают мне ошибку 75 Path/File Access error

Решение. Я обнаружил, что сама проблема связана с переименованием папок в моих окнах после копирования файлов Microsoft Office (экземпляр Word открывается в диспетчере задач). Однако я выбрал решение @Ashleedawg, так как оно решило бы мою проблему или чью-то еще для оператора «Имя как», а также помогло мне проверить, использует ли кто-то еще папку/файлы или нет (для общих дисков).

Дополнительная информация:

1- Не уверен, что вопрос дублируется, однако все вопросы, которые я нашел относительно переименования папок в VBA (здесь, в stackoverflow), используют другой метод (FileSystemObject). Если бы кто-то знающий мог бы сказать мне разницу в использовании Name As или FileSystemObject

2- Я протестировал следующую строку в ближайшем окне:

Он возвращает мне "1_Category1", доказывая существование каталога

3- Есть ли более эффективный способ переименования папок/файлов?

4- Я провел ручное тестирование с синтаксисом Name в непосредственном окне. Я помещал файл в папку, просто перетаскивая или используя Ctrl + C, и некоторые файлы выдают ошибку, а другие нет. Например, я помещаю файл PDF или Word размером 300 КБ, и всякий раз, когда я запускаю Name ThatFolder As ThatFolder2, возникает ошибка.

5- Когда я открываю диспетчер задач, он говорит, что есть экземпляр Microsoft Word Open, хотя он не отображается в моем интерфейсе Windows. Когда я заканчиваю процесс, я могу переименовать папку. Таким образом, когда я копирую файл, он как бы открывает экземпляр этого приложения, и он остается открытым.

6- В папке нет открытых файлов, однако у меня есть другой код, который запускается непосредственно перед ним и использует объекты в папке. В событии listbox_click, которое обычно выбирается при изменении имени папки.

У меня есть файл Excel, который выполняет множество задач с помощью VBA, а затем создает новую папку с именем "Новый" в определенном каталоге. Затем он сохраняет файл в этой папке.
Это прекрасно работает, но я хотел бы иметь возможность переименовать эту папку в то же имя, что и файл Excel, который находится в определенной ячейке в файле.

Я часто использую VBA, но не в такой степени. Кто-нибудь может мне помочь.

Факты об Excel

Удерживая нажатой клавишу Ctrl, перетащите вкладку Листа 1 вправо. Excel сделает копию листа.

Нори

Известный участник

Джиммккуллох

Новый участник

Спасибо за быстрый ответ. Я не запускаю макрос. Другие QE делают. В настоящее время я захожу в то, что они создали, и вручную меняю его, имя файла меняется каждый раз, когда запускается макрос.

Нори

Известный участник

Кеннет Хобсон

Известный участник

Джиммккуллох

Новый участник

Кеннет, большое спасибо за ответ, но я не понимаю нескольких вещей.
Где я могу сослаться на ячейку в моем листе Excel, чтобы указать имя папки
Например, в электронной таблице «Тест» в ячейке «B6» есть запись «2011010». Я хочу, чтобы это было имя новая папка. Эта запись ячейки загружается из другого макроса, который автоматически присваивает электронной таблице это имя из журнала записей

Мои папки для этого теста устроены следующим образом.
U:\Excel\Test Folder
Моя электронная таблица "2011010" находится в следующем месте:
U:\Excel\Test Folder\New.

Я очень ценю вашу помощь.

Если это невозможно, возможно ли использовать поле ввода пользователя, чтобы ввести новое имя папки, а затем изменить папку на него?

Кеннет Хобсон

Известный участник

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

Когда вы говорите "Проверка электронных таблиц", каково точное имя или что это за файл? Это текущая книга с кодом или U:\Excel\Test Folder\New\Test.xls или? Ячейка B6 находится в каком имени листа?

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

Джиммккуллох

Новый участник

Извините, если я не ясно выразился. Позвольте мне попробовать с фактическим, а не с тестом.
Мое дерево папок выглядит следующим образом:
T:\QE\Current SCARs\New SCAR (SCAR — это забота поставщика)

Когда возникает проблема, инженер открывает и заполняет «Пустой SCAR.xls». Затем он нажимает кнопку макроса, которая открывает «Log.xls», затем берет соответствующие данные из «Пустой SCAR.xls» и передает их в «Log.xls». Затем он получает следующий уникальный номер записи из «Log.xls» и передает его обратно в ячейку «C17» в «Пустой SCAR.xls». Затем макрос создает папку с именем «Новый SCAR» в дереве выше. и сохраняет «Пустой SCAR.xls» как уникальный номер из ячейки «C17»
т.е. Пустой файл SCAR.xls становится 2011001.xls в папке с именем "Новый SCAR"
Я бы хотел, чтобы он сделал следующее:
Пустой файл SCAR.xls становится 2011001.xls в папке с именем "2011001"
2011001 будет увеличиваться на единицу каждый раз, когда инженер отправляет сообщение о проблеме.

Я надеюсь, что это прояснит ситуацию, но, может быть, то, что я пытаюсь сделать, невозможно?

Большое спасибо за любую помощь, которую я могу получить. Я считаю, что заставить Excel делать то, что я хочу, чтобы «сокращать работу».

Джиммккуллох

Новый участник

Чтобы уточнить
Вот мой код для создания новой папки


MkDir "T:\QE\Current SCARs\New Scar"
ChDrive "T:\QE\Current SCARs\New Scar"
ChDir "T:\QE\Current SCARs" \Новый шрам"

Есть ли способ заменить слова "Новый SCAR" диапазоном ячеек в электронной таблице?

Fanatic Member Дата регистрации: ноябрь 2004 г. Местоположение: Великобритания Сообщения 771

Изменить имена папок через excel/vba?

Я надеялся, что кто-нибудь сможет мне помочь, пожалуйста, вопрос довольно прост. Можно ли изменить имена папок через Excel?

В основном у меня есть более 1000 папок в каталоге, и около четверти этих папок начинаются со слова «The», что я хочу сделать, это удалить слово «The», а затем пробел после него. Можно ли это сделать в Excel, если я введу путь?

Обратите внимание, что некоторые папки содержат слово "The" в середине имени папки, и я не хочу их удалять, я хочу удалить слово "The" только из папок, начинающихся с "The"

Пожалуйста, отметьте темы как решенные, как только проблема будет решена.
Я ценю вашу помощь/советы

Супермодератор Дата регистрации: февраль 2005 г. Местонахождение: Мумбаи, Индия Сообщений: 11 998

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

Хорошее упражнение для Сердца — наклониться и помочь другому подняться.
Пожалуйста, отметьте свою тему как "Решено", если вопрос решен

MyGear:
★ ЦП ★ Ryzen 5 5800X
★ ГП ★ NVIDIA GeForce RTX 3080 TI Founder Edition
★ ОЗУ ★ G. Skill Trident Z RGB 32 ГБ 3600 МГц
★ МБ ★ ASUS TUF GAMING X570 (WI-FI) ATX Gaming
★ Хранилище ★ SSD SB-ROCKET-1TB + SEAGATE 2TB Barracuda IHD
★ Охлаждение ★ NOCTUA NH-D15 CHROMAX BLACK 140 мм + 10 шт. Noctua NF-F12 PWM
★ Блок питания ★ ANTEC HCG-1000-EXTREME Полностью модульный блок питания 1000 Вт 80 Plus Gold
★ Корпус ★ LIAN LI PC-O11 DYNAMIC XL ROG (BLACK) (G99 .O11DXL-X)
★ Монитор ★ Игровой монитор LG Ultragear 27 дюймов, 240 Гц
★ Клавиатура ★ Клавиатура TVS Electronics Gold
★ Мышь ★ Logitech G502 Hero

Fanatic Member Дата регистрации: ноябрь 2004 г. Местоположение: Великобритания Сообщения 771

Пожалуйста, отметьте темы как решенные, как только проблема будет решена.
Я ценю вашу помощь/советы

Fanatic Member Дата регистрации: ноябрь 2004 г. Местоположение: Великобритания Сообщения 771

Похоже, это работает, но еще одна вещь, а если бы было более 1 папки, как бы я это сделал?

Мне просто их перечислить? Спасибо

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

Koolsid, есть ли более простой способ сделать это? Чего бы я действительно хотел, так это иметь исходные имена папок от ячейки A1 до A250 и измененные имена папок от B1 до B250 (у меня есть оба списка), или это слишком сложно? кстати, НЕ будет конфликтов с другой папкой, так как ни одна папка не имеет такого же имени.

Пожалуйста, отметьте темы как решенные, как только проблема будет решена.
Я ценю вашу помощь/советы

Супермодератор Дата регистрации: февраль 2005 г. Местонахождение: Мумбаи, Индия Сообщений: 11 998

Koolsid, есть ли более простой способ сделать это? Чего бы я действительно хотел, так это иметь исходные имена папок от ячейки A1 до A250 и измененные имена папок от B1 до B250 (у меня есть оба списка), или это слишком сложно? кстати, НЕ будет конфликтов с другой папкой, так как ни одна папка не имеет такого же имени.

нет, это не сложно.

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

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

Хорошее упражнение для Сердца — наклониться и помочь другому подняться.
Пожалуйста, отметьте свою тему как "Решено", если вопрос решен

MyGear:
★ ЦП ★ Ryzen 5 5800X
★ ГП ★ NVIDIA GeForce RTX 3080 TI Founder Edition
★ ОЗУ ★ G. Skill Trident Z RGB 32 ГБ 3600 МГц
★ МБ ★ ASUS TUF GAMING X570 (WI-FI) ATX Gaming
★ Хранилище ★ SSD SB-ROCKET-1TB + SEAGATE 2TB Barracuda IHD
★ Охлаждение ★ NOCTUA NH-D15 CHROMAX BLACK 140 мм + 10 шт. Noctua NF-F12 PWM
★ Блок питания ★ ANTEC HCG-1000-EXTREME Полностью модульный блок питания 1000 Вт 80 Plus Gold
★ Корпус ★ LIAN LI PC-O11 DYNAMIC XL ROG (BLACK) (G99 .O11DXL-X)
★ Монитор ★ Игровой монитор LG Ultragear 27 дюймов, 240 Гц
★ Клавиатура ★ Клавиатура TVS Electronics Gold
★ Мышь ★ Logitech G502 Hero

Читайте также: