Excel макрос открываем книгу

Открытие книги Excel из кода VBA. Проверка существования книги. Создание новой книги, обращение к открытой книге и ее закрытие. Методы Open, Add и Close.

Открытие существующей книги

Существующая книга открывается из кода VBA Excel с помощью метода Open:

Workbooks.Open Filename:=«D:test1.xls»

или

Workbooks.Open («D:test1.xls»)

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

Проверка существования файла

Проверить существование файла можно с помощью функции Dir. Проверка существования книги Excel:

If Dir(«D:test1.xls») = «» Then

    MsgBox «Файл не существует»

Else

    MsgBox «Файл существует»

End If

Или, если файл (книга Excel) существует, можно сразу его открыть:

If Dir(«D:test1.xls») = «» Then

    MsgBox «Файл не существует»

Else

    Workbooks.Open Filename:=«D:test1.xls»

End If

Создание новой книги

Новая рабочая книга Excel создается в VBA с помощью метода Add:

Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:

Workbooks.Add

ActiveWorkbook.SaveAs Filename:=«D:test2.xls»

В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».

Обращение к открытой книге

Обращение к активной книге:

Обращение к книге с выполняемым кодом:

Обращение к книге по имени:

Workbooks(«test1.xls»)

Workbooks(«test2.xls»)

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

Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:

Workbooks(«test1.xlsx»).Close

Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:

Workbooks(«test1.xlsx»).Close  SaveChanges:=False

или

Workbooks(«test1.xlsx»).Close  (False)

Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:

Workbooks(«test1.xlsx»).Close  SaveChanges:=True

или

Workbooks(«test1.xlsx»).Close (True)


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


Skip to content

На чтение 2 мин. Просмотров 5.1k.

Что делает макрос: Этот макрос открывает диалоговое окно, в котором отображаются только excel-файлы, тем самым позволяет открыть конкретную книгу

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как работает этот код
  4. Как использовать

Как макрос работает

Данный макрос открывает диалоговое окно, как показано на рис, что позволяет пользователю просматривать и открывать файл 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

Как работает этот код

  1. Первое, что делаем — объявляем переменную типа Variant, будет содержать Имя файла, который пользователь выберет. FName — имя нашей переменной.
  2. На шаге 2 мы используем метод GetOpenFilename, чтобы вызвать диалоговое окно, которое позволяет просмотреть содержимое папки и выбрать нужный нам файл. Метод
    GetOpenFilename поддерживает несколько настраиваемых параметров:
    a. FileFilter параметр позволяет указать Тип файла, который мы ищем.
    b. Title позволяет изменить заголовок, который отображается в верхней части диалогового окна.
    c. MultiSelect — параметр множественный выбор позволяет ограничить выбор в один файл.
  3. Если пользователь выбирает файл из диалогового окна, переменная FName берёт Имя файла, который выбрали. Если переменная не пустая, мы используем метод Open из книг
    объекта, чтобы открыть файл.

Как использовать

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

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.
  5. По желанию, можно назначить макрос к кнопке, чтобы открыть файл.

 

deathogre

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

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

Здрасьте. Как программно открыть книгу эксель и сохранить эту книгу (объект) в глобальной переменной?

 

Юрий М

Модератор

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

Контакты см. в профиле

#2

13.02.2016 13:53:37

1. Открытие нужной книги запишите макрорекордером — получите готовый код.
2.

Код
Dim Wb As Workbook
Set Wb = ActiveWorkbook
 

Hugo

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

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

#3

13.02.2016 13:53:58

Код
Set wb = Workbooks.Open(filename)
 

deathogre

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

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

Мне нужно открыть книгу из другой книги

 

Юрий М

Модератор

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

Контакты см. в профиле

#5

13.02.2016 13:55:02

Цитата
deathogre написал:
Мне нужно открыть книгу из другой книги

И что?

 

deathogre

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

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

#6

13.02.2016 14:02:59

Объявил глобальную переменную в модуле ЭтаКнига

Код
Public Главнейшая As Workbook

открыл книгу в модуле АктивХ формы

