Vba excel скопировать файл не открывая

Копирование и перемещение файлов в 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*"

Return to VBA Code Examples

FileCopy Description

Copies a file from one directory to another.

Simple FileCopy Examples

FileCopy "C:Test.txt" "D:"

This will copy the file “Test.txt” on “C:” to the D drive.

If the file “Test.txt” doesn’t exist on “C:”, it will occur a Run-time error ’53’: File not found.

FileCopy Syntax

In the VBA Editor, you can type  “FileCopy(” to see the syntax for the FileCopy Statement:

The FileCopy statement contains 2 arguments:

Source: String name of file to copy. Can include path.

Destination: String expression that specifies the target file name. The destination may include directory or folder, and drive.

Examples of Excel VBA FileCopy Function

Please test with the following code.

Sub FileCopy_Example()
    Dim dlgFilePicker As FileDialog
    Dim dlgFileSaveAs As FileDialog
    Dim strOrgFile As String
    Dim strTarFile As String
    
    Set dlgFilePicker = Application.FileDialog(msoFileDialogFilePicker)
    
    dlgFilePicker.AllowMultiSelect = False
    dlgFilePicker.ButtonName = "Copy"
    dlgFilePicker.Title = "Please select a file to copy"
    
    If dlgFilePicker.Show = True Then
        strOrgFile = dlgFilePicker.SelectedItems(1)
    Else
        Exit Sub
    End If
    
    Set dlgFileSaveAs = Application.FileDialog(msoFileDialogSaveAs)
    dlgFileSaveAs.Title = "Please indicate a folder and write a file name."
    dlgFileSaveAs.ButtonName = "Paste"
    
    If dlgFileSaveAs.Show = True Then
        strTarFile = dlgFileSaveAs.SelectedItems(1)
    Else
        Exit Sub
    End If
    
    FileCopy strOrgFile, strTarFile
End Sub

Running it, it will display a dialog “Please select a file to copy” at first.

Then, you should select a file to copy.

After select a file, please click the button “Copy”.

Then, it will display a dialog “Please indicate a folder and write a file name”.

You should select a destination folder and write a file name.

After that, click the button “Paste”.

Then, the source file will be copied with the destination folder and file name.

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

 

Добрый день!
Прошу подсказать, как можно при помощи макроса вставить данные с одного файла в другой файл, при этом не открывая другой файл.
В файле Book1 есть данные которые будут меняться. Как сделать так чтобы в файл Book2 они вставлялись подряд (вниз каждый раз — ниже и ниже) и при этом только те, где в файле Book1 в столбце Date есть данные.

Прикрепленные файлы

  • Book2.xlsx (8.08 КБ)
  • Book1.xlsx (9.56 КБ)

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Практически никак. Теоретически делали на ADO, но там всякие ограничения, я не особо разбираюсь…
А вот если можно всёж открывать, тогда… Но ведь нельзя! :)
P.S. Хотя думаю что ADO тоже открывает файл, только совсем незаметно.

Изменено: Hugo22.03.2017 17:54:30

 

Мотя

Пользователь

Сообщений: 3218
Регистрация: 25.12.2012

В связи с чем такие требования к файлу Book2?

 

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

 

Wanschh

Пользователь

Сообщений: 231
Регистрация: 10.01.2017

Уважаемый The_Priest  в другой, но похожей теме рекомендовал ознакомиться:

с этим

Возможно, это Ваш случай.

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Так там  — ПОЛУЧИТЬ. А тут — ПОЛОЖИТЬ!

 

Мотя

Пользователь

Сообщений: 3218
Регистрация: 25.12.2012

Сделайте Book2 транзитным файлом. В своем личном файле делайте обновления из транзитного файла.

 

Колеги, можите пожалуйста продемонстрировать это на моем примере? Не совсем понимаю значения «транзитный файл». И как делать эти обновления. Спасибо.

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Вообще формулы можно спрятать защитой листа. Другое дело насколько эта защита надёжна…

 

Это да. Но интересно сделать так, чтобы операции проводились в одной книге, потом вставлялись как значения в другую не открывая её.  

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Ни вставить, ни прочитать ничего не открывая файл невозможно. Ни через какие АДО. Разве что силой мысли :D

Я сам — дурнее всякого примера! …

 

То есть по факту выход только тот чтобы делать все в одном файле?

 

PowerBoy

Пользователь

Сообщений: 141
Регистрация: 13.01.2014

#13

23.03.2017 11:44:02

Цитата
kuklp написал:
Ни вставить, ни прочитать ничего не открывая файл невозможно

ТС имеет ввиду не открывая файл в экселе. Через ADO он спокойно считает всю информацию,не открывая его в экселе.

Excel + SQL = Activetables

 

Мотя

Пользователь

Сообщений: 3218
Регистрация: 25.12.2012

#14

23.03.2017 11:45:19

Цитата
AlexBosenko написал:
Не совсем понимаю значения «транзитный файл».

