Переименовать файл excel макрос
Привет, есть таблица, в 1й столбце - путь к файлу, который нужно переименовать, 2й столбец - новое имя для этого файла. Нужен макрос, который будет присваивать каждому файлу из 1го столбца новое имя из 2го.
Может у кого-то есть что-то похожее?
Еще вопрос по расширению - по умолчанию расширение остается прежним? (мне не нужно его менять)
Макрос для склеивания PDF файлов
Коллеги, есть вопрос: например есть 2 документа в разных приложениях например в визио и экселе.
Макрос для скачивания файлов с сайта
Доброго времени суток помогите с макросом. есть ссылки для скачивания файлов (отчетов). формат.
Макрос для объединения 2 файлов в сводную таблицу
Друзья, не получается макросом создать сводные таблицы. Во вложении есть файл инвойс и файл.
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос
Необходимо изменить ниже приведённый макрос, взятый с форума. Необходима помощь. Буду признателен.
А это уже к Вам вопрос.
Приведите пример значения из 1-го столбца и из 2-го. У таблицы есть подписи (заголовок в роли первой строки) ?
А это уже к Вам вопрос.
Приведите пример значения из 1-го столбца и из 2-го. У таблицы есть подписи (заголовок в роли первой строки) ?
1й столбец: C:\Users\123\Desktop\Abc\Def\Ghi\abc1234567890.pdf
ему соответствует
2й столбец: C:\Users\123\Desktop\Abc\Def\Ghi\1234567890_abc_01.pdf
почти всегда расширения у файлов совпадают, но мне нужно поменять лишь само имя.
Путь к старому и новому файлу одинаков - в данном случае: C:\Users\123\Desktop\Abc\Def\Ghi\
но для разных старых файлов он различается подпапками, всегда в рамках главной папки C:\Users\123\Desktop\Abc\
Заголовка таблицы пока нет, но приписать всегда возможно (1й столбец - file path, 2й столбец - new file name).
У таблицы должны быть подписи к столбцам.
У таблицы должны быть подписи к столбцам.
подскажите, а можно переименовать pdf файл в следующем случае:
есть таблица, в ячейке имя файла, в этой же ячейке гиперссылка на pdf файл, который имеет другое имя (сгенерированное при сканировании). Можно ли макросом переименовать этот pdf файл, присвоив ему имя, содержащееся в ячейке. Имя в ячейке набирается вручную, затем создается гиперссылка на файл, потом переименовывается этот файл.
Спасибо.
Я хотел приложить, а гиперссылка то у Вас не сработает((. Любой файл Excel, допустим в ячейке А1 есть имя "Новый файл". В этой ячейке создана гиперссылка на pdf файл с именем 123. Допустим мы выделяем ячейку А1, нажимаем кнопку и файл 123 переименовывается в файл с именем "Новый файл" (содержимое выделенной ячейки).
Добавлено через 9 часов 21 минуту
Думаю здесь проблема в том, что файл, у которого нужно поменять имя, находится по гиперссылке, на конце которой указано старое имя файла. Если менять имя на новое, то нужно и гиперссылку автоматически поменять, заменив имя файла на конце. Но это как говорится уже не мой уровень, если только кто продвинутый помогет
Данная команда поможет быстро переименовать сразу множество указанных файлов. Можно назначить переименование с нумерацией или на основании списка. Файлы могут быть любого типа - Excel, Word, картинки, текстовые и т.д.
Просматривать файлы:
- только выбранные - после нажатия кнопки ОК появится диалоговое окно, в котором необходимо выбрать файлы для переименования
- все в папке - после нажатия кнопки ОК появится диалоговое окно выбора папки. Выбирается папка, файлы в которой необходимо просмотреть и переименовать
-
включая подпапки - доступно для пункта все в папке. Если установлен, то файлы будут просматриваться не только в указанной папке, но и во всех вложенных в неё папках до самой глубоко вложенной. Если отключен, то файлы будут просматриваться исключительно в указанной папке.
Метод переименования:
- Только нумерация - имена всех выбранных файлов переименовываются в порядковые номера - 1, 2, 3 и т.д.
- Нумерация с префиксом - в поле указывается префикс(на примере это - новый_ ), который будет добавлен перед номером файла. После нажатия ОК и указания файлов, выбранным файлам будут даны имена с указанным префиксом и порядковым номером. В приведенном выше примере файлы будут переименованы в: новый_1 , новый_2 , новый_3 , новый_4 и т.д. Если префикс не указан, то появится предупреждение и поле можно оставить пустым. Однако даже если непосредственно префикс не указан, нижнее подчеркивание все равно будет добавлено перед нумерацией( _1 , _2 , _3 , _4 ).
- Сопоставление - переименовывает файлы по списку. В первом столбце указанного диапазона записывается текущее имя файла, а во втором - новое, которое надо дать файлу после переименования. К примеру на рисунке ниже файл с именем Картинка_1 будет переименован в Цветы , файл Фото в Пейзаж , а Книга1 в Прайс .
рис.2
В ячейках должны быть записаны только имена файлов, без расширения (.jpg, .xls,.docx и т.д.).
Для создания списка файлов для переименования можно воспользоваться командой Путь к файлу(выбрав только имена файлов -без расширения типа файла). Это поможет избежать ошибок неверного написания имени файла.
Если файл из указанного диапазона будет отсутствовать среди выбранных файлов, то он не будет переименован. Однако это не вызовет ошибки выполнения
Переименованные файлы:
- Оставить в исходной папке - будут переименованы исходные файлы. Отменить данную операцию нельзя.
- Переместить в папку - все переименованные файлы будут перемещены в указанную папку.
-
перемещать копии файлов - доступно для пункта Переместить в папку. Если установлен, то переименованы и перемещены будут копии исходных файлов. Исходные файлы при этом остаются без изменений. Если отключен, то переименовываются исходные файлы. Отменить данную операцию нельзя.
Добавлять нумерацию к файлам с одинаковым именем - если в качестве метода переименования выбрано Сопоставление, то есть вероятность, что имена файлов будут повторяться, если при этом так же выбран просмотр всех файлов в папке и подпапках. Для файлов разного типа это не критично, а для файлов одного типа это недопустимо. Например, в одной папке могут находится два файла " Первый квартал.xls " и " Первый квартал.pdf " , однако не может быть два файла " Первый.xls " . Если установлен пункт Добавлять нумерацию к файлам с одинаковым именем, то будет создано два файла: "Первый квартал.xls" и "Первый квартал(1).xls" (если одинаковых имен больше - нумерация продолжается). Если пункт Добавлять нумерацию к файлам с одинаковым именем снят, то файлы с совпадающими именами не переименовываются и весь их список можно будет просмотреть в конце обработки.
В этой статье я хотел бы рассказать как средствами VBA переименовать, переместить или скопировать файл. В принципе методы переименования, перемещения и копирования, так сказать, встроены в VBA. Это значит что можно без вызова сторонних объектов переименовать, переместить или копировать любой файл. Все это делается при помощи всего двух команд: FileCopy и Name [Исходный файл] As [Новый файл] . Притом команда FileCopy выполняет только копирование, а Name [Исходный файл] As [Новый файл] - как переименование, так и перемещение. Разница лишь в том, что при переименовании мы указываем только новое имя файла, а при перемещении - другую директорию(папку), в которую следует переместить файл. Плюс рассмотрим пример удаления файла.
Так же разберем методы копирования, перемещения, переименования и удаления файлов и папок через библиотеку FileSystemObject (FSO).
Работа с файлами встроенными командами VBA
Работа с файлами через объект FileSystemObject (FSO)
Работа с папками через объект FileSystemObject (FSO)
Во всех примерах работы с файлами встроенными функциями будет присутствовать проверка на наличие файла по указанному пути. Делать это будем при помощи встроенной функции Dir([PathName],[Attributes]) .
PathName - указывается полный путь к файлу
Attributes - указывается признак свойств файла. Вообще их несколько(скрытый, архивный и т.п.), но нас для наших задач будет интересовать пока только один: 16(vbDirectory). Он отвечает за проверку папок и файлов без специальных свойств(т.е. не архивные, не скрытые и т.д.). Хотя по сути его можно вообще не указывать, и тогда будет по умолчанию применен атрибут 0(vbNormal) - проверка файлов без определенных свойств. Ни в том ни в другом случае ошибкой это не будет.
Sub Copy_File() Dim sFileName As String, sNewFileName As String sFileName = "C:\WWW.xls" 'имя файла для копирования sNewFileName = "D:\WWW.xls" 'имя копируемого файла. Директория(в данном случае диск D) должна существовать If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If FileCopy sFileName, sNewFileName 'копируем файл MsgBox "Файл скопирован", vbInformation, "www.excel-vba.ru" End Sub
Sub Move_File() Dim sFileName As String, sNewFileName As String sFileName = "C:\WWW.xls" 'имя исходного файла sNewFileName = "D:\WWW.xls" 'имя файла для перемещения. Директория(в данном случае диск D) должна существовать If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If Name sFileName As sNewFileName 'перемещаем файл MsgBox "Файл перемещен", vbInformation, "www.excel-vba.ru" End Sub
Sub Rename_File() Dim sFileName As String, sNewFileName As String sFileName = "C:\WWW.xls" 'имя исходного файла sNewFileName = "C:\WWW1.xls" 'имя файла для переименования If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If Name sFileName As sNewFileName 'переименовываем файл MsgBox "Файл переименован", vbInformation, "www.excel-vba.ru" End Sub
Sub Delete_File() Dim sFileName As String sFileName = "C:\WWW.xls" 'имя файла для удаления If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If Kill sFileName 'удаляем файл MsgBox "Файл удален", vbInformation, "www.excel-vba.ru" End Sub
Как видно ничего сложного.
Так же можно проделать те же операции с файлами при помощи объекта FileSystemObject. Строк кода несколько больше и выполняться операции будут медленнее(хотя вряд ли это будет заметно на примере одного файла). Однако есть существенный плюс - при помощи FileSystemObject можно корректно производить операции с файлами и папками на сетевом диске. Хотя та же Dir(sFileName, 16) часто выдает ошибку при работе с сетевыми дисками.
Прежде всего следует, я думаю, пояснить что за зверь такой - FileSystemObject.
FileSystemObject (FSO) - содержится в библиотеке типов Scripting, расположенной в файле библиотеки scrrun.dll. Объектная модель FSO дает возможность создавать, изменять, перемещать и удалять папки и файлы, собирать о них различную информацию: имена, атрибуты, даты создания или изменения и т.д. Чтобы работать с FSO необходимо создать переменную со ссылкой на объект библиотеки. Сделать это можно двумя способами: через ранее связывание и позднее. Я не буду сейчас вдаваться в подробности этих методов - тема довольно обширная и я опишу её в другой статье.
Ранее связывание: для начала необходимо подключить библиотеку Microsoft Scripting Runtime. Делается это в редакторе VBA: References-находите там Microsoft Scripting Runtime и подключаете. Объявлять переменную FSO при раннем связывании следует так:
Dim objFSO As New FileSystemObject
Плюсы раннего связывания: с помощью Object Browser можно просмотреть список объектов, свойств, методов, событий и констант, включенных в FSO. Но есть значительный минус: если планируется использовать программу на нескольких компьютерах, то есть большая вероятность получить ошибку(читать подробнее).
Позднее связывание: ничего нигде не надо подключать, а просто используем метод CreateObject(именно этот способ используется мной в примерах ниже). Методы таким образом просмотреть не получится, но зато работать будет без проблем на любых компьютерах без дополнительных действий.
Sub Copy_File() Dim objFSO As Object, objFile As Object Dim sFileName As String, sNewFileName As String sFileName = "C:\WWW.xls" 'имя исходного файла sNewFileName = "D:\WWW.xls" 'имя файла для переименования 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие файла по указанному пути If objFSO.FileExists(sFileName) = False Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If 'копируем файл Set objFile = objFSO.GetFile(sFileName) objFile.Copy sNewFileName MsgBox "Файл скопирован", vbInformation, "www.excel-vba.ru" End Sub
Sub Move_File() Dim objFSO As Object, objFile As Object Dim sFileName As String, sNewFileName As String sFileName = "C:\WWW.xls" 'имя исходного файла sNewFileName = "D:\WWW.xls" 'имя файла для переименования 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие файла по указанному пути If objFSO.FileExists(sFileName) = False Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If 'перемещаем файл Set objFile = objFSO.GetFile(sFileName) objFile.Move sNewFileName MsgBox "Файл перемещен", vbInformation, "www.excel-vba.ru" End Sub
Sub Rename_File() Dim objFSO As Object, objFile As Object Dim sFileName As String, sNewFileName As String sFileName = "C:\WWW.xls" 'имя исходного файла sNewFileName = "WWW1.xls" 'имя файла для переименования 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие файла по указанному пути If objFSO.FileExists(sFileName) = False Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If 'переименовываем файл Set objFile = objFSO.GetFile(sFileName) objFile.Name = sNewFileName MsgBox "Файл переименован", vbInformation, "www.excel-vba.ru" End Sub
Хочу обратить внимание, что при переименовании файла через FileSystemObject необходимо указать только имя нового файла - путь указывать не надо. Иначе получите ошибку.
Sub Delete_File() Dim objFSO As Object, objFile As Object Dim sFileName As String sFileName = "C:\WWW.xls" 'имя файла для удаления 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие файла по указанному пути If objFSO.FileExists(sFileName) = False Then MsgBox "Нет такого файла", vbCritical, "www.excel-vba.ru" Exit Sub End If 'удаляем файл Set objFile = objFSO.GetFile(sFileName) objFile.Delete MsgBox "Файл удален", vbInformation, "www.excel-vba.ru" End Sub
Точно так же можно перемещать, копировать и удалять целые папки:
Sub Copy_Folder() Dim objFSO As Object Dim sFolderName As String, sNewFolderName As String sFolderName = "C:\test" 'имя исходной папки sNewFolderName = "D:\tmp\" 'имя папки, в которую копируем(нужен слеш на конце) 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие папки по указанному пути If objFSO.FolderExists(sFolderName) = False Then MsgBox "Нет такой папки", vbCritical, "www.excel-vba.ru" Exit Sub End If 'копируем папку objFSO.CopyFolder sFolderName, sNewFolderName MsgBox "Папка скопирована", vbInformation, "www.excel-vba.ru" End Sub
Sub Move_Folder() Dim objFSO As Object Dim sFolderName As String, sNewFolderName As String sFolderName = "C:\test" 'имя исходной папки sNewFolderName = "C:\tmp\test\" 'имя папки, в которую перемещаем(нужен слеш на конце) 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие папки по указанному пути If objFSO.FolderExists(sFolderName) = False Then MsgBox "Нет такой папки", vbCritical, "www.excel-vba.ru" Exit Sub End If 'перемещаем папку objFSO.MoveFolder sFolderName, sNewFolderName MsgBox "Папка перемещена", vbInformation, "www.excel-vba.ru" End Sub
Sub Rename_Folder() Dim objFSO As Object, objFolder As Object Dim sFolderName As String, sNewFolderName As String sFolderName = "C:\test\" 'имя исходной папки 'имя папки для переименования(только имя, без полного пути) sNewFolderName = "new folder name" 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие папки по указанному пути If objFSO.FolderExists(sFolderName) = False Then MsgBox "Нет такой папки", vbCritical, "www.excel-vba.ru" Exit Sub End If 'переименовываем папку 'получаем доступ к объекту Folder(папка) Set objFolder = objFSO.GetFolder(sFolderName) 'назначаем новое имя objFolder.Name = sNewFolderName MsgBox "Папка переименована", vbInformation, "www.excel-vba.ru" End Sub
Sub Delete_Folder() Dim objFSO As Object, objFolder As Object Dim sFolderName As String sFolderName = "C:\test\" 'имя папки для удаления 'создаем объект FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'проверяем наличие папки по указанному пути If objFSO.FolderExists(sFolderName) = False Then MsgBox "Нет такой папки", vbCritical, "www.excel-vba.ru" Exit Sub End If 'удаляем папку objFSO.DeleteFolder sFolderName MsgBox "Папка удалена", vbInformation, "www.excel-vba.ru" End Sub
FSO, конечно, способен на большее - но цель данной статьи была показать основные операции с папками и файлами как стандартными методами, так и более продвинутыми.
Переименовать файлы в папках
Добрый день! Дано: папка foto, в ней неограниченное число папок с названиями по принципу "052-01".
Переименовать, переместить файлы в папках
Здравствуйте, прошу помощи в решении проблемы. Исходные данные: папка с фотографиями, в ней.
Переименовать рекурсивно файлы в папках
Добрый день очень нужна помощь. Есть основная папка в которой множество других папок. а этих.
Переименовать файлы в папках по имени папки
Здравствуйте. Нужна помощь. Есть много папок , в каждой папке лежит картинка (.
Как можно здесь переименовать, имея список с именами и адресами и новый в который необходимо переименовать?
Strashnoslav, составить массив исходных имен, либо записать их , например, в первый столбец листа, во второй соответствующие новые имена. а потом цикл по этим ячейкам. На основе того, что вы прочитали это можно записать так
скопировать исходные имена файлов с со своими каталогами, в другой каталог при этом создать исходные каталоги где находились файлы.
Добавьте перед копированием строку
MakeSureDirectoryPathExists sNewFileName
(может быть будет мешать имя файла, тогда его нужно отрезать, я не проверял и не помню)
а в модуль
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
MkDir насколько помню создаёт не дерево, а только один каталог. MakeSureDirectoryPathExists создаёт сразу дерево. Кстати если вдруг в именах нужна диакритика - тоже есть решение, используйте SHCreateDirectoryExW
Добавлено через 6 минут
По идее мне нужен макрос который создаст дерево каталогов, а затем уже не трудно туда закинуть файлы
а в модуль
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
- почему остановились на третьей строке? Или второй? Или четвёртой?
Добавлено через 1 минуту
Да, это для Экселя х32
Добавлено через 1 минуту
Проверил - имя файла не мешает.
Добавлено через 12 минут
пример ссылки на файл, который нужно копировать. Записать в ячейку А1 такую, например, строку d:\Papka1\Papka2\имя файла с расширением. В ячейку листа А2 и т.д. аналогично. Вы ведь так и хотели.
Данная команда позволяет массово переименовывать файлы в любой папке Вашего ПК непосредственно из MS Excel.
Чтобы воспользоваться данной командой создайте в своей рабочей книге MS Excel список файлов, которые вы хотите переименовать (так это можно сделать быстро):
Пропишите рядом со "старыми" именами файлов - "новые" имена (так можно быстро добавить год к названию файлов):
Затем выделите диапазон ячеек со старыми и новыми названиями файлов, перейдите во вкладку "ЁXCEL" Главного меню, нажмите кнопку "Файлы" и выберите команду "Переименовать файлы":
В открывшемся диалоговом окне укажите папку, в которой расположены файлы для переименования и нажмите :
Отмена этой операции не предусмотрена, но вы легко можете вернуть "старые" названия файлов. Для этого поменяйте столбцы с "новыми" и "старыми" названиями файлов местами (так это можно сделать быстро):
И повторите операцию по переименованию. "Старые" названия файлов будут возвращены.
Читайте также: