Открытие книги 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, существование книги, обратиться к открытой книге.
SergKh Пользователь Сообщений: 4 |
#1 01.08.2018 12:59:02 Выполнение последней строки ниже в 64-разрядной среде вызывает ошибку Run-time error ‘9’:
Изменено: SergKh — 01.08.2018 22:45:54 |
||
skais675 Пользователь Сообщений: 2178 |
Быть может стоит указать и расширение книги. |
vikttur Пользователь Сообщений: 47199 |
Код в сообщении нужно оформлять с помощью кнопки <…> |
SergKh Пользователь Сообщений: 4 |
skais675, у книги нет расширения. Расширение есть у файлов. Но я тем не менее попробовал и конечно не помогло. vikktur, исправил. Изменено: SergKh — 01.08.2018 15:01:20 |
sokol92 Пользователь Сообщений: 4445 |
#5 01.08.2018 15:13:13
Проверьте. Откройте любую книгу и выполните макрос
Пример из #1 не понятен. В строке 8 активируется книга, открытие которой не показано. Владимир |
||||
skais675 Пользователь Сообщений: 2178 |
#6 01.08.2018 16:06:56 SergKh
Ну до кучи укажите тогда уже и полный путь+файл+расширение.
а потом
И стало бы ясно в чем проблема. Изменено: skais675 — 01.08.2018 16:14:30 Мой канал |
||||
Hugo Пользователь Сообщений: 23253 |
А Sheets(«…»).Select может и не сработать… и не по причине отсутствия такого листа. Кстати, в теме опять нет примера… |
SergKh Пользователь Сообщений: 4 |
sokol92, skais675, вы совершенно правы с именем книги, причина именно в отсутствии расширения. Проблема РЕШЕНА, ОГРОМНОЕ СПАСИБО! Но только в Office16 похоже расширение является обязательным (и показывается командой MsgBox ActiveWorkbook.Name), его отсутствие вызывает ошибку, а в Office10 — нет (и не обязательно, и не показывается командой MsgBox ActiveWorkbook.Name, поэтому я так и заявил поначалу, и ошибок нет). Вот и получилось — файл работал около года на Office10, но только неделю назад пришлось перейти на Office16 и … Так что название темы действительно можно поменять, только не знаю как. Еще раз ОГРОМНОЕ СПАСИБО! |
skais675 Пользователь Сообщений: 2178 |
#9 01.08.2018 16:21:38
Если книга активирована и он видим, и имя верно, тогда почему? Мой канал |
||
skais675 Пользователь Сообщений: 2178 |
SergKh
, как же Вы пробовали в #4, что потом получилось в #8? Изменено: skais675 — 01.08.2018 16:23:41 |
Hugo Пользователь Сообщений: 23253 |
skais675, если код в модуле другой книги. Именно книги, а не в стандартном. А как там по факту — никому неизвестно… |
skais675 Пользователь Сообщений: 2178 |
Hugo
Я ж написал активируем книгу а потом select листа. Изменено: skais675 — 01.08.2018 16:29:46 |
Hugo Пользователь Сообщений: 23253 |
Проверили? Ну ведь точно не проверяли Изменено: Hugo — 01.08.2018 16:33:58 |
skais675 Пользователь Сообщений: 2178 |
#14 01.08.2018 16:42:08
Проверил, все как я и говорил — не понимаю Вас? Прикрепленные файлы
Изменено: skais675 — 01.08.2018 16:49:53 Мой канал |
||
Hugo Пользователь Сообщений: 23253 |
#15 01.08.2018 16:49:58
|
||||
skais675 Пользователь Сообщений: 2178 |
Попробовал и в модуль книги, тоже открыл как следует но выдал сообщение «400». Hugo Вы бы уже пояcнили почему происходит эта ошибка? Прикрепленные файлы
Изменено: skais675 — 01.08.2018 22:44:23 |
SergKh Пользователь Сообщений: 4 |
skais675
на вопрос #10. Первый раз наверное ошибку при проверке допустил, вот и не помогло, то же самое сообщение вылезло. Но когда увидел что написал MsgBox, уже очень внимательно перепроверил. Остальные после #10 вопросы похоже не ко мне, так что не отвечаю. |
Hugo Пользователь Сообщений: 23253 |
Потому что код из модуля ЭтаКнига будет искать лист у себя, а не в активной книге. |
skais675 Пользователь Сообщений: 2178 |
#19 01.08.2018 16:59:04 Hugo
однако макрос из модуля книги все делает и лист выделяет из другой книги все как нужно , но вот сообщение выдает. Потому
не соответствует действительности. Изменено: skais675 — 01.08.2018 17:00:39 Мой канал |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#20 01.08.2018 17:05:03
Соответствует. Мат.часть вещь упрямая и непоколебимая Изменено: Дмитрий(The_Prist) Щербаков — 01.08.2018 17:05:54 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Hugo Пользователь Сообщений: 23253 |
#21 01.08.2018 17:06:06
— у меня он даже книгу не открывает, ну да это ладно. |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#22 01.08.2018 17:09:25
там даже путь к открываемой книге не указан Изменено: Дмитрий(The_Prist) Щербаков — 01.08.2018 17:10:09 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
sokol92 Пользователь Сообщений: 4445 |
Модераторам: Название темы. Как правильно ссылаться на открытую книгу Excel и листы книги в коде VBA Изменено: sokol92 — 01.08.2018 18:44:54 |
skais675 Пользователь Сообщений: 2178 |
#24 01.08.2018 19:30:30 Hugo,
Дмитрий(The_Prist) Щербаков Все верно, невнимателен был с примером
Спасибо за разъяснения! Мой канал |
||
RAN Пользователь Сообщений: 7091 |
#25 01.08.2018 20:08:40
Необходимость указывать расширение определяется настройкой системы «скрывать расширения зарегистрированных типов файлов». |
||
Nsekins 0 / 0 / 0 Регистрация: 05.10.2020 Сообщений: 12 |
||||||||
1 |
||||||||
Excel Обращение к открытой книге17.03.2021, 17:09. Показов 6036. Ответов 7 Метки нет (Все метки)
Всем доброго времени суток!
в этой строчке макрос берет определенную книгу, а мне нужно чтобы он работал с активной книгой и не привязывался к названию
0 |
малоболт 1143 / 442 / 193 Регистрация: 30.01.2020 Сообщений: 1,095 |
|
17.03.2021, 17:34 |
2 |
Workbooks(«Spec.xlsx»).Sheets(1).Activate Ну, замените на Код ActiveWorkbook.Sheets(1).Activate Но я бы советовал взять 2 переменные, в одну (наприvер назову её aWbSh1) записать проверяемый лист текущей активной книги: aWbSh1=ActiveWorkBook.Sheets(НомерНужногоЛиста)
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||||||
17.03.2021, 17:39 |
3 |
|||||||
на коленке писано: (не проверено)
Добавлено через 1 минуту
Set w2 = Workbooks.Open Добавлено через 1 минуту
и, скорей всего надо будет сначала активировать книгу, а потом лист
0 |
0 / 0 / 0 Регистрация: 05.10.2020 Сообщений: 12 |
|
17.03.2021, 18:07 [ТС] |
4 |
ActiveWorkbook.Sheets(1).Activate Так я пробовал, у меня была ошибка
на коленке писано: (не проверено) и все же оно работает. Спасибо большое, очень выручили!
0 |
811 / 465 / 181 Регистрация: 09.03.2009 Сообщений: 1,577 |
|
17.03.2021, 18:10 |
5 |
Зачем вообще активировать? Если открываем по указателям, активная вроде ж не изменится и останется на экране после обработки и закрытия того файла?
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
17.03.2021, 18:36 |
6 |
Зачем вообще активировать? Zeag,
0 |
811 / 465 / 181 Регистрация: 09.03.2009 Сообщений: 1,577 |
|
17.03.2021, 18:50 |
7 |
Alex77755, например? Я себе сохраню, чтобы в другой раз не рыпаться. Помню, что на ActiveWindow.Zoom = 85 нарвался и пока не прочел, не работало. А что еще?
0 |
5 / 5 / 0 Регистрация: 02.09.2020 Сообщений: 32 |
|
22.03.2021, 16:21 |
8 |
Еще ActiveWorkbook приходится применять после Workbooks(*).Sheets(*).Copy, когда создаётся некий Book1.
0 |
Содержание
- 1 Открытие существующей книги
- 2 Создание новой книги
- 3 Обращение к открытой книге
- 4 Как закрыть книгу Excel из кода VBA
- 4.1 Сохранение всех рабочих книг
- 4.2 Сохранение и закрытие всех рабочих книг
- 4.3 Частичное сокрытие элементов рабочего листа
- 4.4 Синхронизация выделенного диапазона на листах рабочей книги
- 4.5 Решение(ия):
- 5 Создать новую книгу в Excel VBA — примеры:
-
-
- 5.0.0.1 Создать новую книгу
- 5.0.0.2 Создание объекта для вновь созданной книги
-
-
Открытие книги Excel из кода VBA. Создание новой книги, присвоение ей имени. Обращение к открытой книге и закрытие. Методы Open, Add и Close объекта Workbooks.
- Открытие существующей книги
- Создание новой книги
- Обращение к открытой книге
- Как закрыть книгу Excel из кода VBA
Открытие существующей книги
Существующая книга открывается из кода VBA Excel с помощью метода Open:
Workbooks.Open Filename:="D:test1.xls"
или
Workbooks.Open ("D:test1.xls")
В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
Проверить существование файла можно с помощью функции Dir:
If Dir("D:test1.xls") = "" Then MsgBox "Файл не существует" Else MsgBox "Файл существует" End If
Или, если файл существует, можно сразу его открыть:
If Dir("D:test1.xls") = "" Then MsgBox "Файл не существует" Else Workbooks.Open Filename:="D:test1.xls" End If
Создание новой книги
Новая рабочая книга Excel создается в VBA с помощью метода Add:
Workbooks.Add
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:test2.xls"
В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».
Обращение к открытой книге
Обращение к активной книге:
ActiveWorkbook
Обращение к книге с выполняемым кодом:
ThisWorkbook
Обращение к книге по имени:
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)
Настоящая заметка продолжает знакомство с VBA, в ней приводятся примеры управления рабочими книгами и листами Excel с помощью VBA.
Рис. 1. Столбцы и строки скрыты за исключением рабочего диапазона
Скачать заметку в формате Word или pdf, примеры в архиве (политика безопасности провайдера не позволяет загружать файлы Excel с поддержкой макросов)
Сохранение всех рабочих книг
Следующая процедура циклически просматривает все рабочие книги в коллекции Workbooks и сохраняет каждый файл, который сохранялся ранее.
Public Sub SaveAllWorkbooks()
Dim Book As Workbook
For Each Book In Workbooks
If Book.Path "
"
Then Book.Save
Next Book
End Sub
Обратите внимание на то, как используется свойство Path. Если для какой-либо рабочей книги свойство Path не задано, значит, файл еще не сохранялся (это новая рабочая книга). Данная процедура игнорирует такие рабочие книги и сохраняет только те из них, свойство Path которых имеет ненулевое значение.
Сохранение и закрытие всех рабочих книг
Следующая процедура циклически просматривает коллекцию Workbooks. Программа сохраняет и закрывает все рабочие книги.
Sub CloseAllWorkbooks()
Dim Book As Workbook
For Each Book In Workbooks
If Book.Name ThisWorkbook.Name Then
Book.Close savechanges:=True
End If
Next Book
ThisWorkbook.Close savechanges:=True
End Sub
Обратите внимание, что процедура использует оператор If, чтобы определить, содержит ли данная рабочая книга текущий выполняемый код. Это необходимо, так как при закрытии рабочей книги, содержащей процедуру, программа автоматически завершает свое выполнение, причем остальные рабочие книги не будут сохранены и закрыты.
Частичное сокрытие элементов рабочего листа
В примере из этого раздела скрываются все строки и столбцы рабочего листа за исключением тех из них, которые находятся в текущем выделенном диапазоне (рис. 1).
Sub HideRowsAndColumns()
Dim row1 As Long, row2 As Long
Dim col1 As Long, col2 As Long
If TypeName(Selection) "
Range"
Then Exit Sub'
Если последняя строка либо последний столбец скрыты,'
отобразить все и выйти
If Rows(Rows.Count).EntireRow.Hidden Or _
Columns(Columns.Count).EntireColumn.Hidden Then
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Exit Sub
End If
row1 = Selection.Rows(1).Row
row2 = row1 + Selection.Rows.Count — 1
col1 = Selection.Columns(1).Column
col2 = col1 + Selection.Columns.Count — 1
Application.ScreenUpdating = False
On Error Resume Next'
Скрыть строки
Range(Cells(1, 1), Cells(row1 — 1, 1)).EntireRow.Hidden = True
Range(Cells(row2 + 1, 1), Cells(Rows.Count, _
1)).EntireRow.Hidden = True'
Скрыть столбцы
Range(Cells(1, 1), Cells(1, col1 — 1)).EntireColumn.Hidden = True
Range(Cells(1, col2 + 1), Cells(1, _
Columns.Count)).EntireColumn.Hidden = True
End Sub
Чтобы показать все строки и столбцы, встаньте на перекрестие строк и столбцов (выделено красным на рис. 1), и пройдите по меню: Главная –> Ячейки –> Формат –> Скрыть или отобразить –> Отобразить строки. Повторите этот путь, чтобы отобразить столбцы (рис. 2).
Рис. 2. Показать все строки и столбцы
Если выделенный диапазон включает несвязанные диапазоны, видимым останется только первый из них.
Синхронизация выделенного диапазона на листах рабочей книги
Если вы работаете с рабочими книгами, состоящими из нескольких листов, то, вероятно, знаете, что Excel не может «синхронизировать» листы в рабочей книге. Другими словами, не существует автоматического способа сделать так, чтобы все листы имели одинаковые выделенные диапазоны и верхние левые ячейки. Макрос VBA, показанный ниже, берет за основу активный рабочий лист и выполняет следующие действия со всеми остальными рабочими листами в книге:
- выделяет тот же диапазон, что и в активном листе;
- задает ту же левую верхнюю ячейку, что и на активном листе (рис. 3).
Рис. 3. Синхронизация выделенного диапазона на листах рабочей книги
Sub SynchSheets()'
Дублирование выделенного диапазона активного листа'
и верхней левой ячейки активного диапазона на всех листах
If TypeName(ActiveSheet) "
Worksheet"
Then Exit Sub
Dim UserSheet As Worksheet, sht As Worksheet
Dim TopRow As Long, LeftCol As Integer
Dim UserSel As String
Application.ScreenUpdating = False'
Запоминание текущего листа
Set UserSheet = ActiveSheet'
Сохранение сведений об активной ячейке
TopRow = ActiveWindow.ScrollRow
LeftCol = ActiveWindow.ScrollColumn
UserSel = ActiveWindow.RangeSelection.Address'
Циклический обход рабочих листов
For Each sht In ActiveWorkbook.Worksheets
If sht.Visible Then '
пропуск скрытых листов
sht.Activate
Range(UserSel).Select
ActiveWindow.ScrollRow = TopRow
ActiveWindow.ScrollColumn = LeftCol
End If
Next sht'
Восстановление исходного положения
UserSheet.Activate
Application.ScreenUpdating = True
End Sub
По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 348–351.
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate 'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste 'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
Иногда мы можем захотеть открыть или создать новую книгу с помощью VBA. Вы можете установить новую созданную книгу на объект, чтобы было легко сослаться на вашу книгу для выполнения дальнейших задач.
Решение(ия):
Следующие макросы позволят открыть или создать новую книгу с помощью метода Добавить.
Создать новую книгу в Excel VBA — примеры:
- Создать новую книгу
- Создание объекта для вновь созданной рабочей книги
Создать новую книгу
Вы можете использовать следующий код для создания новой книги и сохранения на диске C с помощью метода «Добавить».
Код:
Sub AddNewWorkbook1() 'Добавление новой рабочей книги Workbooks.Add 'Сохранение рабочей книги ActiveWorkbook.SaveAs "C:WorkbookName.xls" 'OR ActiveWorkbook.SaveAs Filename:="C:WorkbookName1.xls" End Sub
Объяснение:
- Метод добавления рабочей книги добавит новую книгу
- Сохранить как рабочую книгу метод сохранит активную книгу в определенном месте с указанным именем файла
Вывод: Вы должны увидеть недавно открытую книгу вместе с существующей книгой.
Инструкции:
- Откройте рабочую книгу Excel
- Нажмите Alt + F11, чтобы открыть редактор VBA.
- Вставьте новый модуль из меню «Вставка»
- Создайте приведенный выше код и вставьте в окно кода
- Нажмите F5, чтобы увидеть выход
- Вы должны увидеть недавно открытую книгу, как показано выше.
- Сохраните файл в виде макросъемки
Создание объекта для вновь созданной книги
Вы можете установить вновь созданную книгу на объект, так что вам легко обратиться к вашей книге для выполнения дальнейших задач.
Код:
sub AddNewWorkbook2() Dim wkb as Workbook 'Добавление новой рабочей книги Set wkb = Workbooks.Add 'Сохранение рабочей книги wkb.SaveAs "C:WorkbookName.xls" 'OR wkb.SaveAs Filename:="C:WorkbookName1.xls" End Sub
Вывод:
Вы должны увидеть недавно открытую книгу вместе с существующей книгой.
Инструкции:
- Откройте рабочую книгу Excel
- Нажмите Alt + F11, чтобы открыть редактор VBA.
- Вставьте новый модуль из меню «Вставка»
- Создайте приведенный выше код и вставьте в окно кода
- Нажмите F5, чтобы увидеть выход
- Вы должны увидеть недавно открытую книгу, как показано выше.
- Сохраните файл в виде макросъемки
Содержание
- Ссылка на ячейку на том же листе
- Ссылка на ячейку на другом листе
- Как сослаться на другую книгу в Excel
- Внешняя ссылка на открытую книгу
- Внешняя ссылка на закрытую книгу
- Ссылка на определенное имя (в той же или внешней книге)
Возможность ссылаться на ячейки и диапазоны — вот что заставляет работать любой инструмент для работы с электронными таблицами. И Excel — лучший и самый мощный из существующих.
В этом руководстве я расскажу все, что вам нужно знать о том, как ссылаться на ячейки и диапазоны в Excel. Помимо основных ссылок на том же листе, основная часть этого руководства будет посвящена как сослаться на другой лист или книгу в Excel.
Хотя нет большой разницы в том, как это работает, когда вы ссылаетесь на другой лист в том же файле или ссылаетесь на совершенно отдельный файл Excel, формат этой ссылки немного меняется.
Кроме того, при обращении к другому листу или другим внешним файлам следует помнить о некоторых важных моментах.
Но волнуйтесь … ничего сумасшедшего!
К тому времени, когда вы закончите изучение этого руководства, вы будете знать все, что нужно знать о ссылках на ячейки и диапазоны в Excel (находиться в той же или другой книге).
Давайте начнем!
Ссылка на ячейку на том же листе
Это самый базовый уровень ссылки, когда вы ссылаетесь на ячейку на том же листе.
Например, если я нахожусь в ячейке B1 и хочу сослаться на ячейку A1, формат будет следующим:
= A1
Когда вы это сделаете, значение в ячейке, в которой вы используете эту ссылку, будет таким же, как и в ячейке A1. И если вы внесете какие-либо изменения в ячейку A1, они будут отражены в ячейке, в которой вы использовали эту ссылку.
Ссылка на ячейку на другом листе
Если вам нужно сослаться на другой лист в той же книге, вам необходимо использовать следующий формат:
Sheet_name! Cell_address
Во-первых, у вас есть имя листа, за которым следует восклицательный знак, за которым следует ссылка на ячейку.
Поэтому, если вам нужно обратиться к ячейке A1 на листе 1, вам нужно использовать следующую ссылку:
= Лист1! A1
А если вы хотите сослаться на диапазон ячеек на другом листе, вам нужно использовать следующий формат:
Имя_листа! Первая_ячейка: Последняя_ячейка
Итак, если вы хотите сослаться на диапазон A1: C10 на другом листе в той же книге, вам необходимо использовать приведенную ниже ссылку:
= Лист1! A1: C10
Обратите внимание, что я показал вам только ссылку на ячейку или диапазон. На самом деле вы бы использовали их в формулах. Но формат упомянутых выше ссылок останется прежним.
Во многих случаях в названии листа, на который вы ссылаетесь, может быть несколько слов. Например, это могло быть Данные проекта или данные о продажах.
Если у вас есть пробелы или небуквенные символы (например, @,!, #, — и т. Д.), Вам нужно использовать имя в одинарных кавычках.
Например, если вы хотите сослаться на ячейку A1 на листе с названием «Данные о продажах», воспользуйтесь следующей ссылкой:
= "Данные о продажах"! A1
И в случае, если имя листа — Данные продаж, то для ссылки на ячейку A1 на этом листе вам необходимо использовать приведенную ниже ссылку:
= "Данные о продажах"! A1
Когда вы ссылаетесь на лист в той же книге, а затем меняете имя рабочего листа, вам не нужно беспокоиться о том, что ссылка сломается. Excel автоматически обновит эти ссылки для вас.
Хотя хорошо знать формат этих ссылок, на практике не стоит каждый раз вводить их вручную. Это займет много времени и может привести к ошибкам.
Позвольте мне показать вам лучший способ создания ссылок на ячейки в Excel.
Автоматическое создание ссылки на другой лист в той же книге
Намного лучший способ создать ссылку на ячейку на другой лист — просто указать Excel на ячейку / диапазон, на который вы хотите создать ссылку, и позволить Excel создать ее сам.
Это гарантирует, что вам не придется беспокоиться об отсутствии восклицательного знака или кавычек или о любых других проблемах с форматированием. Excel автоматически создаст для вас правильный справочник.
Ниже приведены шаги по автоматическому созданию ссылки на другой лист:
- Выберите ячейку в текущей книге, где вам нужна ссылка
- Введите формулу, пока вам не понадобится ссылка (или знак равенства, если вам просто нужна ссылка)
- Выберите лист, на который нужно сослаться
- Выберите ячейку / диапазон, на который вы хотите сослаться
- Нажмите Enter, чтобы получить результат формулы (или продолжайте работать с формулой)
Вышеупомянутые шаги автоматически создадут ссылку на ячейку / диапазон на другом листе. Вы также сможете увидеть эти ссылки в строке формул. Как только вы закончите, вы можете просто нажать клавишу ввода, и вы получите результат.
Например, если у вас есть данные в ячейке A1: A10 на листе с именем «Данные продаж», и вы хотите получить сумму этих значений на текущем листе, выполните следующие действия:
- Введите следующую формулу в текущем листе (где вам нужен результат): = Sum (
- Выберите лист «Данные о продажах».
- Выберите диапазон, который вы хотите добавить (A1: A10). Как только вы это сделаете, Excel автоматически создаст ссылку на этот диапазон (вы можете увидеть это в строке формул).
- Нажмите клавишу ввода.
Когда вы создаете длинную формулу, вам может потребоваться сослаться на ячейку или диапазон на другом листе, а затем вернуться к исходному листу и сослаться на некоторую ячейку / диапазон там.
Когда вы это сделаете, вы заметите, что Excel автоматически вставляет ссылку на лист, на котором у вас есть формула. Хотя это нормально и не вредит, но в этом нет необходимости. В таком случае вы можете сохранить ссылку или удалить ее вручную.
Еще одна вещь, которую вам нужно знать при создании ссылок путем выбора листа, а затем ячейки / диапазона, заключается в том, что Excel всегда будет создавать относительная ссылка (т.е. ссылки со знаком n0 $). Это означает, что если я скопирую и вставлю формулу (одну со ссылкой на другой лист) в какую-либо другую ячейку, она автоматически откорректирует ссылку.
Вот пример, объясняющий относительные ссылки.
Предположим, я использую следующую формулу в ячейке A1 текущего листа (для ссылки на ячейку A1 в имени листа SalesData)
= Данные о продажах! A1
Теперь, если я скопирую эту формулу и вставлю ее в ячейку A2, формула изменится на:
= Данные о продажах! A1
Это происходит потому, что формула является относительной, и когда я ее копирую и вставляю, ссылки автоматически корректируются.
Если я хочу, чтобы эта ссылка всегда ссылалась на ячейку A1 на листе SalesData, мне придется использовать следующую формулу:
= SalesData! $ A $ 1
Знак доллара перед номером строки и столбца блокирует эти ссылки, чтобы они не менялись.
Вот подробное руководство, в котором вы можете узнать больше об абсолютных, смешанных и относительных ссылках.
Теперь, когда мы рассмотрели, как ссылаться на другой лист в той же книге, давайте посмотрим, как мы можем ссылаться на другую книгу.
Когда вы ссылаетесь на ячейку или диапазон другой книги Excel, формат этой ссылки будет зависеть от того, открыта эта книга или закрыта.
И, конечно же, имя книги и рабочие листы также играют роль в определении формата (в зависимости от того, есть ли у вас в имени пробелы или небуквенные символы).
Итак, давайте посмотрим на различные форматы внешних ссылок на другую книгу в разных сценариях.
Внешняя ссылка на открытую книгу
Когда дело доходит до ссылки на внешнюю открытую книгу, вам необходимо указать имя книги, имя рабочего листа и адрес ячейки / диапазона.
Ниже приведен формат, который необходимо использовать при обращении к внешней открытой книге.
= '[FileName] SheetName! CellAddress
Предположим, у вас есть книга «ExampleFile.xlsx», и вы хотите сослаться на ячейку A1 в Sheet1 этой книги.
Ниже приведена ссылка на это:
= [ExampleFile.xlsx] SalesData! A1
Если в имени внешней книги или имени листа (или обоих) есть пробелы, вам нужно добавить имя файла (в квадратных скобках) и имя листа в одинарные кавычки.
Ниже приведены примеры, в которых имена должны быть заключены в одинарные кавычки:
= '[Example File.xlsx] SalesData'! A1 = '[ExampleFile.xlsx] Данные о продажах'! A1 = '[Пример файла.xlsx] Данные о продажах'! A1
Как создать ссылку на другую книгу (автоматически)
Опять же, хотя формат хорошо знать, лучше не вводить его вручную.
Вместо этого просто укажите Excel в правильном направлении, и он создаст для вас эти ссылки. Это намного быстрее и меньше шансов на ошибку.
Например, если у вас есть данные в ячейке A1: A10 в книге с именем «Файл примера» на листе с именем «Данные о продажах», и вы хотите получить сумму этих значений на текущем листе, выполните следующие действия. :
- Введите следующую формулу в текущем листе (где вам нужен результат): = Sum (
- Перейдите в книгу «Файл примера».
- Выберите лист «Данные о продажах».
- Выберите диапазон, который вы хотите добавить (A1: A10). Как только вы это сделаете, Excel автоматически создаст ссылку на этот диапазон (вы можете увидеть это в строке формул).
- Нажмите клавишу ввода.
Это мгновенно создаст формулу с правильными ссылками.
Одна вещь, которую вы заметите при создании ссылки на внешнюю книгу, — это то, что она всегда будет создавать абсолютные ссылки. Это означает, что перед номерами строк и столбцов стоит знак $. Это означает, что если вы скопируете и вставите эту формулу в другие ячейки, она будет продолжать ссылаться на тот же диапазон из-за абсолютной ссылки.
Если вы хотите это изменить, вам нужно изменить ссылки вручную.
Внешняя ссылка на закрытую книгу
Когда открыта внешняя книга и вы обращаетесь к ней, вам просто нужно указать имя файла, имя листа и адрес ячейки / диапазона.
Но когда он закрыт, Excel не знает, где искать ячейки / диапазон, на которые вы ссылались.
Вот почему, когда вы создаете ссылку на закрытую книгу, вам также необходимо указать путь к файлу.
Ниже приведена ссылка на ячейку A1 на листе Sheet1 в книге Example File. Поскольку этот файл не открыт, он также относится к месту, где файл сохранен.
= 'C: Users sumit Desktop [Example File.xlsx] Sheet1'! $ A $ 1
Приведенная выше ссылка состоит из следующих частей:
- Путь к файлу — место в вашей системе или сети, где находится внешний файл.
- Имя файла — имя внешней книги. Это также будет включать расширение файла.
- Имя листа — имя листа, в котором вы ссылаетесь на ячейки / диапазоны.
- Адрес ячейки / диапазона — точный адрес ячейки / диапазона, на который вы ссылаетесь.
Когда вы создаете внешнюю ссылку на открытую книгу, а затем закрываете ее, вы заметите, что ссылка автоматически изменяется. После закрытия внешней книги Excel автоматически вставляет ссылку на путь к файлу.
Влияние изменения расположения файла на ссылки
Когда вы создаете ссылку на ячейку / диапазон во внешнем файле Excel и затем закрываете его, ссылка теперь также использует путь к файлу.
Но затем, если вы измените расположение файла, в вашей книге (в которой вы создаете ссылку) ничего не изменится. Но поскольку вы изменили местоположение, ссылка теперь не работает.
Поэтому, если вы закроете и откроете эту книгу, она сообщит вам, что ссылка не работает, и вам нужно либо обновить ссылку, либо полностью разорвать ее. Он покажет вам подсказку, как показано ниже:
Когда вы нажмете «Обновить», отобразится еще одно приглашение, в котором вы можете выбрать параметры для редактирования ссылок (при этом появится диалоговое окно, показанное ниже).
Если вам нужно сохранить эти файлы связанными, вы можете указать новое местоположение файла, нажав «Обновить значения». Excel открывает для вас диалоговое окно, в котором вы можете указать новое расположение файла, перейдя туда и выбрав его.
Ссылка на определенное имя (в той же или внешней книге)
Когда вам нужно ссылаться на ячейки и диапазоны, лучший способ — создать определенные имена для диапазонов.
Это полезно, поскольку позволяет легко ссылаться на эти диапазоны, используя имя вместо длинного и сложного ссылочного адреса.
Например, проще использовать = SalesData вместо = [Example File.xlsx] Sheet1 ′! $ A $ 1: $ A $ 10.
И в случае, если вы использовали это определенное имя в нескольких формулах, и вам нужно изменить ссылку, вам нужно сделать это только один раз.
Вот шаги, чтобы создать именованный диапазон для диапазона ячеек:
- Выберите все ячейки, которые вы хотите включить в именованный диапазон.
- Перейдите на вкладку «Формулы».
- Нажмите на опцию Define Name (она находится в группе Defined Names)
- В диалоговом окне «Новое имя» дайте этому диапазону имя (в этом примере я использую имя SalesData). Помните, что в названии не должно быть пробелов
- Сохраните область действия как рабочую книгу (если у вас нет веских причин сделать ее на уровне листа)
- Убедитесь, что ссылка на диапазон верна.
- Щелкните ОК.
Теперь ваш именованный диапазон создан, и вы можете использовать его вместо ссылок на ячейки с адресами ячеек.
Например, если я хочу получить сумму всех этих ячеек в диапазоне SalesData, вы можете использовать следующую формулу:
= СУММ (SalesData)
А что, если вы хотите использовать этот именованный диапазон в других листах или даже в других книгах?
Ты можешь!
Вам просто нужно следовать тому же формату, который мы обсуждали в предыдущем разделе.
Нет необходимости возвращаться к началу этой статьи. Позвольте мне привести вам все примеры здесь, чтобы вы поняли идею.
Именованные диапазоны уровня рабочей книги и рабочего листа: Когда вы создаете именованный диапазон на уровне книги, может быть только один диапазон с таким именем. Поэтому, если вы ссылаетесь на него из внешних книг или листов в той же книге, вам не нужно указывать имя рабочего листа (поскольку оно доступно для использования во всей книге). Если вы используете именованный диапазон уровня рабочего листа, вы сможете использовать его только на рабочем листе, и при обращении к нему вам также нужно будет указать имя рабочего листа.
Ссылка на определенное имя на том же листе или в книге
Если вы создали определенное имя для уровня книги, вы можете использовать его в любом месте книги, просто используя само определенное имя.
Например, если я хочу получить сумму всех ячеек в созданном нами именованном диапазоне (SaledData), я могу использовать следующую формулу:
= СУММ (SaledData)
Если вы создали именованный диапазон на уровне листа, вы можете использовать эту формулу, только если именованный диапазон создан на том же листе, где вы используете формулу.
Если вы хотите использовать его на другом листе (скажем, Sheet2), вам нужно использовать следующую формулу:
= СУММ (Лист1! $ A $ 1: $ A $ 10)
А если в имени листа есть пробелы или буквенно-цифровые символы, вам придется заключить имя листа в одинарные кавычки.
= СУММ ('Лист 1'! $ A $ 1: $ A $ 10)
Ссылка на определенное имя в другой книге (открытой или закрытой)
Если вы хотите сослаться на именованный диапазон в другой книге, вам нужно будет указать имя книги, а затем имя диапазона.
Например, если у вас есть книга Excel с именем ExampleFile.xlsx и именованный диапазон с именем SalesData, вы можете использовать приведенную ниже формулу, чтобы получить сумму этого диапазона из другой книги:
= СУММ (ExampleFile.xlsx! SalesData)
Если в имени файла есть пробелы, их нужно заключить в одинарные кавычки.
= СУММ ('Пример File.xlsx'! SalesData)
Если у вас есть именованные диапазоны на уровне листа, вам необходимо указать имя книги, а также рабочий лист при ссылке на него из внешней книги.
Ниже приведен пример ссылки на именованный диапазон на уровне листа:
= СУММ ('[Пример файла.xlsx] Sheet1'! SalesData)
Как я уже упоминал выше, всегда лучше создавать именованные диапазоны на уровне книги, если только у вас нет веских причин для создания первого уровня таблицы.
Если вы ссылаетесь на именованный диапазон в закрытой книге, вам также необходимо указать путь к файлу. Ниже приведен пример этого:
= СУММ ('C: Users sumit Desktop Example File.xlsx'! SalesData)
Когда вы создаете ссылку на именованный диапазон в открытой книге, а затем закрываете книгу, Excel автоматически изменяет ссылку и добавляет путь к файлу.
Как создать ссылку на именованный диапазон
Если вы создаете и работаете с большим количеством именованных диапазонов, невозможно запомнить имя каждого из них.
Excel помогает вам, показывая вам список всех именованных диапазонов, которые вы создали, и позволяет вставлять их в формулы одним щелчком мыши.
Предположим, вы создали именованный диапазон SalesData, который хотите использовать в формуле для СУММИРОВАНИЯ всех значений в именованном диапазоне.
Вот как это сделать:
- Выберите ячейку, в которую вы хотите ввести формулу.
- Введите формулу до точки, в которую нужно вставить именованный диапазон.
- Нажмите клавишу F3 на клавиатуре. Откроется диалоговое окно «Вставить имя» со списком всех созданных вами имен.
- Дважды щелкните имя, которое хотите вставить.
Приведенные выше шаги вставят имя в формулу, и вы сможете продолжить работу с формулой.
Примечание. Этот метод работает только для диапазонов имен в одной книге. Если вы хотите получить имена во внешней книге, вам нужно будет пойти туда, проверить имя с помощью диалогового окна «Вставить имя», а затем вернуться и использовать его в своей формуле (в правильном формате с использованием имени файла).
Это все, что вам нужно знать о том, как ссылаться на другие листы или книги и как создать внешнюю ссылку в Excel.
Надеюсь, вы нашли этот урок полезным.