Транзитный пассажир (трансферный пассажир) — пассажир любого типа транспорта, который находится в определенной точке временно, с целью того, чтобы продолжить свой путь дальше через какой-то промежуток времени. ;)

 

PowerBoy

Пользователь

Сообщений: 141
Регистрация: 13.01.2014

#15

23.03.2017 12:12:15

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

Код
Public Sub RefreshData()
'Created using add-in ActiveTables
Dim strConnection As String
Dim strSQL As String
strConnection = IIf(Val(Application.Version) < 12, "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Replace(ThisWorkbook.FullName, "Book2.xlsm", "Book1.xlsx") & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=3';", "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Replace(ThisWorkbook.FullName, "Book2.xlsm", "Book1.xlsx") & ";Extended Properties='Excel 12.0;HDR=YES;IMEX=3';")
strSQL = "SELECT   Date,  Jan,  Feb,  Mar,  Apr,  May,  Jun,  Jul,  Aug,  Sep,  Oct,  Nov,  Dec  FROM   [Аркуш1$]"
With ThisWorkbook.ActiveSheet
    .UsedRange.Clear
    With .QueryTables.Add(strConnection, .Range("A1"), strSQL)
         .Refresh False
         .Delete
    End With
End With
End Sub

Изменено: PowerBoy23.03.2017 12:19:48

Excel + SQL = Activetables

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#16

23.03.2017 12:40:28

Цитата
PowerBoy написал:
ТС имеет ввиду не открывая файл в экселе

похвально, что Вы умеете читать мысли ТС  ;)

Цитата
AlexBosenko написал:
вставить данные с одного файла в другой файл, при этом не открывая другой файл.

Лично я понял это так, что первый файл уже открыт. И для меня сомнительно преимущество привлечения сторонней библиотеки(OLEDB), при этом же все равно файл 2 нужно открыть. Почему просто не открыть второй файл макросом из первого, запузырить туда все что надо, сохранить и закрыть его, скрывая все эти действа с экрана? И примеров такому на форуме несть числа.
А SQL-запросы есть смысл применять только на ОЧЕНЬ больших объемах данных. Ну или если язык SQL родней и привычней Васика :D

Я сам — дурнее всякого примера! …

 

Все равно работает только когда Book2 открыта.

И как написать чтобы эти данные падали в нужные ячейки и каждый раз когда задействовался макрос данные в Book2 накапливались а не заменялись?

 

AlexBosenko

Пользователь

Сообщений: 195
Регистрация: 02.09.2016

#18

23.03.2017 13:24:53

Вот пишу такой код. Но данные вставляются в виду ошибке. В чем может быть причина?

Код
Sub Get_Value_From_Close_Book()
    Dim sShName As String, sAddress As String, vData
    Application.ScreenUpdating = False
    Workbooks.Open "W:Business AnalysisPaymentPR projectTestBook2.xlsm" '"
    sAddress = "A1:M100"
       vData = Sheets("Sheet2").Range(sAddress).Value
    ActiveWorkbook.Close False
     If IsArray(vData) Then
        [B1:M100].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
    Else
        [B1:M100] = vData
    End If
     Application.ScreenUpdating = True
End Sub
 

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

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Игор, спасибо. Но как это сделать при «на кодах»? Логику эту я понимаю, и как раз о такой логике я писал сначала. Но вот в кодах (макросах) слабоват.
Прошу отобразить, если есть возможность, на примере. Спасибо.

 

Колеги, окей. Подскажите пожалуйста следующее:
Во вложении файл. На первом листе данные, которые предпологается что будут меняться каждый раз.
Как сделать так, чтобы с первого листа эти данные копировались на второй лист как значения и чтобы эти скопированные данные на Листе2 вставлялись по накоплению?
При этом копировать нужно только те строчки, где в столбце Date стоит дата.
Спасибо.

Прикрепленные файлы

  • Book1.xlsm (16.75 КБ)

Изменено: AlexBosenko23.03.2017 14:16:39

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#22

23.03.2017 14:07:11

однако…
читаем #1:

Цитата
как можно при помощи макроса вставить данные с одного файла в другой файл, при этом не открывая другой файл

смотрим #18
судя по названию процедуры Sub Get_Value_From_Close_Book() и по тому, что в ней написано, Вы открываете файл и пытаетесь (именно пытаетесь, потому что попытка неудачна) прочитать значения из диапазона А1:М100 листа Sheet2 и тут же закрываете этот файл.
так вот
1. вот это
Sheets(«Sheet2»).Range(sAddress).Value
— это обращение к указанному диапазону указанного листа, но в КНИГЕ, В КОТОРОЙ НАПИСАН МАКРОС, а не в той, что вы открыли двумя строками выше.
если в книге с этим макросом нет листа с именем «Sheet2» — вот тут все и рухнет, а даже если есть, то Вы взяли значение не из только что открытой книги, а из той, в которой лежит приведенный Вами макрос.
2. возвращаясь к тому что написано в #1: так Вам нужно ВЗЯТЬ данные из другой книги или ПОЛОЖИТЬ данные в другую книгу? или Вы решили выяснить кто тут самый смышленый на «планете» и по Вашим ребусам сможет слепить нужный код

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

