Разное

Скопировать файл vba: Как получить данные из закрытой книги?

Содержание

Метод CopyFile (Visual Basic для приложений)



  • Чтение занимает 2 мин

В этой статье

Копирует один или несколько файлов из одного расположения в другое.Copies one or more files from one location to another.

СинтаксисSyntax

объект. CopyFile Source, Destination, [ overwrite ]object.CopyFile source, destination, [ overwrite ]

Синтаксис метода CopyFile содержит следующие элементы:The CopyFile method syntax has these parts:

ЧастьPart ОписаниеDescription
objectobject Обязательный.Required. Объект всегда является именем FileSystemObject.The object is always the name of a FileSystemObject.
sourcesource Обязательный.Required. Спецификация файла строки символов, которая может содержать подстановочные знаки (для одного или нескольких копируемых файлов).Character string file specification, which can include wildcard characters, for one or more files to be copied.
destinationdestination Обязательный.Required. Символьное строковое обозначение конечного расположения, в которое необходимо скопировать файл или файлы из элемента source.Character string destination where the file or files from source are to be copied. Использование подстановочных знаков не допускается.Wildcard characters are not allowed.
перезаписатьoverwrite Необязательно.Optional. Логическое значение, которое указывает, требуется ли перезапись существующих файлов.Boolean value that indicates if existing files are to be overwritten. Если установлено значение True, файлы будут перезаписаны; если задано значение False, перезапись не выполняется.If True, files are overwritten; if False, they are not. По умолчанию используется значение True.The default is True. Необходимо учитывать, что функция CopyFile не выполняется, если для элемента destination установлено свойство «только чтение», независимо от значения элемента overwrite.Note that CopyFile will fail if destination has the read-only attribute set, regardless of the value of overwrite.

ПримечанияRemarks

Подстановочные знаки могут использоваться только в последнем компоненте пути аргумента source.Wildcard characters can only be used in the last path component of the source argument. Например, можно использовать:For example, you can use:

FileSystemObject.CopyFile "c:\mydocuments\letters\*.doc", "c:\tempfolder\"

Однако нельзя использовать:But you can’t use:

FileSystemObject.CopyFile "c:\mydocuments\*\R1???97.xls", "c:\tempfolder"

Если источник содержит подстановочные знаки, или Destination оканчивается на разделитель путей (**), предполагается, что параметр Destination содержит существующую папку, в которую копируются файлы.If source contains wildcard characters, or destination ends with a path separator (**), it is assumed that destination is an existing folder in which to copy matching files. В противном случае элемент, destination предположительно является именем создаваемого файла.Otherwise, destination is assumed to be the name of a file to create. В любом случае при копировании отдельного файла могут происходить три вещи:In either case, three things can happen when an individual file is copied:

  • Если элемент destination не существует, выполняется копирование элемента source.If destination does not exist, source gets copied. Это типичный случай.This is the usual case.

  • Если элемент destination представляет собой существующий файл, возникает ошибка, если элементу overwrite присвоено значение False.If destination is an existing file, an error occurs if overwrite is False. В противном случае выполняется попытка копирования элемента source в существующий файл.Otherwise, an attempt is made to copy source over the existing file.

  • Если destination является каталогом, происходит ошибка.If destination is a directory, an error occurs.

Ошибка также возникает в том случае, если элемент source, который использует подстановочные знаки, не соответствует ни одному из файлов.An error also occurs if a source using wildcard characters doesn’t match any files. Выполнение метода CopyFile останавливается при обнаружении первой ошибки.The CopyFile method stops on the first error it encounters. До возникновения ошибки попыток отката или отмены каких-либо изменений не выполняется.No attempt is made to roll back or undo any changes made before an error occurs.

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.



Управление файлами из Excel

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

Все что для этого нужно – это приложение Excel с поддержкой языка программирования VBA (Visual Basic for Application) и надстройка, написанная на этом языке. Для осуществления действий с файлами, в диалоговом окне надстройки необходимо выбрать одну из доступных опций и указать диапазоны ячеек с полными именами файлов. Полным именем файла называется путь к этому файлу вместе с именем файла, включая расширение, например C:\Program Files\7-Zip\7z.exe

