it-roy-ru.com

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

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

Например.

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

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

35
harryg

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

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

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

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

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

См. http://msdn.Microsoft.com/en-us/library/aa711216(v=vs.71).aspx

55
Bathsheba

Этот метод еще проще, если у вас меньше вариантов:

FileCopy source, destination
65
Jon

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

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

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

0
Galanor