#23

23.03.2017 14:11:01

Цитата
Ігор Гончаренко написал:
но в КНИГЕ, В КОТОРОЙ НАПИСАН МАКРОС, а не в той,

— это смотря где лежит код, может быть и так, а может и иначе. А где код — это мне неизвестно…

 

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

Прикрепленные файлы

  • Book1.xlsm (16.75 КБ)

Изменено: AlexBosenko23.03.2017 14:18:12

 

извините, «загнался»
Sheets(«Sheet2»).Range(sAddress).Value — обратится к листу «Sheet2» активной в данный момент книги, а активна та, что Вы только что открыли
но вопрос что за задачу Вы решаете остается открытым.

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

#26

23.03.2017 14:29:09

Цитата
Ігор Гончаренко написал:
активной в данный момент книги

если код в стандартном модуле. А если в модуле книги, как некоторые любят? :)
Файл видеть не могу пока…

 

Давайте остановимся но одной книге и попробуем там решить задачу пожалуйста  :)

Прикрепленные файлы

  • Book1.xlsm (16.75 КБ)

 

осталось выяснить в чем суть задачи

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

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

Прикрепленные файлы

  • Book1.xlsm (21.79 КБ)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

AlexBosenko

Пользователь

Сообщений: 195
Регистрация: 02.09.2016

#30

23.03.2017 16:39:02

Игор, спасибо большое. Но как сделать: Чтобы копиросалось не все, а только те строчки где есть дата (то есть в столбце Date)?
И как сделать, чтобы каждый раз нажимая кнопку, в Листе2 данные заполнялись вниз и вниз, а не просто заменялись?

Visual Basic gives us access to parts of the Windows environment; therefore, there are lots of file-based activities we can achieve with VBA. One of these is to use VBA to copy a file.

In this post, we look at 5 examples of how to achieve this.

In this post, we use the basic FileCopy method. For more advanced options, we can use the File Systems Options.

Example 1: Copy a file

The example below copies Example File.xlsx from C:UsersmarksDocuments to C:UsersmarksDocumentsTest.

Sub VBACopyFile()

FileCopy "C:UsersmarksDocumentsExample File.xlsx", _
    "C:UsersmarksDocumentsTestExample File.xlsx"

End Sub

Note: In this example, the file name is unchanged.

Example 2: Copy a file using variables

In Example 1, the file names were included within the FileCopy statement. However, they can also be provided as variables.

In the code below:

  • The variables are declared (i.e., created)
  • Values are assigned to the variables
  • The variables are used in the FileCopy statement
Sub VBACopyFileVariables()

'Declare variables
Dim copyFromFile As String
Dim copyToFile As String

'Assign values to variables
copyFromFile = "C:UsersmarksDocumentsExample File.xlsx"
copyToFile = "C:UsersmarksDocumentsExample File Copied.xlsx"

'Use variables in the FileCopy statement
FileCopy copyFromFile, copyToFile

End Sub

Note: In this example, the file is not copied to a new location, but is renamed from Example File.xlsx to Example File Copied.xlsx

Example 3: Copy a file based on cell values

In this example, we copy a file using file paths contained in cell values.

Look at the screenshot below. Cell C2 contains the current file path and Cell C4 contains the path to which the file is to be copied.

VBA copy file using cell values

We can run the following macro to rename a file using these cell values.

Sub VBACopyFileSheetNames()

FileCopy ActiveSheet.Range("C2"), _
    ActiveSheet.Range("C4")

End Sub

Note: In this example, the file is copied to a new folder and also renamed from Example File.xlsx to Example File Copied.xlsx

Example 4: Check file existence before VBA copy

The FileCopy command will happily overwrite a file without showing any errors. Therefore, it is a good idea to check if a file already exists before copying over it.

The code below checks for the existence of a file in the target location. If a file exists, a message box with a Yes/No options appear. Clicking No exists the macro.

Sub VBACheckTargetFileCopyFile()

'Declare variables
Dim copyFromFile As String
Dim copyToFile As String
Dim msgBoxAnswer As Long

'Assign variables to file names
copyFromFile = "C:UsersmarksDocumentsExample File.xlsx"
copyToFile = "C:UsersmarksDocumentsTestExample File Copied.xlsx"

'Check if the file already exists
If Dir(copyToFile) <> "" Then

    'Display message box and capture answer
    msgBoxAnswer = MsgBox(Prompt:="File already exists in that location." & _
        vbNewLine & "Do you wish to overwrite it?", Buttons:=vbYesNo, _
        Title:="Copying file")

    'If answer is No, the exist the macro
    If msgBoxAnswer = vbNo Then

        'Exit the macro
        Exit Sub

    End If

End If

