CoderNotes - заметки программиста

Публикации  »  VBA, Excel
Скидка 65% на Skillbox

Получите скидку 65% на любой курс программирования на популярной образовательной платформе Skillbox!

Подробнее
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее

Работа с внешним 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 без сохранения изменений таким образом:

wb.Close False

 

Категория: VBA, Excel

Книги по теме:

Виктор Долженков

Microsoft Office Excel 2010

Андрей Ветров

Excel 2013-2016

Лада Рудикова

Microsoft Office Excel 2016

Посмотреть все книги по программированию

Комментарии к статье:

03.07.21   Гость ничего не понятно
03.05.23   Гость wb.Item(1).ActiveSheet - пишет Subscript out range, хотя у меня 4 листа в файле...
20.06.23   Гость щбыМ

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