Код
ChDir "\Margo123Тест"
Workbooks.Open Filename:="\Margo123Тест6.02.2016.xlsm"
Set ЭтаКнига.Главнейшая = Workbooks("\Margo123Тест6.02.2016.xlsm")

выдает ошибку на 3 строке, Run-time error 9 Subscript out of range

 

Юрий М

Модератор

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

Контакты см. в профиле

Глобальную переменную в стандартный модуль — будет доступна всюду. И  модуль не нужно указывать.
Если книга уже открыта — зачем указывать путь?

 

deathogre

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

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

Мне нужно в открытую книгу писать изменения, через глобальную переменную хочу обращаться к этой книге

 

Юрий М

Модератор

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

Контакты см. в профиле

#9

13.02.2016 14:21:54

Обращайтесь — кто мешает? )

Код
Public Wb As Workbook
Sub Макрос1()
    Workbooks.Open Filename:="D:ОтчетыСостояние ТС.xlsm"
    Set Wb = ActiveWorkbook
    MsgBox Wb.Name
End Sub
 

KL

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

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

#10

13.02.2016 14:53:27

Или даже так:

Код
Public Wb As Workbook
Sub Макрос1()
    Set Wb = Workbooks.Open (Filename:="D:ОтчетыСостояние ТС.xlsm")
    MsgBox Wb.Name
End Sub

KL

 

KL

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

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

Кстати, ChDir для открытия книги таким способом не нужен. Он нужен для функции GetOpenFileName, которая, кстати, тоже уже не нужна, т.к. уже давно есть Application.FileDialog(msoFileDialogOpen) :)

 

Юрий М

Модератор

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

Контакты см. в профиле

Кирилл, а рекордер упорно пишет  ChDir ))

 

KL

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

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

Юр, ну мало ли что на заборах пишут. Рекордер еще и Select обожает :)

 

Юрий М

Модератор

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

Контакты см. в профиле

#14

13.02.2016 15:16:46

))

Simple way to open an Excel workbook using VBA and macros.

Syntax

Workbooks.Open ("File Path")

Replace file path with the path to the file on your computer along with the full file name.

Here is what it looks like in the VBA Editor window:

Note: you do not always have to use the file extension of the file but it is a good practice to do so. In my example, using simply «D:test» would also work.

Notes

There are MANY more options for opening a workbook but this post covers the basic usage of it, which will work for 98% of needed uses for this.

Here is a link to a full explanation on using this method if you need a more complex implementation of it: Workbook Open Method.

Make sure to download the accompanying workbooks to test this out in Excel.


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Close Excel Workbook using VBA Macros

Tutorial: How to close an Excel workbook using VBA and macros, including how to save the file before…

Macro to get Data from Another Workbook in Excel

Tutorial:
Macro to get data from a workbook, closed or open, over a network or locally on your comp…

Get User Submitted Data from a Prompt in Excel using VBA Macros

Tutorial: How to prompt a user for their input in Excel.
There is a simple way to do this using VBA …

Interactive Clickable Buttons and Interface Without Using VBA/Macros in Excel

Tutorial:
How to make your Excel dashboards and worksheets more interactive and easier to view and …

Loop through a Range of Cells in Excel VBA/Macros

Tutorial: How to use VBA/Macros to iterate through each cell in a range, either a row, a column, or …

Kill Command in Excel (Delete Files Using VBA)

Tutorial:
How to safely remove, delete, kill any Excel file, or other file, using VBA Macros in Exc…

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons

50+ Hours of Video

200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Здравствуйте! Помогите, пожалуйста!
Кнопка, которой присваивается макрос, находится на листе «Стартовая». На листе «Поиск» в ячейке G1 указано название другой книги. В H1 — название листа этой книги. Как создать макрос, который открывал бы книгу с названием из ячейки G1 и лист в этой книге с названием из ячейки H1?
Огромное спасибо!


как то так

Sub Макрос2()
Set A = [H1]
Workbooks.Open "C:Documents and SettingsMasterМои документы" & [G1] & ".xls"
Sheets(A.Value).Activate
End Sub

до тачивайте под себя.  ;)


