VBA для копирования файла из одного каталога в другой

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

E.g.

   fileName = "X:\Database\oldName.accdb"
   copyDestination = "Y:\dbstore\"
   newName = "newName.accdb"

Есть ли простой способ сделать это?


person harryg    schedule 05.06.2013    source источник
comment
Под регулярно вы подразумеваете раз в x минут?   -  person will    schedule 05.06.2013
comment
Нет, я имею в виду несколько раз в день   -  person harryg    schedule 05.06.2013


Ответы (3)


Используйте соответствующие методы в Scripting.FileSystemObject. Тогда ваш код будет более переносим на VBScript и VB.net. Чтобы начать работу, вам необходимо включить:

Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")

Тогда вы могли бы использовать

Call fso.CopyFile(source, destination[, overwrite] )

где источник и место назначения — это полные имена (включая пути) файла.

См. https://docs.microsoft.com/en-us/office/vba/Language/Reference/user-interface-help/copyfile-method

person Bathsheba    schedule 05.06.2013
comment
По сравнению с другим, простым решением с FileCopy, это решение, по-видимому, имеет то преимущество, что исходный файл также можно копировать, когда он открыт (например, с помощью MS Access), то есть когда он доступен только для чтения. - person Jörg Brenninkmeyer; 01.12.2017
comment
Пишет "Синтаксическая ошибка" при использовании fso.CopyFile ........ @Bathsheba - person paran; 21.05.2020

Этот метод еще проще, если вы согласны с меньшим количеством опций:

FileCopy source, destination
person Jon    schedule 05.03.2014
comment
Я проверял, и действительно, этот метод перезаписывает автоматически. - person André Chalella; 11.07.2015
comment
Красиво и просто, однако, когда я использую это решение и копируемая база данных Access открывается, я получаю сообщение об ошибке «Отказано в доступе». Этого не происходит при использовании FileSystemObject. - person Jörg Brenninkmeyer; 01.12.2017

Одна вещь, которая вызвала у меня сильную головную боль при использовании этого кода (может повлиять на других, и я бы хотел, чтобы кто-нибудь оставил здесь комментарий, подобный этому, чтобы я мог его прочитать):

  • Моя цель — создать панель мониторинга с динамическим доступом, которая требует обновления связанных таблиц.
  • Я использую методы копирования, описанные выше, чтобы заменить существующие связанные файлы CSV их обновленной версией.
  • Запуск вышеуказанного кода вручную из модуля работал нормально.
  • Запуск идентичного кода из формы, связанной с данными CSV, имел ошибку времени выполнения 70 (отказано в доступе), хотя первым шагом моего кода было закрытие этой формы (что должно было разблокировать файл CSV, чтобы его можно было перезаписать).
  • Теперь я считаю, что, несмотря на то, что форма закрыта, она сохраняет устаревший CSV-файл заблокированным, пока выполняет VBA, связанный с этой формой.

Мое решение будет состоять в том, чтобы запустить код (событие по таймеру) из другой скрытой формы, которая открывается вместе с базой данных.

person Galanor    schedule 23.12.2018