надстройка для быстрого копирования, перемещения, переименования и удаления файлов по списку Excel

Создание списка файлов

Чтобы создать список из полных имен файлов, достаточно указать папку, в которой необходимые файлы находятся. При необходимости можно задать глубину вложенности папок. Если глубина не задана, то поиск файлов ведется по всем вложенным папкам. Если из папок нужно выбрать файлы только с определенным расширением, можно использовать поиск файлов по маске, вписав в соответствующее поле нужное расширение, например, «.pdf» (без кавычек).

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

Копирование файлов

При копировании файлов необходимо иметь два списка полных имен, список со старыми именами и список с новыми именами. Старые имена – это текущие полные имена файлов, а новые имена – это имена файлов, но уже в новой папке, либо в новых папках, если папки разные. Например, чтобы скопировать файл «7z.exe» из папки C:\Program Files\7-Zip в папку D:\Program Files\7-Zip необходимо в одном списке указать старое имя C:\Program Files\7-Zip\7z.exe, а в другом – новое имя D:\Program Files\7-Zip\7z.exe. При этом изменяться может не только имя диска, а любая папка или несколько папок. Главное, чтобы все эти папки физически существовали на заданном диске.

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

Перемещение файлов

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

Удаление файлов

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

Видео по работе с надстройкой

Другие материалы по теме:

Как Скопировать Лист Из Одной Книги В Другую В Vba

Я бы сделал это так:

Sub Button1_Click()
Dim source_worksheet As Worksheet
Dim source_workbook As Workbook
Dim target_workbook As Workbook

Set source_workbook = ActiveWorkbook
Set target_workbook = Workbooks.Add()
Set source_worksheet = source_workbook.Sheets("needtocopy")

source_worksheet.Copy Before:=target_workbook.Sheets(1)
End Sub

Этот фрагмент кода немного подробный, но цель состоит в том, чтобы дать вам представление о том, что происходит.

Выбор целевой рабочей книги выполняется в строке Set target_workbook. Здесь вы можете создать новую книгу (например, я делаю это в этом примере) или открыть существующую книгу.

Чтобы открыть существующую книгу, замените строку Set target_workbook следующим образом:

Set target_workbook = Workbooks.Open("target.xls")

В конце вы можете добавить некоторые функции сохранения и закрытия:

target_workbook.Save
target_workbook.Close

Чтобы получить список файлов в папке, вам нужно определить объект с помощью Dir (как описано в этом сообщении: Пропустить файлы в папке с помощью VBA?):

Sub Button1_Click()
Dim source_worksheet As Worksheet
Dim source_workbook As Workbook
Dim target_workbook As Workbook

Set source_workbook = ActiveWorkbook
Set source_worksheet = source_workbook.Sheets("needtocopy")

Dim file As Variant
Dim folder As String
folder = "C:\test\"
file = Dir(folder)
Application.DisplayAlerts = False
While (file <> "")
If InStr(file, "Allocation") <> 0 Then
Set target_workbook = Workbooks.Open(folder & file)
source_worksheet.Copy Before:=target_workbook.Sheets(1)
target_workbook.Save
target_workbook.Close
End If
file = Dir
Wend
Application.DisplayAlerts = True
End Sub

Метод CopyFile (Visual Basic для приложений)

  • 2 минуты на чтение

В этой статье

Копирует один или несколько файлов из одного места в другое.

Синтаксис

объект . CopyFile источник , назначение , [ перезаписать ]

Синтаксис метода CopyFile состоит из следующих частей:

Деталь Описание
объект Обязательно.Объект всегда является именем объекта FileSystemObject .
источник Обязательно. Спецификация файла символьной строки, которая может включать подстановочные знаки, для одного или нескольких копируемых файлов.
пункт назначения Обязательно. Место назначения строки символов, куда должны быть скопированы файл или файлы из источника . Подстановочные знаки не допускаются.
перезаписать Необязательно. Логическое значение , указывающее, должны ли существующие файлы быть перезаписаны. Если True , файлы перезаписываются; если Ложь , то нет. По умолчанию — True . Обратите внимание, что CopyFile завершится ошибкой, если для назначения установлен атрибут только для чтения, независимо от значения перезаписать .

Примечания

Подстановочные знаки могут использоваться только в последнем компоненте пути аргумента источника .Например, вы можете использовать:

  FileSystemObject.CopyFile "c: \ mydocuments \ letter \ *. Doc", "c: \ tempfolder \"

  

Но нельзя использовать:

  FileSystemObject.CopyFile "c: \ mydocuments \ * \ R1 ??? 97.xls", "c: \ tempfolder"

  

Если источник содержит символы подстановки, или назначение заканчивается разделителем пути (****), предполагается, что назначение — это существующая папка, в которую можно скопировать совпадающие файлы. В противном случае предполагается, что назначение , — это имя создаваемого файла.В любом случае при копировании отдельного файла могут произойти три вещи:

  • Если назначения не существует, источник копируется. Это обычный случай.

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

  • Если назначение — это каталог, возникает ошибка.

Ошибка также возникает, если исходный код с использованием подстановочных знаков не соответствует ни одному файлу. Метод CopyFile останавливается при первой обнаруженной ошибке. Попытки откатиться или отменить какие-либо изменения, сделанные до возникновения ошибки, не предпринимаются.

См. Также

Поддержка и отзывы

Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

Функция копирования файлов VBA | Объяснение с примерами синтаксиса

Обзор функции копирования файлов VBA:

Функция VBA FileCopy относится к функциям File and Direcetory. Эта встроенная функция VBA FileCopy копирует файл из исходного каталога в целевой каталог. Если вы используете функцию FileCopy для текущего открытого файла, возвращает ошибку.
Эта функция может использоваться либо в процедуре, либо в функции в окне редактора VBA в Excel.Мы можем использовать эту функцию VBA FileCopy любое количество раз в любом количестве процедур или функций. В следующем разделе мы узнаем, каков синтаксис и параметры функции FileCopy, где мы можем использовать эту функцию FileCopy и примеры в реальном времени в Excel VBA.

Синтаксис функции копирования файла VBA

Синтаксис функции FileCopy в VBA:

 FileCopy (Источник, назначение) 

Параметры или аргументы:

Функция FileCopy имеет два аргумента в Excel VBA.
, где
Источник: Это обязательный строковый параметр. Аргумент источника представляет путь к исходному файлу, который вы хотите скопировать. Он может включать папку, каталог или диск.
Назначение: Это обязательный строковый параметр. Аргумент назначения представляет путь к файлу назначения, в который вы хотите скопировать файл. Он может включать папку, каталог или диск.

Где мы можем применить или использовать функцию VBA FileCopy?

Мы можем использовать эту функцию FileCopy в VBA MS Office 365, MS Excel 2016, MS Excel 2013, 2011, Excel 2010, Excel 2007, Excel 2003, Excel 2016 для Mac, Excel 2011 для Mac, Excel Online, Excel для iPhone, Excel для iPad, Excel для планшетов с Android и Excel для мобильных устройств с Android.

Пример 1: Копирование файла из исходного местоположения в целевое

Вот простой пример функции VBA FileCopy. В приведенном ниже примере файл копируется из указанного исходного местоположения в указанное целевое местоположение. Теперь один и тот же файл-файл доступен в двух разных местах.

'Копировать файл из исходного места в место назначения
Sub VBA_FileCopy_Function_Ex1 ()
    
    Dim sSourceFile как строка
    Dim sDestinationFile As String
    
    sSourceFile = "C: \ VBAF1 \ Функции VBA \ Текстовые функции VBA \ Функции VBAa.xlsm "
    sDestinationFile = "C: \ VBAF1 \ Функции VBA \ Функции VBAa.xlsm"
    
    FileCopy sSourceFile, sDestinationFile

    MsgBox «Файл успешно скопирован.», VbInformation, «Функция VBA FileCopy»