Макрос подделал под себя. Так как кнопка будет находиться на другом листе, в третью строку добавил Sheets(«Поиск»)., чтобы название книги бралось именно с листа «Поиск». Но теперь при выполнении макроса не работает строка Sheets(A.Value).Activate. В чем моя проблема?

Sub Макрос2()
Set A = [H1]
Workbooks.Open «C:Documents and SettingsMasterМои документы» & Sheets(«Поиск»).[G1] & «.xlsm»
Sheets(A.Value).Activate
End Sub


Разобрался. В итоге:

Sub Макрос2()
Set A = Sheets(«Поиск»).[H1]
Workbooks.Open «C:Documents and SettingsMasterМои документы» & Sheets(«Поиск»).[G1] & «.xls»
Sheets(A.Value).Activate
End Sub

Большое спасибо за помощь!


lovko, оформляйте код тегами.

Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771


И снова проблема.
И в ячейке G1, и в ячейке H1 — формула, которая дает то или иное название книги и листа. Макрос, видимо, видит саму формулу, а не ее значение в виде названия книги и названия листа, поэтому работать не хочет. Можно ли сделать так, чтобы макрос видел не формулу, а ее содержание?
Помогите!!!


Цитировать«C:Documents and SettingsMasterМои документы»

у вас точно такой путь к файлу?
файл прикладываем.



макрос нормально отрабатывает. Ошибка может быть если листа с таким именем нет.

Sub Поиск1()
Set A = Sheets("Поиск").[H1]
Set B = Sheets("Поиск").[G1]
On Error GoTo S
Workbooks.Open "C:Инструкции" & B.Value & ".xlsm"
On Error GoTo S1
Sheets(A.Value).Activate
Exit Sub
S:
MsgBox "По пути C:Инструкции отсутствует книга " & B.Value
Exit Sub
S1:
MsgBox "В книге " & B.Value & ".xlsm лист с именем " & A.Value & " отсутствует."
End Sub


Все отлично работает. Большое спасибо!


как макросом книги 1 открыть закрытую книгу 2 Excel ???????

ek09

Дата: Среда, 05.06.2013, 22:13 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Здравствуйте
как макросом книги 1 открыть закрытую книгу 2 Excel ???????

В идеале нужно поработать макросом в зарытой книге а у меня почему то макрос книги 1 не работает в закрытой книге 2)

пробовал прописать макрорекордером открытие книги — тоже не помогло ((((

Может кто нибудь в курсе можно ли так сделать ?

???? очень нужна помощь ….

 

Ответить

Serge_007

Дата: Среда, 05.06.2013, 22:20 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (ek09)

пробовал прописать макрорекордером открытие книги — тоже не помогло

У Вас слишком много знаков вопроса и скобок smile

А макрорекордер пишет открытие:
[vba]

Код

Sub OpenFile()
       Workbooks.Open Filename:=»C:путьКнига2.xls»
End Sub

[/vba]

Цитата (ek09)

нужно поработать макросом в зарытой книге

Это невозможно. Для того что бы что-то сделать с закрытой книгой — её надо открыть. Правда сделать это можно и незаметно, но всё-таки придётся


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Hugo

Дата: Среда, 05.06.2013, 22:55 |
Сообщение № 3

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

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

Сообщений: 3140


Репутация:

670

±

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


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


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Serge_007

Дата: Среда, 05.06.2013, 23:15 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (Hugo)

R Dmitry сказал, что можно

Я Диму конечно уважаю, но нет, не верю smile
Меня Сергей KukIp на программерс убедил (к сожалению не могу найти ссылку, это давно было)
Для того что бы прочитать последовательность байт необходимо открыть контейнер их содержащий (т.е. файл). На кластере HDD — это просто последовательность байт, не имеющая привязки к конкретному файлу. Как-то так…


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Hugo

Дата: Среда, 05.06.2013, 23:17 |
Сообщение № 5

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

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

Сообщений: 3140


Репутация:

670

±

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


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

Я сам не проверял — и в теме не отписались как решилось… Так что не знаю.
Мне всегда хватает одного из двух проверенных способов smile


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

KuklP

Дата: Четверг, 06.06.2013, 06:11 |
Сообщение № 6

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

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

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


2003-2010

Цитата (Hugo)

Сергей, R Dmitry сказал, что можно

Где он там такое сказал? И что по-твоему означает строка:
cn.Open sCon
? tongue


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

KuklP

Дата: Четверг, 06.06.2013, 06:45 |
Сообщение № 7

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

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

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


2003-2010


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

AndreTM

Дата: Четверг, 06.06.2013, 09:34 |
Сообщение № 8

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

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

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


2003 & 2010

Цитата (Hugo)

Сергей, R Dmitry сказал, что можно

Цитата (KuklP)

Где он там такое сказал? И что по-твоему означает строка: cn.Open sCon

В вопросе ТС фразой «закрытая книга» подразумевалось, скорее всего, «не открытая в Excel». Так что, с этой точки зрения, доступ через DAO/ADO/ODBC — это возможность изменить данные. Как мы помним, наличие на компьютере-клиенте самого Excel при этом совершенно необязательно smile


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMЧетверг, 06.06.2013, 09:35

 

Ответить

Hugo

Дата: Четверг, 06.06.2013, 09:58 |
Сообщение № 9

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

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

Сообщений: 3140


Репутация:

670

±

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


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

Сергей, ну в общем конечно «не притрагиваясь» к файлу в нём ничего изменить нельзя. Ну разве что если только изменив адресацию диска smile

И кстати только что проверил — работают оба варианта SQL/ADO. И добавляет, и обновляет.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

ek09

Дата: Пятница, 07.06.2013, 14:18 |
Сообщение № 10

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Спасибо за помощь всем ! Какая то интересная штука получается …
в открытой книге ссылка на ячейку в закрытой книге обновляется а макросом нет ))))

 