'File does not exist or Yes clicked so continue
FileCopy copyFromFile, copyToFile

End Sub

Example 5: Avoiding errors when copying files

Copying files can trigger errors; the errors are outlined in the section below. The following code builds on Example 4 and also provides an error message box if any errors occur.

Sub VBAAdvancedCopyFile()

'Declare variables
Dim copyFromFile As String
Dim copyToFile As String
Dim msgBoxAnswer As Long

'Assign variables to file names
copyFromFile = "C:UsersmarksDocumentsExample File.xlsx"
copyToFile = "C:UsersmarksDocumentsTestExample File Copied.xlsx"

On Error Resume Next

'Check if the file already exists
If Dir(copyToFile) <> "" Then

    'Display message box and capture answer
    msgBoxAnswer = MsgBox(Prompt:="File already exists in that location." & _
        vbNewLine & "Do you wish to overwrite it?", Buttons:=vbYesNo, _
        Title:="Copying file")

    'If answer is No, the exist the macro
    If msgBoxAnswer = vbNo Then

        'Exit the macro
        Exit Sub

    End If

End If

'File does not exist or Yes clicked so continue
FileCopy copyFromFile, copyToFile

'Display message if error occured
If Err.Number <> 0 Then
    MsgBox Prompt:="Unable to copy file", Buttons:=vbOK, _
        Title:="Copy file error"
End If

'Turn error checking back on
On Error GoTo 0

End Sub

Possible errors

Copying a file during automation can cause errors. Below are some of the common errors from the VBA copy file process.

Copying a file that does not exist triggers an error: Run-time error’53’: File not found.

VBA Rename File error

Copying a file to a file location that is locked (i.e., another user has the file open) triggers an error: Run-time error ’70’: Permission denied

Copying to a file which is already opened

Notes on copying files

To finish off this post, there are just a few things to make you aware of:

  • We have used Excel workbooks in the examples, but we can use any file type.
  • FileCopy cannot copy complete folders, only files.
  • The FileCopy command is core Visual Basic code. We find this code in other applications windows applications such as Word and PowerPoint.
  • Check out this post for more example codes to manage files and folders: VBA code to copy, move, delete and manage files.

Also, check the VBA code library for hundreds of reusable code snippets.


Headshot Round

About the author

Hey, I’m Mark, and I run Excel Off The Grid.

My parents tell me that at the age of 7 I declared I was going to become a qualified accountant. I was either psychic or had no imagination, as that is exactly what happened. However, it wasn’t until I was 35 that my journey really began.

In 2015, I started a new job, for which I was regularly working after 10pm. As a result, I rarely saw my children during the week. So, I started searching for the secrets to automating Excel. I discovered that by building a small number of simple tools, I could combine them together in different ways to automate nearly all my regular tasks. This meant I could work less hours (and I got pay raises!). Today, I teach these techniques to other professionals in our training program so they too can spend less time at work (and more time with their children and doing the things they love).


Do you need help adapting this post to your needs?

I’m guessing the examples in this post don’t exactly match your situation. We all use Excel differently, so it’s impossible to write a post that will meet everybody’s needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site), you should be able to adapt it to your needs.

But, if you’re still struggling you should:

  1. Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
  2. Ask the ‘Excel Ninja’ in your office. It’s amazing what things other people know.
  3. Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it’s clear and concise.  List all the things you’ve tried, and provide screenshots, code segments and example workbooks.
  4. Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.

What next?
Don’t go yet, there is plenty more to learn on Excel Off The Grid.  Check out the latest posts:

FileCopy in VBA

Excel VBA FileCopy

There are many ways to copy or move a file from one folder to another. We can do it manually from Copying and cutting the file icon and pasting it into the destination folder. But when it comes to automating this process of copying the file, we can do that in VBA as well. To copy the file, we have a function available in VBA named as same “File Copy”.

Syntax of FileCopy in Excel VBA

It is very easy to apply File Copy in VBA. The syntax of File Copy is as shown below.

Syntax of VBA File Copy

File Copy has only two components to feed. Which are:

  • Source – Here we will put the source location from where we need to copy the file.
  • Destination – And this will be the destination folder where we will be pasting the copied file.

The complete syntax will be in String datatype. Because we will be using the path of the file which will be as text.

How to Copy a File in Excel VBA?

Now let us try with some examples on VBA File Copy in Excel.

You can download this VBA Copy a File Excel Template here – VBA Copy a File Excel Template

Example #1 – FileCopy In VBA

In the first example, we will see how to copy a file from a source location and paste it in a destination location in a very simple way.

For this, we need a file of any kind or extension. Here we are considering an Excel file with extension xlsx. As we can see, we have placed that excel file into a location which is easy to access named as Test.

VBA Copy File Example 1.1

Now we will copy this file with the help of FileCopy to the below destination folder.

VBA Copy File Example 1.2

Step 1: For this, go to VBA and open a Module from Insert menu drop-down option as shown below.

FileCopy Module

