Хитрости »
Основные понятия (22)Здесь собраны статьи, в которых разъясняются базовые понятия работы в Excel и VBA, а так же проблемы, с которыми сталкивается большинство начинающих
Сводные таблицы и анализ данных (5) Раздел поможет изучить сводные таблицы и научиться их использовать "на полную"
Графики и диаграммы (4) Раздел поможет научиться создавать диаграммы и графики в Excel, в том числе нестандартные
Работа с VB проектом (10) С помощью статей раздела вы научитесь создавать процедуры программно и выполнять различные операции с объектами самого VBA
Power BI и Power Query (5) Здесь собраны статьи, раскрывающие различные возможности мощнейшего инструмента для визуализаций бизнесс-процессов Power BI и надстройки для Excel Power Query
Условное форматирование (5) Этот раздел поможет поближе познакомиться с Условным форматированием на примерах различных ситуаций
Списки и диапазоны (5) Статьи, посвященные работе не только с выпадающими списками, но и с диапазонами и хитростями их применения в рабочих файлах
Макросы(VBA процедуры) (59) Статьи раздела направлены на изучение VBA с детальным разбором кодов. Множество статей с примерами кодов под всевозможные ситуации с комментариями и пояснениями
Разное (34) Собраны статьи, которые не подходят ни под одну из представленных выше категорий или входят сразу в несколько. Но эти статье не менее полезные!

Как средствами VBA переименовать/переместить/скопировать файл

В этой статье я хотел бы рассказать как средствами VBA переименовать, переместить или скопировать файл. В принципе методы переименования, перемещения и копирования, так сказать, встроены в VBA. Это значит что можно без вызова сторонних объектов переименовать, переместить или копировать любой файл. Все это делается при помощи всего двух команд: FileCopy и Name [Исходный файл] As [Новый файл]. Притом команда FileCopy выполняет только копирование, а Name [Исходный файл] As [Новый файл] - как переименование, так и перемещение. Разница лишь в том, что при переименовании мы указываем только новое имя файла, а при перемещении - другую директорию(папку), в которую следует переместить файл. И в дополнение я приведу пример удаления файла. Теперь можно рассмотреть несложные примеры использования этих команд:

Копирование:

Перемещение:

Переименование:

Удаление файла:

Вот так. Вроде ничего сложного.


Так же я хотел бы описать как можно проделать те же операции с файлами при помощи объекта FileSystemObject. Строк кода несколько больше и выполняться операции будут медленнее(хотя вряд ли это будет заметно на примере одного файла). Но раз начал разбирать эту тему - решил показать и эти методы. Прежде всего следует, я думаю, пояснить что за зверь такой - FileSystemObject.
FileSystemObject (FSO) - содержится в библиотеке типов Scripting, расположенной в файле библиотеки scrrun.dll. Объектная модель FSO дает возможность создавать, изменять, перемещать и удалять папки и файлы, собирать о них различную информацию: имена, атрибуты, даты создания или изменения и т.д. Чтобы работать с FSO необходимо создать переменную со ссылкой на объект библиотеки. Сделать это можно двумя способами: через ранее связывание и позднее. Я не буду сейчас вдаваться в подробности этих методов - тема довольно обширная и я опишу её в другой статье.
Ранее связывание: для начала необходимо подключить библиотеку Microsoft Scripting Runtime. Делается это в редакторе VBA: References-находите там Microsoft Scripting Runtime и подключаете. Объявлять переменную FSO при раннем связывании следует так:
Плюсы раннего связывания: с помощью Object Browser можно просмотреть список объектов, свойств, методов, событий и констант, включенных в FSO. Но есть значительный минус: если планируется использовать программу на нескольких компьютерах, то есть большая вероятность получить ошибку(читать подробнее).
Позднее связывание: ничего нигде не надо подключать, а просто используем метод CreateObject(именно этот способ используется мной в примерах ниже). Методы таким образом просмотреть не получится, но зато работать будет без проблем на любых компьютерах без дополнительных действий.

Копирование:

Перемещение:

Переименование:

Хочу обратить внимание, что при переименовании файла через FileSystemObject необходимо указать только имя нового файла - путь указывать не надо. Иначе получите ошибку.

Удаление файла:

Вот теперь вроде бы все.


Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Поиск по меткам

Access Multex Outlook Power BI Power Query и Power BI VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Настройка Поиск данных Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны акции MulTEx вебинар ссылки статьи тренинг
Обсуждение: оставлено 9 коммент.
  1. VasYa:

    Добрый день. Подскажите, пожалуйста, что в Dir(sFileName, 16) означает число 16?

  2. 16 означает константу vbDirectory. Чтобы лучше понять советую почитать справку VBA по методу Dir, там все написано подробно.

  3. VasYa:

    Спасибо. Почитаю

  4. Игорь:

    Дмитрий, большое спасибо за статью!
    Насколько я понимаю, данные коды работают только с одним файлом?
    А нельзя переделать код так, чтобы он искал файлы (несколько) в определенной директории по названию(вернее не по полному имени файла а по слову(словам) встречающемуся в названии и затем уже все названные файлы помещал в указанную папку.
    Несколько запутанно изложил мысль...
    Попробую по другому.
    Сейчас для копирования я пользуюсь стандартным поисковиком оффиса, который ищет файлы на общесетевом диске, затем я эти файлы копирую в определенную папку и дальше с ними работаю. Можно ли это сделать средствами VBA?

  5. Игорь, прочитайте статью: Просмотреть все файлы в папке
    Если грамотно объединить ту и эту статьи - получите желаемое.

  6. Игорь:

    Спасибо, Дмитрий! Я видно пропустил данную статью. Попробую объединить оба метода.
    Еще раз спасибо!

  7. Николай:

    Здравствуйте, Дмитрий! У меня подсвечивается строка FileCopy sFileName, sNewFileName
    Может ли это быть связано с тем, что я копирую в папку user, на которой нарисован замок?
    Вот мой путь:
    sNewFileName = "С:\Пользователи\user\OneDrive\День_1.1.xlsm"

  8. Кирилл:

    Здравствуйте, Дмитрий! Подскажите пожалуйста если при копировании файла я меняю путь и имя файла на
    sFileName = Range("a1")
    sNewFileName = Range("b1")
    Возможно ли это применить ко всем строкам (заполненным в таблице) Заранее спасибо.

    • алекс:

      Правильно писать
      sFileName = Range("a1").value
      sNewFileName = Range("b1").value
      но лучше
      r=1
      do
      sFileName = cells(r,1).value
      sNewFileName = cells(r,2).value
      if sFileName="" then
      exit do
      endif
      FileCopy sFileName, sNewFileName
      r=r+1
      loop

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

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Логин
Наши партнеры
Перейти
Перейти
Счетчики
Анализ сайта

Яндекс.Метрика
© 2016 Excel для всех  Войти