Ответить

Serge_007

Дата: Пятница, 07.06.2013, 14:23 |
Сообщение № 11

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (ek09)

в открытой книге ссылка на ячейку в закрытой книге обновляется

Она обновляется только в том случае, если Вы ОТКРЫЛИ закрытую книгу и внесли в неё изменения, после чего она опять стала закрытой smile


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

  1. Что делает макрос
  2. Код макроса
  3. Как работает макрос
  4. Как использовать
  5. Скачать файл

Ссылка на это место страницы:
#zadacha

Помогает открыть Excel-книгу на нужном листе. С этим макросом Ваши пользователи будут сразу оказываться в конкретном месте файла. Этот код запускается по событию рабочей книги (Open— при открытии файла) и делает активным нужный лист. 

Ссылка на это место страницы:
#formula

  1. Private Sub Workbook_Open()
  2. Sheets("Отчёт").Select
  3. End Sub

Ссылка на это место страницы:
#kak

Макрос открывает книгу Excel на нужном листе, определяя этот лист перед запуском.

Ссылка на это место страницы:
#touse

Для реализации этого макроса, вам нужно скопировать и вставить его в код события Workbook_Open

Размещение макроса здесь позволяет запускать макрос сразу при открытии Excel- файла. 

1. Активируйте редактор Visual Basic, нажав ALT + F11
2. В окне проекта найдите свой проект/имя рабочей книги и нажмите на знак плюс рядом с ним в чтобы увидеть все листы и модуль ЭтаКнига. 
3. Правой кнопкой мыши нажмите на модуле ЭтаКнига и выберите View Code 
4. В левой верхней части окна выберите объект WorkBook (Excel автоматом предложит написать макрос для события Workbook_Open, если нет, то выполните п.5 
5. В правом верхнем выпадающем списке выберите событие Open

Ссылка на это место страницы:
#file

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

1. Введите свою почту

2. Нажмите Зарегистрироваться

3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.

Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel. 

Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.

Подписывайтесь на нас в соц.сетях:

Задача по объединению данных из нескольких 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:Temp001.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True

У метода SaveAs есть несколько параметров сохранения, с ними можно ознакомиться на сайте Microsoft.

Если нужно, можно закрыть книгу Excel без сохранения изменений таким образом:

wb.Close False

Понравилась статья? Поделить с друзьями:
  • Excel макрос отключить обновление экрана
  • Excel макрос определить ячейку
  • Excel макрос определить количество строк
  • Excel макрос оператор или
  • Excel макрос оператор for