Конец подписки
 

Вывод: Вот снимок экрана первого примера вывода.

Пример 2: Копирование открытого файла из исходного местоположения в целевое

Вот простой пример функции VBA FileCopy.В приведенном ниже примере предпринимается попытка скопировать файл из исходного местоположения в целевое. Но возвращает ошибку. Потому что файл открыт.

'Копировать открытый файл из исходного места в место назначения
Sub VBA_FileCopy_Function_Ex2 ()
    
    Dim sSourceFile как строка
    Dim sDestinationFile As String
    
    sSourceFile = "C: \ VBAF1 \ Функции VBA \ Текстовые функции VBA \ Файл примера функции VBA.xlsm"
    sDestinationFile = "C: \ VBAF1 \ VBA Functions \ Файл примера функции VBA.xlsm "
    
    FileCopy sSourceFile, sDestinationFile
   
Конец подписки
 

Выход: Вот снимок экрана второго примера выходных данных.

Инструкции по использованию макросов

Вот пошаговые инструкции по использованию функции FileCopy в Excel VBA.

  • Откройте книгу Excel.
  • Нажмите Alt + F11, чтобы открыть окно редактора VBA.
  • Перейдите в меню «Вставка» и щелкните модуль из доступных вариантов.
  • Скопируйте указанные выше макросы в редактор VBA.
  • Выберите любую процедуру из приведенных выше кодов и щелкните команду «Выполнить» или используйте сочетание клавиш «F5».
Список функций VBA:

Нажмите ссылку ниже, чтобы вернуться к просмотру всего списка функций VBA.

Функции файлов и каталогов VBA Список функций VBA

MS Access — VBA — скопировать файл

Вам когда-нибудь приходилось делать копию файла? Что ж, есть несколько способов сделать это.

Встроенная копия файла VBA

Я считаю, что использование встроенной функции FileCopy является самым простым и понятным методом. Ниже приведена простая процедура устранения некоторых распространенных ошибок.

 '--------------------------------------------- ------------------------------------------
'Процедура: CopyFile
Автор: Даниэль Пино, CARDA Consultants Inc.
Сайт: http://www.cardaconsultants.com
'Цель: скопировать файл
'Заменяет существующую копию без запроса
'Невозможно скопировать заблокированные файлы (в настоящее время используются)
Авторские права: Ниже приводится версия Attribution-ShareAlike 4.0 Международные
'(CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
'Req'd Refs: не требуется
'
'Входные переменные:
'~~~~~~~~~~~~~~~~
'sSource - Путь / Имя файла для копирования
'sDest - Путь / Имя для копирования файла в
'
' Лист регистраций изменений:
'Дата выпуска (гггг / мм / дд) Описание
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Около
'1 2007-апр-01 Первый выпуск
'------------------------------------------------- --------------------------------------
Открытая функция CopyFile (sSource As String, sDest As String) As Boolean
При ошибке Перейти к CopyFile_Error

    FileCopy sSource, sDest
    CopyFile = True
    Функция выхода

CopyFile_Error:
    Если Err.Number = 0 Тогда
    ElseIf Err.Number = 70 Тогда
        MsgBox "Файл в настоящее время используется, поэтому он заблокирован и не может быть скопирован здесь" & _
               "время. Убедитесь, что этот файл никто не использует, и повторите попытку.", vbOKOnly, _
               «Файл в настоящее время используется»
    ElseIf Err.Number = 53 Тогда
        MsgBox "Исходный файл" & sSource & "'не найден. Пожалуйста, проверьте" & _
               «расположение и имя указанного исходного файла и повторите попытку», vbOKOnly, _
               «Файл в настоящее время используется»
    Еще
        MsgBox "MS Access выдает следующую ошибку" & vbCrLf & vbCrLf & "Номер ошибки:" & _
               Err.Number & vbCrLf & "Источник ошибки: CopyFile" & vbCrLf & _
               «Описание ошибки:» & Err.Description, vbCritical, «Произошла ошибка!»
    Конец, если
    Функция выхода
