Работа с внешним Excel файлом из VBA
Задача по объединению данных из нескольких Excel-файлов, или подгрузка доп.данных из внешнего файла решается достаточно просто: создается объект Excel, который можно скрыть визуально, затем открывается необходимый файл и выполняются нужные действия. Просто приведу несколько примеров.
Открытие файла Excel
Set objExcel = New Excel.Application objExcel.Visible = False Set wb = objExcel.Workbooks.Open(fname) Set ws = wb.Sheets(1)
В первой строке запускаем новый Excel, затем делаем его невидимым, в 3-й строке открываем файл fname. В последней строке получаем первый лист открытого excel-кого файла.
Альтернативный вариант открытия файла
Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.Open fname, local:=True Set ws = wb.Item(1).ActiveSheet
При открытии файла можно использовать доп.параметры (приведу некоторые):
UpdateLinks — обновлять или нет внешние ссылки при открытии файла;
ReadOnly — открытие в режиме только для чтения;
Format — используемый при открытии разделитель (1 — символ tab, 2 — запятые, 3 — пробелы, 4 — точка с запятой, 5 — без разделителя, 6 — пользовательский разделитель, заданный в Delimiter);
Delimiter — пользовательский разделитель (в случае, если Format = 6);
Origin — тип операционной системы (xlMacintosh, xlWindows или xlMSDOS);
Local — использование в Excel языка такого же, как в открываемом файле.
Теперь можно выполнять какие-то действия с открытым файлом, просто обращаясь через wb и ws.
ws.Cells(1, 1).Value = "Test" ws.Cells(1, 1).Font.Size = 18 ' Поменять размер шрифта ws.Cells(1, 1).HorizontalAlignment = xlCenter '
Записать книгу и закрыть
wb.Save ' Записать с тем же именем wb.SaveAs Filename:="имя_нового_файла", FileFormat:=xlOpenXMLWorkbookMacroEnabled ' Записать в новый файл wb.Close ' Закрыть книгу
Для записи текущей книги (где находится макрос), можно использовать:
ActiveWorkbook.SaveAs
Чтобы сохранить или перезаписать книгу Excel без вопросов, можно применить такой вариант:
Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="c:\Temp\000\1.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled Application.DisplayAlerts = True
У метода SaveAs есть несколько параметров сохранения, с ними можно ознакомиться на сайте Microsoft.
Если нужно, можно закрыть книгу Excel без сохранения изменений таким образом:
Как открыть конкретную книгу в Excel
Данный макрос открывает диалоговое окно, как показано на рис, что позволяет пользователю просматривать и открывать файл Excel.