Step 2: Now in the opened module, write the subcategory of VBA FileCopy or in any other name as per your choice.

Code:

Sub VBA_Copy1()

End Sub

VBA Copy File Example 1.3

Step 3: Now directly open the FileCopy function as shown below.

Code:

Sub VBA_Copy1()

FileCopy(

End Sub

VBA Copy File Example 1.4

Step 4: Now in quotes write the source location address followed by file name and extension as shown below.

Code:

Sub VBA_Copy1()

FileCopy "D:Test1Hello.xlsx",

End Sub

VBA Copy File Example 1.5

Step 5: For the Destination location, again put the path in inverted commas followed by file and extension.

Code:

Sub VBA_Copy1()

FileCopy "D:Test1Hello.xlsx", "D:VPB FileApril FilesHello.xlsx"

End Sub

Example 1.6

Step 6: Now compile the code and run it by clicking on the Play button which is located below the menu bar. We will see, the excel file with name Test is now copied from the source location to destination location as shown below. As there was nothing in the file so the size of the file is coming as 0 KB.

Example 1.7

Example #2 – FileCopy In VBA

In another example, we will see how to copy the file from Source location to Destination by defining the variable. This process is little lengthy but more reliable as we will be fixing the parameters and variable.

Step 1: Now first open a new module and write the subcategory of VBA File Copy as shown below.

Code:

Sub VBA_Copy2()

End Sub

VBA Copy File Example 2.1

Step 2: First, define a variable where we will be putting the source location of the file same excel file which we have used in example-1 as String.

Code:

Sub VBA_Copy2()

Dim FirstLocation As String

End Sub

VBA Copy File Example 2.2

Step 3: In a similar way, we will be needing another variable for the Destination location.

Code:

Sub VBA_Copy2()

Dim FirstLocation As String
Dim SecondLocation As String

End Sub

VBA Copy File Example 2.3

Step 4: Now put the location in the first defined variable which is “FirstLocation” along with file name and its extension.

Code:

Sub VBA_Copy2()

Dim FirstLocation As String
Dim SecondLocation As String

FirstLocation = "D:Test1Hello.xlsx"

End Sub

Example 2.4

Step 5: In a similar way, do that same thing for Destination location using variable “SecondLocation” which we have defined above.

Code:

Sub VBA_Copy2()

Dim FirstLocation As String
Dim SecondLocation As String

FirstLocation = "D:Test1Hello.xlsx"
SecondLocation = "D:VPB FileApril FilesHello.xlsx"

End Sub

Example 2.5

Step 6: Now it is the time to use FileCopy function.

Code:

Sub VBA_Copy2()

Dim FirstLocation As String
Dim SecondLocation As String

FirstLocation = "D:Test1Hello.xlsx"
SecondLocation = "D:VPB FileApril FilesHello.xlsx"

FileCopy

End Sub

VBA Copy File Example 2.6

As per syntax of the FileCopy first, we have to put source location, where we have kept the file. But as we have already defined the source and destination location folders in above for both variables.

Step 7: So here we can directly select those variables. First select source location variable which is FirstLocation.

Code:

Sub VBA_Copy2()

Dim FirstLocation As String
Dim SecondLocation As String

FirstLocation = "D:Test1Hello.xlsx"
SecondLocation = "D:VPB FileApril FilesHello.xlsx"

FileCopy FirstLocation

End Sub

Example 2.7

Step 8: Again in a similar way, select the destination location variable which is SecondLocation as shown below.

Code:

Sub VBA_Copy2()

Dim FirstLocation As String
Dim SecondLocation As String

FirstLocation = "D:Test1Hello.xlsx"
SecondLocation = "D:VPB FileApril FilesHello.xlsx"

FileCopy FirstLocation, SecondLocation

End Sub

Example 2.8

Step 9: Once done, we will compile the code by pressing F8 functional key. And if there is no error found, then run the code. We will see, the file from source location is copied and pasted in the destination folder as shown below.

Example 2.6

We can try different location path as well. For test let’s consider another source location where we will be having a word file.

As we can see, the file doesn’t have any data so the size is again showing as 0 KB.

Example 2.9

And the destination folder will be Output Location folder which is under Input Location folder. If we see inside the file, there is no data available.

Example 2.10

Now we will replace the source and destination in variables FirstLocation and Second Location respectively followed by the file name and its extension.

Code:

Sub VBA_Copy2()

Dim FirstLocation As String
Dim SecondLocation As String

FirstLocation = "D:VPB FileApril FilesNew ExcelTest Case.docx"
SecondLocation = "D:VPB FileApril FilesFinal locationTest Case.docx"

FileCopy FirstLocation, SecondLocation

End Sub

VBA Copy File Example 3

Now run the code.

We will see, the Test word file is now copied from the Input Location folder to Output location folder with the same size which is 0 KB.

VBA Final Output of Copy file

Pros of FileCopy In VBA

  • It can be used for copying more than 1 file in one shot.
  • It takes a similar amount of time for 10 files as it takes for copying one file.
  • We can use any extension file type which we want to copy.

Things to Remember

  • Always put the file name and its extension at the end of the location name.
  • Quote the destination and source location links into inverted commas.
  • Once done, save the code in Macro enable excel to use and retain the code for future purpose.
  • Always grant the permission to code so that it could copy the file from the source location and paste it in a destination location.

Recommended Articles

This is a guide to FileCopy in VBA. Here we discuss how to Copy an Excel file using VBA Code along with practical examples and downloadable excel template. You can also go through our other suggested articles –

  1. VBA Active Cell
  2. VBA XML
  3. VBA Transpose
  4. VBA RGB

VBA FileCopy function in Excel is categorized as a File and Directory function. This built-in VBA FileCopy function copies a file from the source directory to the destination directory. If you use FileCopy function on a currently open file, returns an error.

This function use in either procedure or function in a VBA editor window in Excel. We can use this VBA FileCopy Function in any number of times in any number of procedures or functions. In the following section we learn what is the syntax and parameters of the FileCopy function, where we can use this FileCopy Function and real-time exampleS in Excel VBA.

Table of Contents:

  • Overview
  • Syntax of VBA FileCopy Function
  • Parameters or Arguments
  • Where we can apply or use VBA FileCopy Function?
  • Example 1: Copy file from source location to destination location
  • Example 2: Copy opened file from source location to destination location
  • Instructions to Run VBA Macro Code
  • Other Useful Resources

The syntax of the FileCopy Function in VBA is

FileCopy(Source,Destination)

Parameters or Arguments:

The FileCopy function has two arguments in Excel VBA.
where
Source: It is a mandatory string parameter. The source argument represents the source file path that you want to copy. It may include folder or directory or drive.
Destination: It is a mandatory string parameter. The destination argument represents the destination file path that you want to copy the file to. It may include folder or directory or drive.

Where we can apply or use VBA FileCopy Function?

We can use this FileCopy Function in VBA MS Office 365, MS Excel 2016, MS Excel 2013, 2011, Excel 2010, Excel 2007, Excel 2003, Excel 2016 for Mac, Excel 2011 for Mac, Excel Online, Excel for iPhone, Excel for iPad, Excel for Android tablets and Excel for Android Mobiles.

Example 1: Copy file from source location to destination location

Here is a simple example of the VBA FileCopy function. This below example copies file from specified source location to specified destination location. Now same file file is available in two different locations.

'Copy file from source location to destination location
Sub VBA_FileCopy_Function_Ex1()
    
    Dim sSourceFile As String
    Dim sDestinationFile As String
    
    sSourceFile = "C:VBAF1VBA FunctionsVBA Text FunctionsVBA Functionsa.xlsm"
    sDestinationFile = "C:VBAF1VBA FunctionsVBA Functionsa.xlsm"
    
    FileCopy sSourceFile, sDestinationFile

    MsgBox "Successfully file Copied.", vbInformation, "VBA FileCopy Function"

End Sub

Output: Here is the screen shot of the first example output.
VBA FileCopy Function

Example 2: Copy opened file from source location to destination location

Here is a simple example of the VBA FileCopy function. This below example tries to copy a file from source location to destination location. But it returns an error. Because the file is opened.

'Copy opened file from source location to destination location
Sub VBA_FileCopy_Function_Ex2()
    
    Dim sSourceFile As String
    Dim sDestinationFile As String
    
    sSourceFile = "C:VBAF1VBA FunctionsVBA Text FunctionsVBA Function Example File.xlsm"
    sDestinationFile = "C:VBAF1VBA FunctionsVBA Function Example File.xlsm"
    
    FileCopy sSourceFile, sDestinationFile
   
End Sub

Output:Here is the screen shot of the second example output.
VBA FileCopy Function

Instructions to Run VBA Macro Code or Procedure:

You can refer the following link for the step by step instructions.

Instructions to run VBA Macro Code

Other Useful Resources:

Click on the following links of the useful resources. These helps to learn and gain more knowledge.

VBA Tutorial VBA Functions List VBA Arrays in Excel Blog

VBA Editor Keyboard Shortcut Keys List VBA Interview Questions & Answers

Содержание

  1. Метод CopyFile
  2. Синтаксис
  3. Замечания
  4. См. также
  5. Поддержка и обратная связь
  6. VBA Excel. Копирование и перемещение файлов
  7. Копирование файлов
  8. Метод CopyFile
  9. Синтаксис
  10. Параметры
  11. Примеры
  12. Как средствами VBA переименовать/переместить/скопировать файл

Метод CopyFile

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

Синтаксис

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

Синтаксис метода CopyFile содержит следующие элементы:

Part Описание
object Обязательно. Объект всегда является именем Объекта FileSystemObject.
источник Обязательно. Спецификация файла строки символов, которая может содержать подстановочные знаки (для одного или нескольких копируемых файлов).
destination Обязательно. Символьное строковое обозначение конечного расположения, в которое необходимо скопировать файл или файлы из элемента source. Использование подстановочных знаков не допускается.
Перезаписать Необязательный параметр. Логическое значение, которое указывает, требуется ли перезапись существующих файлов. Если установлено значение True, файлы будут перезаписаны; если задано значение False, перезапись не выполняется. По умолчанию используется значение True. Необходимо учитывать, что функция CopyFile не выполняется, если для элемента destination установлено свойство «только чтение», независимо от значения элемента overwrite.

Замечания

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

Однако нельзя использовать:

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

Если элемент destination не существует, выполняется копирование элемента source. Это типичный случай.

Если элемент destination представляет собой существующий файл, возникает ошибка, если элементу overwrite присвоено значение False. В противном случае выполняется попытка копирования элемента source в существующий файл.

Если destination является каталогом, происходит ошибка.

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

Файлы, скопированные в новый целевой путь, будут сохранять одно и то же имя файла. Чтобы переименовать скопированный файл, просто добавьте новое имя файла в путь назначения. Например, файл будет скопирован в новое расположение, а файл в новом расположении будет иметь другое имя:

См. также

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

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

Источник

VBA Excel. Копирование и перемещение файлов

Копирование и перемещение файлов в VBA Excel с помощью методов CopyFile и MoveFile объекта FileSystemObject. Синтаксис, параметры, примеры.

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

Метод CopyFile

Синтаксис

Параметры

Параметр Описание
object Переменная, возвращающая объект FileSystemObject. Обязательный параметр.
source Строковое выражение, задающее полное имя файла, который требуется скопировать в другое расположение. Для копирования нескольких файлов используются подстановочные знаки. Обязательный параметр.
destination Строковое выражение, задающее конечное расположение, куда требуется скопировать файл (файлы) из элемента source. Подстановочные знаки не допускаются. Обязательный параметр.
overwrite Логическое значение, которое указывает, требуется ли перезаписывать существующие файлы в конечном расположении. True – файлы будут перезаписаны, False – перезапись не выполняется. Необязательный параметр, по умолчанию – True.

Если копируемый файл с полным именем source не существует, будет сгенерирована ошибка.

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

Примеры

Пример 1
Копирование одного файла в другое расположение с проверкой его существования:

Источник

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

В этой статье я хотел бы рассказать как средствами 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, конечно, способен на большее — но цель данной статьи была показать основные операции с папками и файлами как стандартными методами, так и более продвинутыми.

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

Источник

Студворк — интернет-сервис помощи студентам

Помогите пожалуйста:

Можно ли средствами VBA создать копию файла, не открывая его?

Файл расширения .hst

Добавлено через 7 минут
Разобрался сам

кому интересно:

Visual Basic
1
2
3
4
5
6
7
8
9
10
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, "Ошибка": Exit Sub
    
    FileCopy sFileName, sNewFileName 'копируем файл
    MsgBox "Файл скопирован", vbInformation
End Sub

Копирование данных из файла, не зная открыт ли он

Мурад

Дата: Четверг, 13.08.2015, 16:16 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 509


Репутация:

17

±

Замечаний:
0% ±


Excel 2007

Добрый день! В продолжение бурной беседы в теме ссылка.
2 сотрудника хотят вести свой файлы в одинаковых таблицах самостоятельно. Один сотрудник работает с данными, который занес в свою таблицу другой сотрудник.
Задача. При открытии файла «2» таблица заполняется данными из файла «1».
Сотрудники сидят в разных углах разных кабинетов в разных зданиях в разных странах… Сотрудник 2 не знает, работает ли в данный момент со своим файлом Сотрудник 1. Но ему надо уже работать с данными, которые успел занести Сотрудник 1 и нажавший кнопку «Сохранить».
Такие случаи встречались вам, уважаемые программисты?

 

Ответить

RAN

Дата: Четверг, 13.08.2015, 16:21 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

И в чем проблема?
Открыли файл для чтения, и читайте.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Мурад

Дата: Четверг, 13.08.2015, 16:25 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 509


Репутация:

17

±

Замечаний:
0% ±


Excel 2007

RAN, нужно скопировать данные из одного файла в другой…Вы имеете в виду, копипастом переносить каждый раз? В принципе, Сотрудник 2 у нас молчаливый и готов сверять 2 таблицы, в поисках отличий и копирования новых кусков

 

Ответить

RAN

Дата: Четверг, 13.08.2015, 17:23 |
Сообщение № 4

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Такие случаи встречались вам, уважаемые программисты?

Такие не встречались, встерались только случаи, когда с этими двумя файлами нужно работать как с единой базой.
Ваш случай проще.
Как сделать, я ответил.
Если вам нужно не «как», а готовое решение — заказывайте, сделаю.
Или можете ручками.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Hugo

Дата: Четверг, 13.08.2015, 20:15 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Чтоб вообще никак не влиять одному сотруднику на другого — можно кодом сделать копию файла (не открывать и сохранять, а скопировать средствами файловой системы) и работать как угодно с этой копией.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Мурад

Дата: Пятница, 14.08.2015, 09:19 |
Сообщение № 6

Группа: Проверенные

Ранг: Ветеран

Сообщений: 509


Репутация:

17

±

Замечаний:
0% ±


Excel 2007

RAN, а каким образом открывать файл только для чтения? Что необходимо изменить в коде:
[vba]

Код

Sub copy_data_from_Polina()
Application.DisplayAlerts = False
Application.CutCopyMode = False
     wb1 = «Казакова.xlsm»
     MyPath = ThisWorkbook.Path & «» & wb1
     Workbooks.Open Filename:=MyPath
     Workbooks(wb1).Sheets(1).Range(«A7:M500»).copy
     ThisWorkbook.Activate
     Range(«A7»).Select
     ActiveSheet.Paste
     Windows(wb1).Activate
     ActiveWindow.Close
Application.DisplayAlerts = True
End Sub

[/vba]
, чтобы компилятор, открывая файл, проверял, работает ли в нем автор, и если да, то открывал его в режиме чтения. Далее копировал необходимый диапазон, вставлял этот диапазон в другом файле. В конце закрывал файл автора без сохранения данных и уничтожением буфера..

 

Ответить

Мурад

Дата: Пятница, 14.08.2015, 09:26 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 509


Репутация:

17

±

Замечаний:
0% ±


Excel 2007

Если есть возможность ручками открыть общий файл в режиме чтения, скопировать из него что надо, значит…можно это автоматизировать. Или нет?

 

Ответить

RAN

Дата: Пятница, 14.08.2015, 09:44 |
Сообщение № 8

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Слабо справку по методу Open поглядеть?


Быть или не быть, вот в чем загвоздка!

 

Ответить

Мурад

Дата: Пятница, 14.08.2015, 09:47 |
Сообщение № 9

Группа: Проверенные

Ранг: Ветеран

Сообщений: 509


Репутация:

17

±

Замечаний:
0% ±


Excel 2007

[vba]

Код

Workbooks.Open Filename:=MyPath, ReadOnly:=True, IgnoreReadOnlyRecommended:=True

[/vba] ? :)

 