Конечная функция 

‘—————————————— ———————————————
‘Процедура: CopyFile
Автор: Даниэль Пино, CARDA Consultants Inc.
Сайт: http://www.cardaconsultants.com
‘Цель: скопировать файл
‘Заменяет существующую копию без запроса
‘Невозможно скопировать заблокированные файлы (в настоящее время используются)
Авторские права: Ниже приводится версия Attribution-ShareAlike 4.0 Международные
‘(CC BY-SA 4.0) — https://creativecommons.org/licenses/by-sa/4.0/
‘Req’d Refs: не требуется

‘Входные переменные:
‘~~~~~~~~~~~~~~~~
‘sSource — Путь / Имя файла для копирования
‘sDest — Путь / Имя для копирования файла в

‘ Лист регистраций изменений:
‘Дата выпуска (гггг / мм / дд) Описание
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Около
‘1 2007-апр-01 Первый выпуск
‘————————————————- —————————————
Открытая функция CopyFile (sSource As String, sDest As String) As Boolean
При ошибке Перейти к CopyFile_Error

FileCopy sSource, sDest
CopyFile = True
Функция выхода

CopyFile_Error:
Если Err.Number = 0 Тогда
ElseIf Err.Number = 70 Тогда
MsgBox «Файл в настоящее время используется, поэтому он заблокирован и не может быть скопирован здесь» & _
«время. Убедитесь, что этот файл никто не использует, и повторите попытку.», vbOKOnly, _
«Файл в настоящее время используется»
ElseIf Err.Number = 53 Тогда
MsgBox «Исходный файл» & sSource & «‘не найден. Пожалуйста, проверьте» & _
«расположение и имя указанного исходного файла и повторите попытку», vbOKOnly, _
«Файл в настоящее время используется»
Еще
MsgBox «MS Access выдает следующую ошибку» & vbCrLf & vbCrLf & «Номер ошибки:» & _
Err.Number & vbCrLf & «Источник ошибки: CopyFile» & vbCrLf & _
«Описание ошибки:» & Err.Description, vbCritical, «Произошла ошибка!»
Конец, если
Функция выхода
Конечная функция

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

Копирование файла с помощью FSO

В качестве альтернативы, вот пример копирования файла с помощью FSO.

 '--------------------------------------------- ------------------------------------------
'Процедура: FSO_FileCopy
Автор: Даниэль Пино, CARDA Consultants Inc.Сайт: http://www.cardaconsultants.com
'Цель: скопировать файл
'Заменяет существующую копию без запроса (вы можете изменить
'в вызове метода CopyFile)
Авторские права: Ниже приводится версия Attribution-ShareAlike 4.0 International.
'(CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
'Req'd Refs: используется позднее связывание, поэтому не требуется
Ссылка: FSO - https://msdn.microsoft.com/en-us/library/ms127964(v=vs.110).aspx
'
'Входные переменные:
'~~~~~~~~~~~~~~~~
'sSource - Путь / Имя файла для копирования
'sDest - Путь / Имя для копирования файла в
'
' Применение:
'~~~~~~
'FSO_FileCopy ("C: \ TE.MP \ Tab.le1.txt "," C: \ TE.MP \ Tab.le3.txt ")
'
' Лист регистраций изменений:
'Дата выпуска (гггг / мм / дд) Описание
'*********************************************** *************************************
'1 2018-06-16 Первый выпуск - Справка по блогу
'------------------------------------------------- --------------------------------------
Открытая функция FSO_FileCopy (ByVal sSource As String, _
ByVal sDest As String) As Boolean
При ошибке Перейти к Error_Handler
Dim oFSO как объект

Установите oFSO = CreateObject ("Scripting.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2021 © Все права защищены. Карта сайта