Код макроса
Sub Macro7() 'Шаг 1: Определяем переменную. Dim FName As Variant 'Шаг 2: Метод GetOpenFilename активизирует диалоговое окно. FName = Application.GetOpenFilename( _ 'a – определяем тип файла FileFilter:="Excel Workbooks,*.xl*", _ 'b – заголовок окна Title:="Выбери файл, который надо открыть", _ 'c – множественный выбор MultiSelect:=False) 'Шаг 3: Если был выбран файл, открыть его! If FName <> False Then Workbooks.Open Filename:=FName End If End Sub
Как работает этот код
- Первое, что делаем — объявляем переменную типа Variant, будет содержать Имя файла, который пользователь выберет. FName — имя нашей переменной.
- На шаге 2 мы используем метод GetOpenFilename, чтобы вызвать диалоговое окно, которое позволяет просмотреть содержимое папки и выбрать нужный нам файл. Метод
GetOpenFilename поддерживает несколько настраиваемых параметров:
a. FileFilter параметр позволяет указать Тип файла, который мы ищем.
b. Title позволяет изменить заголовок, который отображается в верхней части диалогового окна.
c. MultiSelect — параметр множественный выбор позволяет ограничить выбор в один файл. - Если пользователь выбирает файл из диалогового окна, переменная FName берёт Имя файла, который выбрали. Если переменная не пустая, мы используем метод Open из книг
объекта, чтобы открыть файл.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
- По желанию, можно назначить макрос к кнопке, чтобы открыть файл.
Как открыть файл через vba
Есть макрос, который по идее:) должен открыть и закрыть другой файл защищенный паролем:
Private Sub Workbook_Open()
‘ Открыть файл
Application.Workbooks.Open («C:\Documents and Settings\. \Рабочий стол\Книга4.xlsx»), Password:=»123321″
‘ Закрыть файл
Application.Workbooks.Item(1).Close («C:\Documents and Settings\. \Рабочий стол\Книга4.xlsx»)
Но он, почему-то закрывает файл, с которым нужно работать. Как это исправить?
Как открыть файл через vba
подскажите пожалуйста, как открыть файл с которым программа будет работать, если имя файла лежит в переменной без указания его расширения, где лежит файл известно, а расширение «.xls»
подскажите пожалуйста, как открыть файл с которым программа будет работать, если имя файла лежит в переменной без указания его расширения, где лежит файл известно, а расширение «.xls» olgao
Сообщение отредактировал olgao — Воскресенье, 31.03.2013, 16:35
Сообщение подскажите пожалуйста, как открыть файл с которым программа будет работать, если имя файла лежит в переменной без указания его расширения, где лежит файл известно, а расширение «.xls» Автор — olgao
Дата добавления — 31.03.2013 в 16:27
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Замечаний: 0% ±
2003-2010
Цитата ( olgao )
разрешения
Может расширения, все-таки?!
Цитата ( olgao )
разрешения
Может расширения, все-таки?! KuklP
Цитата ( olgao )
разрешения
Может расширения, все-таки?! Автор — KuklP
Дата добавления — 31.03.2013 в 16:30
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
ну да, опечаталась
ну да, опечаталась olgao
Сообщение ну да, опечаталась Автор — olgao
Дата добавления — 31.03.2013 в 16:31
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Замечаний: 0% ±
2003-2010
workbooks.open «полный_путь\» & переменная & «.xls»
workbooks.open «полный_путь\» & переменная & «.xls» KuklP
Сообщение workbooks.open «полный_путь\» & переменная & «.xls» Автор — KuklP
Дата добавления — 31.03.2013 в 16:49
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
KuklP, большое спасибо)
еще один вопросик возник, как в дальнейшем активировать этот же уже открытый файл, чтобы продолжить с ним работать?
KuklP, большое спасибо)
еще один вопросик возник, как в дальнейшем активировать этот же уже открытый файл, чтобы продолжить с ним работать? olgao
Сообщение KuklP, большое спасибо)
еще один вопросик возник, как в дальнейшем активировать этот же уже открытый файл, чтобы продолжить с ним работать? Автор — olgao
Дата добавления — 31.03.2013 в 17:02
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
все, уже не надо, сама смогла это сделать)
все, уже не надо, сама смогла это сделать) olgao
Сообщение все, уже не надо, сама смогла это сделать) Автор — olgao
Дата добавления — 31.03.2013 в 17:15
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Замечаний: 0% ±
2003-2010
Он и так станет активным
Он и так станет активным KuklP
Сообщение Он и так станет активным Автор — KuklP
Дата добавления — 31.03.2013 в 17:17
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Цитата ( KuklP )
Он и так станет активным
если после его открытия активировать другие файлы, то соответственно его надо будет активировать, чтобы опять к нему обратиться
Цитата ( KuklP )
Он и так станет активным
если после его открытия активировать другие файлы, то соответственно его надо будет активировать, чтобы опять к нему обратиться olgao
Цитата ( KuklP )
Он и так станет активным
если после его открытия активировать другие файлы, то соответственно его надо будет активировать, чтобы опять к нему обратиться Автор — olgao
Дата добавления — 31.03.2013 в 17:41
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Замечаний: 0% ±
2003-2010
set wb = workbooks.open(«полный_путь\» & переменная & «.xls»)
[/vba]
Дальше к книге обращаемся по псевдониму wb
set wb = workbooks.open(«полный_путь\» & переменная & «.xls»)
[/vba]
Дальше к книге обращаемся по псевдониму wb KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP — Воскресенье, 31.03.2013, 18:06
Сообщение Тогда:
[vba]
set wb = workbooks.open(«полный_путь\» & переменная & «.xls»)
[/vba]
Дальше к книге обращаемся по псевдониму wb Автор — KuklP
Дата добавления — 31.03.2013 в 18:05
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
KuklP, я, к сожалению, не такой большой знаток VBA, поэтому действую только теми способами, которые я знаю тем более у меня и так все заработало, но все равно спасибо за помощь!
KuklP, я, к сожалению, не такой большой знаток VBA, поэтому действую только теми способами, которые я знаю тем более у меня и так все заработало, но все равно спасибо за помощь! olgao
Сообщение KuklP, я, к сожалению, не такой большой знаток VBA, поэтому действую только теми способами, которые я знаю тем более у меня и так все заработало, но все равно спасибо за помощь! Автор — olgao
Дата добавления — 31.03.2013 в 18:19
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Замечаний: 0% ±
Excel 2003, 2010
Цитата ( olgao )
не такой большой знаток VBA
а это при чём?
не надо быть большим знатоком
надо постепенно включать в свой арсенал способы и приёмы, позволяющие, во-первых, решать ваши задачи (и это вы уже сделали — отлично!), а, во-вторых, делать этоудобно, эффективно и быстро.
ненужная активация книг, листов и ячеек в коде не нужна (извините за тавтологию) по нескольким причинам:
— это долго (работает)
— это некрасиво (выглядит при работе)
— это долго (писать лишние команды в коде)
— с этим неудобно работать — не всегда очевидно, что в данный момент «активно»
— у этого нет НИКАКИХ преимуществ.
а форумчане вам плохих советов не дадут.
ибо иначе их лишают сладкого
Цитата ( olgao )
не такой большой знаток VBA
а это при чём?
не надо быть большим знатоком
надо постепенно включать в свой арсенал способы и приёмы, позволяющие, во-первых, решать ваши задачи (и это вы уже сделали — отлично!), а, во-вторых, делать этоудобно, эффективно и быстро.
ненужная активация книг, листов и ячеек в коде не нужна (извините за тавтологию) по нескольким причинам:
— это долго (работает)
— это некрасиво (выглядит при работе)
— это долго (писать лишние команды в коде)
— с этим неудобно работать — не всегда очевидно, что в данный момент «активно»
— у этого нет НИКАКИХ преимуществ.
а форумчане вам плохих советов не дадут.
ибо иначе их лишают сладкого ikki
Цитата ( olgao )
не такой большой знаток VBA
а это при чём?
не надо быть большим знатоком
надо постепенно включать в свой арсенал способы и приёмы, позволяющие, во-первых, решать ваши задачи (и это вы уже сделали — отлично!), а, во-вторых, делать этоудобно, эффективно и быстро.
ненужная активация книг, листов и ячеек в коде не нужна (извините за тавтологию) по нескольким причинам:
— это долго (работает)
— это некрасиво (выглядит при работе)
— это долго (писать лишние команды в коде)
— с этим неудобно работать — не всегда очевидно, что в данный момент «активно»
— у этого нет НИКАКИХ преимуществ.
а форумчане вам плохих советов не дадут.
ибо иначе их лишают сладкого Автор — ikki
Дата добавления — 31.03.2013 в 19:30
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Добрый день,
подскажите как правильно указать/написать, чтоб открыть файл с расширением *.csv
[admin]Тема закрыта. Причина: нарушение правил пп. 4, 5q[/admin]
Добрый день,
подскажите как правильно указать/написать, чтоб открыть файл с расширением *.csv
[admin]Тема закрыта. Причина: нарушение правил пп. 4, 5q[/admin] Lloyd
Сообщение Добрый день,
подскажите как правильно указать/написать, чтоб открыть файл с расширением *.csv
[admin]Тема закрыта. Причина: нарушение правил пп. 4, 5q[/admin] Автор — Lloyd
Дата добавления — 31.07.2013 в 11:34