Копирование и перемещение файлов в VBA Excel с помощью методов CopyFile и MoveFile объекта FileSystemObject. Синтаксис, параметры, примеры.
Копирование файлов
Метод CopyFile
CopyFile – это метод объекта FileSystemObject, который копирует один или несколько файлов из одного расположения в другое.
Синтаксис
object.CopyFile source, destination, [overwrite] |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. Обязательный параметр. |
source | Строковое выражение, задающее полное имя файла, который требуется скопировать в другое расположение. Для копирования нескольких файлов используются подстановочные знаки. Обязательный параметр. |
destination | Строковое выражение, задающее конечное расположение, куда требуется скопировать файл (файлы) из элемента source. Подстановочные знаки не допускаются. Обязательный параметр. |
overwrite | Логическое значение, которое указывает, требуется ли перезаписывать существующие файлы в конечном расположении. True – файлы будут перезаписаны, False – перезапись не выполняется. Необязательный параметр, по умолчанию – True. |
Если копируемый файл с полным именем source
не существует, будет сгенерирована ошибка.
При копировании одного файла методом CopyFile допустимо в параметре destination
указать другое собственное имя файла, тогда скопированный файл будет сохранен под новым именем. В том числе, можно изменить и расширение файла.
Примеры
Пример 1
Копирование одного файла в другое расположение с проверкой его существования:
Sub Primer1() Dim fso As Object ‘Присваиваем переменной fso ссылку ‘на новый экземпляр FileSystemObject Set fso = CreateObject(«Scripting.FileSystemObject») ‘Проверяем существование копируемого файла If Dir(«C:Папка 1test1.txt») <> «» Then ‘Если файл существует, копируем его в другую папку fso.CopyFile «C:Папка 1test1.txt», «C:Папка 2« End If End Sub |
Пример 2
Наглядный, но неправильный пример по копированию одного файла в другую папку со сменой собственного имени, включая расширение:
Sub Primer2() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») If Dir(«C:Папка 1test1.txt») <> «» Then ‘Копируем файл в другую папку со сменой имени, включая расширение fso.CopyFile «C:Папка 1test1.txt», «C:Папка 2test2.xlsx» End If End Sub |
Пример назван неправильным, так как у скопированного файла меняется только расширение с .txt
на .xlsx
без конвертации в другой формат. На самом деле файл так и остается текстовым, и открыть его программой Excel невозможно.
Перемещение файлов
Метод MoveFile
MoveFile – это метод объекта FileSystemObject, который перемещает один или несколько файлов из одного расположения в другое.
Синтаксис
object.MoveFile source, destination |
Параметры
Параметр | Описание |
---|---|
object | Переменная, возвращающая объект FileSystemObject. Обязательный параметр. |
source | Строковое выражение, задающее полное имя файла, который требуется переместить в другое расположение. Для перемещения нескольких файлов используются подстановочные знаки. Обязательный параметр. |
destination | Строковое выражение, задающее конечное расположение, куда требуется переместить файл (файлы) из элемента source . Подстановочные знаки не допускаются. Обязательный параметр. |
Если перемещаемый файл с полным именем source
не существует, будет сгенерирована ошибка. Ошибка произойдет и в том случае, если одноименный файл в расположении destination
уже имеется.
Примеры
Пример 3
Перемещение одного файла без проверки его существования:
Sub Primer3() Dim fso As Object ‘Присваиваем переменной fso ссылку ‘на новый экземпляр FileSystemObject Set fso = CreateObject(«Scripting.FileSystemObject») ‘Завершаем программу, если произойдет ошибка On Error Resume Next ‘Перемещаем файл в другую папку fso.MoveFile «C:Папка 1Документ 1.docx», «C:Папка 2« End Sub |
Обработчик ошибок On Error Resume Next необходим для того, чтобы корректно завершить программу, если перемещаемый файл не существует, или он уже есть в папке назначения, в результате чего будет сгенерирована ошибка.
Пример 4
Перемещение нескольких файлов из одного расположения в другое:
Sub Primer4() Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») On Error Resume Next ‘Перемещаем файлы в другую папку fso.MoveFile «C:Папка 1Документ*», «C:Папка 2« End Sub |
В результате работы этого кода VBA Excel в новое расположение будут перемещены все файлы начинающиеся с подстроки «Документ».
Знаки подстановки
- Звездочка (*) – заменяет любое количество символов или ни одного.
- Вопросительный знак (?) – заменяет один символ или ни одного.
Знаки подстановки позволяют создать шаблон, по которому можно скопировать или переместить сразу несколько файлов.
Примеры
Примеры шаблонов с подстановочными знаками:
Все файлы Word, включая файлы с расширениями .doc и .dot:
"C:Папка 1*.do??"
Файлы Word, кроме файлов с расширениями .dot, .dotx и .dotm:
"C:Папка 1*.doc?"
Все файлы с подстрокой «01.2020» в собственном имени:
"C:Папка 1*01.2020*"
Хитрости »
15 Август 2012 129904 просмотров
В этой статье я хотел бы рассказать как средствами 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:tmptest" 'имя папки, в которую перемещаем(нужен слеш на конце) 'создаем объект 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, конечно, способен на большее — но цель данной статьи была показать основные операции с папками и файлами как стандартными методами, так и более продвинутыми.
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate 'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste 'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
- Excel VBA FileCopy
Excel VBA FileCopy
Есть много способов скопировать или переместить файл из одной папки в другую. Мы можем сделать это вручную, скопировав и вырезав значок файла и вставив его в папку назначения. Но когда дело доходит до автоматизации этого процесса копирования файла, мы можем сделать это и в VBA. Чтобы скопировать файл, у нас есть функция, доступная в VBA, которая называется «Копирование файла».
Синтаксис FileCopy в Excel VBA
Применить File Copy в VBA очень легко. Синтаксис File Copy выглядит так, как показано ниже.
File Copy имеет только два компонента для подачи. Которые:
- Источник — Здесь мы разместим исходное местоположение, откуда нам нужно скопировать файл.
- Назначение — и это будет папка назначения, в которую мы будем вставлять скопированный файл.
Полный синтаксис будет в типе String. Потому что мы будем использовать путь к файлу, который будет в виде текста.
Как скопировать файл в Excel VBA?
Теперь давайте попробуем с некоторыми примерами копирования файлов VBA в Excel.
Вы можете скачать этот VBA Скопировать файл Excel шаблон здесь — VBA Скопировать файл Excel шаблон
Пример № 1 — FileCopy в VBA
В первом примере мы увидим, как скопировать файл из исходного местоположения и вставить его в место назначения очень простым способом.
Для этого нам понадобится файл любого вида или расширения. Здесь мы рассматриваем файл Excel с расширением xlsx . Как мы видим, мы поместили этот файл Excel в папку, которая легко доступна и называется Test .
Теперь мы скопируем этот файл с помощью FileCopy в указанную ниже папку назначения.
Шаг 1: Для этого перейдите в VBA и откройте раскрывающийся список «Модуль из вставки», как показано ниже.
Шаг 2: Теперь в открытом модуле напишите подкатегорию VBA FileCopy или любое другое имя по вашему выбору.
Код:
Sub VBA_Copy1 () End Sub
Шаг 3: Теперь откройте функцию FileCopy, как показано ниже.
Код:
Sub VBA_Copy1 () FileCopy (End Sub
Шаг 4: Теперь в кавычках напишите адрес местоположения источника, а затем имя и расширение файла, как показано ниже.
Код:
Sub VBA_Copy1 () FileCopy "D: Test1 Hello.xlsx", End Sub
Шаг 5: В качестве места назначения снова поместите путь в кавычки, затем файл и расширение.
Код:
Sub VBA_Copy1 () FileCopy "D: Test1 Hello.xlsx", "D: VPB File April Files Hello.xlsx" End Sub
Шаг 6: Теперь скомпилируйте код и запустите его, нажав на кнопку Play, которая находится под строкой меню. Мы увидим, что файл Excel с именем Test теперь копируется из исходного местоположения в местоположение назначения, как показано ниже. Поскольку в файле ничего не было, размер файла равен 0 КБ .
Пример №2 — FileCopy в VBA
В другом примере мы увидим, как скопировать файл из исходного местоположения в место назначения, определив переменную. Этот процесс немного длительный, но более надежный, так как мы будем фиксировать параметры и переменные.
Шаг 1: Теперь сначала откройте новый модуль и напишите подкатегорию VBA File Copy, как показано ниже.
Код:
Sub VBA_Copy2 () End Sub
Шаг 2: Сначала определите переменную, в которую мы будем помещать исходное местоположение файла того же файла Excel, который мы использовали в примере-1 в качестве String.
Код:
Sub VBA_Copy2 () Dim FirstLocation As String End Sub
Шаг 3: Аналогичным образом, нам понадобится еще одна переменная для места назначения.
Код:
Sub VBA_Copy2 () Dim FirstLocation As String Dim SecondLocation As String End Sub
Шаг 4: Теперь поместите местоположение в первую определенную переменную, которая является « FirstLocation » вместе с именем файла и его расширением.
Код:
Sub VBA_Copy2 () Dim FirstLocation в виде строки Dim SecondLocation в виде строки FirstLocation = "D: Test1 Hello.xlsx" End Sub
Шаг 5: Аналогичным образом сделайте то же самое для местоположения пункта назначения, используя переменную « SecondLocation», которую мы определили выше.
Код:
Sub VBA_Copy2 () Dim FirstLocation в виде строки Dim SecondLocation в виде строки FirstLocation = "D: Test1 Hello.xlsx" SecondLocation = "D: VPB File April Files Hello.xlsx" End Sub
Шаг 6: Теперь пришло время использовать функцию FileCopy .
Код:
Sub VBA_Copy2 () Dim FirstLocation в виде строки Dim SecondLocation в виде строки FirstLocation = "D: Test1 Hello.xlsx" SecondLocation = "D: VPB File April Files Hello.xlsx" FileCopy End Sub
В соответствии с синтаксисом FileCopy, во-первых, мы должны указать местоположение источника, где мы сохранили файл. Но, как мы уже определили выше, исходные и целевые папки для обеих переменных.
Шаг 7: Итак, здесь мы можем напрямую выбрать эти переменные. Сначала выберите переменную местоположения источника, которая является FirstLocation .
Код:
Sub VBA_Copy2 () Dim FirstLocation в виде строки Dim SecondLocation в виде строки FirstLocation = "D: Test1 Hello.xlsx" SecondLocation = "D: VPB File April Files Hello.xlsx" FileCopy FirstLocation End Sub
Шаг 8: Снова аналогичным образом выберите переменную места назначения, которая является SecondLocation, как показано ниже.
Код:
Sub VBA_Copy2 () Dim FirstLocation в виде строки Dim SecondLocation в виде строки FirstLocation = "D: Test1 Hello.xlsx" SecondLocation = "D: VPB File April Files Hello.xlsx" FileCopy FirstLocation, SecondLocation End Sub
Шаг 9: После этого мы скомпилируем код, нажав функциональную клавишу F8. И если ошибки не найдены, запустите код. Мы увидим, что файл из исходного местоположения копируется и вставляется в папку назначения, как показано ниже.
Мы можем попробовать другой путь. Для теста давайте рассмотрим другое местоположение источника, где у нас будет файл слова.
Как мы видим, в файле нет данных, поэтому размер снова отображается как 0 КБ.
И целевой папкой будет папка «Расположение вывода», которая находится в папке «Расположение ввода». Если мы видим внутри файла, нет доступных данных.
Теперь мы заменим источник и назначение в переменных FirstLocation и Second Location соответственно, за которыми следуют имя файла и его расширение.
Код:
Sub VBA_Copy2 () Dim FirstLocation в виде строки Dim SecondLocation в виде строки FirstLocation = "D: VPB File April Files New Excel Test Case.docx" SecondLocation = "D: VPB File April Files Final location Test Case. docx "FileCopy FirstLocation, SecondLocation End Sub
Теперь запустите код.
Мы увидим, что файл Test word теперь копируется из папки Input Location в папку Output location с тем же размером, который равен 0 КБ.
Плюсы FileCopy в VBA
- Может использоваться для копирования более 1 файла за один снимок.
- Для 10 файлов требуется примерно столько же времени, сколько для копирования одного файла.
- Мы можем использовать любой тип файла расширения, который мы хотим скопировать.
То, что нужно запомнить
- Всегда ставьте имя файла и его расширение в конце имени местоположения.
- Заключите в кавычки ссылки места назначения и источника.
- После этого сохраните код в макросе, чтобы Excel смог использовать и сохранить код для будущих целей.
- Всегда предоставляйте разрешение на код, чтобы он мог скопировать файл из исходного расположения и вставить его в место назначения.
Рекомендуемые статьи
Это руководство по FileCopy в VBA. Здесь мы обсуждаем, как скопировать файл Excel с использованием кода VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —
- Работа с VBA Active Cell
- Удаление строки в VBA
- Как использовать Excel VBA Transpose?
- Как исправить ошибку 1004 с помощью VBA
Kassia 4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
||||
1 |
||||
10.02.2015, 15:58. Показов 24315. Ответов 23 Метки нет (Все метки)
Добрый день! Знаю тут много тем про копирование данных. Но я так и не нашла по теме. Вобщем мне надо из разных файлов собрть ин6формацию в один.
Вобщем каждый раз открываю и закрываю файл чтобы вытащить значение одной ячейки. Вот как сделать чтобы сразу вытаскивать эти все знаения и вставлять их в нужные ячейки. И вот интересно как сделать чтобы допустим из нужного файла по одному столбцу найти значение допустим а = 3407 и если нашлось то выбераем значение из столбца рядом напротив которого эта цифра и вставляем ее в общий файл в нужную ячейку. надеюсь понятно объяснила)
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
10.02.2015, 16:50 |
2 |
|||
Вобщем каждый раз открываю и закрываю файл чтобы вытащить значение одной ячейки Интересно, а когда Вы вручную копируете ячейки из одного файла в другой, Вы тоже каждый раз файл закрываете? Ну хотя бы так:
1 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
10.02.2015, 17:39 |
3 |
|||
Если нужны только данные без попугаев/форматов, то думаю сработает так:
1 |
4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
|
10.02.2015, 19:03 [ТС] |
4 |
Нет так я не могу D3:F3 вставить потому что там значения вставлять нужно через одну ячейку. Но спасибо за поомщь) код продукта (столбец С) количество (столбец В) вот как мне так записать : найди код такой то и вытащи значение из столбца В и вставь это значение в общий файл в нужную ячейку. if kod = 3408 then … ?
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
10.02.2015, 20:21 |
5 |
Я обычно сперва загоняю все эти пары в словарь (код-значение или код-позиция_в_массиве_или_на_листе), затем просто извлекаю нужное из словаря, без всяких долгих поисков.
0 |
chumich 2079 / 1232 / 464 Регистрация: 20.12.2014 Сообщений: 3,237 |
||||
10.02.2015, 20:42 |
6 |
|||
вот как мне так записать : найди код такой то и вытащи значение из столбца В и вставь это значение в
0 |
4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
|
11.02.2015, 16:36 [ТС] |
7 |
Вот прикрепляю два файла. Из файла Омская нужно вытащить значения в файл 1. Я думала по коду как то искать потому что ячейки могут меняться при загрузке обновленных файлов. так вот как записать: ищу по коду значение и беру значение напротив этого и вставляю в общий файл. в нужную ячейку.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.02.2015, 17:35 |
8 |
Поясните каким образом «ячейки могут меняться» — потому что есть несколько вариантов действий, но думаю проще всего использовать ВПР() (можно в макросе).
0 |
4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
|
11.02.2015, 19:33 [ТС] |
9 |
Эти файлы по областям выгружаются из базы. и могут ячейки смещаться. то есть был доупстим топливо в ячейке C1 а стало в ячейке C2 так как может впереди добавиться допустим молоко, которого в прошлом месяце не было. поэтому мне и нужно чтоб наверняка сравнивать по коду товара как то) и нужен макрос. впр не пойдет(
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.02.2015, 22:11 |
10 |
Так как раз ВПР и пойдёт.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||
11.02.2015, 22:21 |
11 |
|
Вот, только имя файла поменять. Ну а если коды известны — то конечно нужно искать по коду, чтоб например не спутать газовое топливо с газировкой Вложения
0 |
4 / 1 / 0 Регистрация: 25.11.2012 Сообщений: 108 |
|
12.02.2015, 18:33 [ТС] |
12 |
Ох, не подходит мне ВПР. я же напсиала . мне нужно именно макросом а не функцией! Я же спрашиваю конкретно как прописать такой макрос))))) Мне не подходит ВПР! конечно это проще и им бы я и сама могла сделать.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
12.02.2015, 18:59 |
13 |
Запишите рекордером простановку этой ВПР() и замену её на значение (с полными путями к файлу), подправьте по вкусу.
0 |
Alexander_LA 0 / 0 / 0 Регистрация: 21.05.2015 Сообщений: 8 |
||||
04.08.2015, 10:32 |
14 |
|||
Помогите пожалуйста найти ошибку: Код открывает выбранный пользователем файл и копирует данные из него в заданное место. Но работало-работало и вдруг перестало, не могу понять в чем дело. Выдает то out of range, то error 1004. P.S. Таких кнопок считывающих данные с других файлов 4, вставляют на 4 разных листа.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
04.08.2015, 11:00 |
15 |
1. А нет ли MISSING в референсах ВБА?
0 |
0 / 0 / 0 Регистрация: 21.05.2015 Сообщений: 8 |
|
04.08.2015, 11:01 |
16 |
MISSING в референсах простите, а что это?
Код можно чуть подправить, избавиться от селектов, активаций и даже копи. как?
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
04.08.2015, 11:09 |
17 |
|||
Вроде где-то так (не проверял ессно…)
Добавлено через 2 минуты
простите, а что это? В редакторе VBA идёте Tools->References и смотрите — если есть, то снимаете галки или устанавливаете компоненты.
0 |
0 / 0 / 0 Регистрация: 21.05.2015 Сообщений: 8 |
|
04.08.2015, 11:28 |
18 |
С одним файлом сработало, а второй — снова выдал out of range.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
04.08.2015, 11:31 |
19 |
Подозреваю что не те файлы открываете… *.xls нужно исключить, не уследил, виноват…
0 |
0 / 0 / 0 Регистрация: 21.05.2015 Сообщений: 8 |
|
04.08.2015, 11:44 |
20 |
*.xls нужно исключить, не уследил, виноват… Да вроде уже открывает и *.xls. Чего с ним могут быть проблемы? По моему помогло! Спасибо большое! А может еще подскажете как втянуть строки из txt файла по этому же принципу?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
04.08.2015, 11:44 |
20 |