Ответить

Мурад

Дата: Пятница, 14.08.2015, 09:56 |
Сообщение № 10

Группа: Проверенные

Ранг: Ветеран

Сообщений: 509


Репутация:

17

±

Замечаний:
0% ±


Excel 2007

RAN, спасибо что подталкиваете на самостоятельные исследования!
Но вот, часть кода, который пытался использовать для вставки значений:
[vba]

Код

ActiveSheet.PasteSpecial Paste:=xlPasteValues

[/vba] выдает ошибку 400…
Поэтому оставил только [vba][/vba]

 

Ответить

Мурад

Дата: Пятница, 14.08.2015, 10:51 |
Сообщение № 11

Группа: Проверенные

Ранг: Ветеран

Сообщений: 509


Репутация:

17

±

Замечаний:
0% ±


Excel 2007

Поюзал в интернете… С ошибкой 400 сталкивались многие, как я понял… Анализируя код до и после, ошибка связана с заменой кода [vba][/vba] на этот код [vba]

Код

ActiveSheet.PasteSpecial Paste:=xlPasteValues

[/vba]:
[vba]

Код

Sub copy_data_from_Polina()
Application.DisplayAlerts = False
Application.CutCopyMode = False
     wb1 = «Казакова.xlsm»
     MyPath = ThisWorkbook.Path & «» & wb1
     Workbooks.Open Filename:=MyPath, ReadOnly:=True, IgnoreReadOnlyRecommended:=True
     Workbooks(wb1).Sheets(1).Range(«A7:M500»).copy
     ThisWorkbook.Activate
     Range(«A7»).Select
     ActiveSheet.PasteSpecial Paste:=xlPasteValues
     Windows(wb1).Activate
     ActiveWindow.Close
Application.DisplayAlerts = True
End Sub

[/vba]
Макрос запускается нажатием кнопки на листе.

 

Ответить

RAN

Дата: Пятница, 14.08.2015, 10:57 |
Сообщение № 12

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Бросьте бубен!

[vba]

Код

ThisWorkbook.Sheets(«Нужный»).Range(«A7:M500»).Value = Workbooks(wb1).Sheets(1).Range(«A7:M500»).Value

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

Мурад

Дата: Пятница, 14.08.2015, 11:03 |
Сообщение № 13

Группа: Проверенные

Ранг: Ветеран

Сообщений: 509


Репутация:

17

±

Замечаний:
0% ±


Excel 2007

RAN, hands hands hands

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Vba excel скопировать только формулы
  • Vba excel скопировать столбец в другую книгу
  • Vba excel скопировать столбец в другой столбец
  • Vba excel скопировать лист с новым именем
  • Vba excel скопировать значение в ячейку