Сделать ссылку на лист excel vba
В Word ниже объекта Application и Document начинались уже объекты непосредственно для работы с текстом — Selection, Range и т.п. В Excel между объектом рабочей книги и ячейками есть еще один промежуточный объект — объект Worksheet (лист). Объекты Worksheet в книге объединены в коллекцию Sheets.
Чаще всего для ввода данных в Excel (напрямую или из базы данных) нам потребуется в первую очередь определиться с листом, на который пойдет ввод данных — либо просто выбрать его, либо вначале создать, а потом выбрать.
Процесс создания выглядит очень просто:
Dim oExcel As New Excel.Application 'Запускаем Excel
oExcel.Visible = True 'Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add () 'Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Add() ' Создаем новый лист
oSheet.Name = "Новый лист" 'Присваиваем ему имя "Новый лист"
Метод Add() для коллекции Worksheets принимает несколько необязательных параметров, главная задача которых — определить, между какими существующими листами будет вставлен новый лист. Если ничего не указывать, то новый лист будет помещен самым первым.
Часто встречается и другая задача — просто найти нужный лист среди листов книги, например, если мы открыли существующую книгу. Сделать это очень просто, поскольку коллекция Worksheets умеет работать с именами листов. Ниже приведен пример, в котором мы так же запускаем Excel и создаем новую книгу, но при этом находим лист с именем "Лист1" и переименовываем его в "Новый лист":
Dim oExcel As New Excel.Application 'Запускаем Excel
oExcel.Visible = True 'Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add() 'Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Item("Лист 1") ' Находим Лист1
oSheet.Name = "Новый лист" 'Присваиваем ему имя "Новый лист"
Обратите внимание, что в английской версии Excel этот код, скорее всего, не пройдет, поскольку листы там по умолчанию называются "Sheet1", "Sheet2" и т.п. Если вы в вашем коде используете имена листов по умолчанию и при этом вашей программе придется работать на компьютерах с разноязычными версиями Excel, обязательно предусмотрите дополнительные проверки или просто используйте номера листов вместо их имен.
У коллекции Sheets, помимо привычных нам свойств и методов ( Count, Item, Add(), Delete()) и свойств и методов, которые удобнее применять для объекта Worksheet ( Visible(), Copy(), Move(), PrintOut(), PrintPreview(), Select()) — поскольку все равно указывать конкретный лист — есть и один специфический метод FillAcrossSheets() — скопировать объект диапазона Range (варианты: полностью, только содержимое, только оформление) во все листы данной книги.
У объекта Worksheet — множество важных свойств и методов:
- Cells — одно из наиболее часто используемых свойств объекта Worksheet. Работает точно так же, как и рассмотренное выше одноименное свойство объекта Application — за исключением того, что вам больше не нужно ограничиваться только активным листом. Аналогично работают свойства Columns и Rows.
- EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге.
- EnableSelection — возможность запретить выделять на листе: все, ничего не запрещать, или разрешить выделять только незаблокированные ячейки.
- Next — возможность получить ссылку на следующий лист в книге. Previous — то же самое для предыдущего листа.
- PageSetup — как и в Word, возможность получить объект PageSetup, при помощи которого можно настроить те же параметры, что и через меню Файл -> Параметры страницы.
- свойство Protection позволяет получить объект Protection, при помощи которого можно запретить пользователю вносить изменения в лист Excel. Настройке параметров защиты также служат и другие свойства, названия которых начинаются на Protection.
- QueryTables — исключительно важное свойство. Оно возвращает коллекцию QueryTables — набор объектов QueryTable, которые, в свою очередь, представляют данные, полученные из внешних источников (как правило, из баз данных).
- Range — самое важное свойство объекта Worksheet. Возвращает объект Range (диапазон ячеек), который в объектной модели Excel занимает примерно такое же место, что и одноименный объект в объектной модели Word. Этот объект будет рассматриваться ниже.
- Type — возможность определить тип данного листа. Обычно используются два типа: xlWorksheet (обычный лист) и xlChart (диаграмма).
- UsedRange — возвращает объект Range, представляющий собой прямоугольную область, включающую все непустые ячейки. Удобно для целей копирования или форматирования.
- Visible — возможность спрятать лист с глаз пользователя (например, если он используется для служебных целей).
Некоторые важные методы объекта Worksheet:
- методы Activate() , Calculate(), Copy(), Paste(), Delete(), Move(), Evaluate(), Select(), SaveAs(), PrintOut(), PrintPreview(), Protect(), Unprotect()нам уже знакомы . Отличие заключается только в том, что теперь эти методы могут применяться для выбранного вами листа.
- метод PivotTables() возвращает коллекцию очень интересных объектов PivotTable (сводная таблица), которые будут рассматриваться ниже;
- метод Scenarios() возвращает коллекцию Scenarios, состоящую из объектов Scenario (сценарии). Сценарии — это именованные наборы вводных данных, которые можно использовать для проверки различных сценариев (разные суммы продаж, уровни налогов, расходов и т.п.)
- SetBackgroundPicture() — возможность назначить листу фоновое изображение (естественно, желательно, чтобы оно было полупрозрачное — "водяной знак", иначе на его фоне будет трудно читать текст в ячейках).
- ShowAllData() — показать все скрытые и отфильтрованные данные на листе.
Самое важное событие объекта Worksheet — это, конечно, Change. Существует множество практических задач, когда изменение пользователем значения ячейки должно приводить к изменению значения в ячейке другого листа/рабочей книги Excel или даже в базе данных. Другая ситуация, в которой используется это события — сложная проверка вводимого пользователем значения (например, опять-таки через обращение к базе данных). Эта событийная процедура работает со специальным параметром Target — то есть объектом Range, представляющим изменившуюся ячейку. При помощи свойств и методов объекта Range вы можете получить информацию об изменившемся значении, столбце и строке, в котором произошло изменение и т.п.
Сегодня речь пойдёт о гиперссылках в Excel, точнее об их автоматической вставке на лист. Представим ситуацию, когда в нашей книге листов огромное количество, бухгалтерские расчёты, к примеру.
Вставить вручную гиперссылки можно, пусть для этого и понадобится чуть больше времени. Обычно мы вставляем гиперссылки через вкладку «Вставка» и кнопку «Гиперссылка», а затем переходим на пункт «Место в документе».
Видите, уже сложнее. Проделать такую операцию с точки зрения лени времени будет слишком затратно. Поэтому напишем небольшой макрос.
Вставим в наш документ новый модуль:
- Вкладка «Разработчик», блок кнопок «Код», кнопка «Visual Basic»;
- Далее «Insert» — > «Module».
Поместим в поле кода следующий текст:
Sub SheetNamesAsHyperLinks()
Dim sheet As Worksheet
Dim cell As Range
With ActiveWorkbook
‘ Для каждого листа (имени) создадим свою ссылку
For Each sheet In ActiveWorkbook.Worksheets
Set cell = Worksheets(1).Cells(sheet.Index, 1)
.Worksheets(1).Hyperlinks.Add Anchor:=cell, Address:=»», _
SubAddress:=» » & sheet.Name & «!A1»
cell.Formula = sheet.Name
Next
End With
End Sub
- у нас есть две переменные «sheet» и «cell», лист и ячейка;
- «With activeWorkbook» — показывает, что макрос будет оперировать пространством всей книги;
- «For Each sheet In ActiveWorkbook.Worksheets
Set cell = Worksheets(1).Cells(sheet.Index, 1)
.Worksheets(1).Hyperlinks.Add Anchor:=cell, Address:=»», _
SubAddress:=» » & sheet.Name & «!A1» « » — для каждого листа в рабочей книге мы будем использовать первую ячейку (А1); - «cell.Formula = sheet.Name» — формула для макроса будет помещение в ячейку A1 названия первого листа книги, далее в A2 второго и т.д.
Таким образом, мы экономим себе время на переходах, так как не отвлекаемся на нижнюю часть экрана с именами листов, а имеем список листов в виде гиперссылок. Понаблюдаем за результатами работы. Нажимаем сочетание клавиш ALT+F8 или переходим на вкладку «Разработчик», нажимаем кнопку «Макросы», у нас единственная строка « SheetNamesAsHyperLinks», нажимаем «Выполнить».
На листе «Оглавление» появится список всех существующих листов в нашей рабочей книге.
Теперь мы можем просто щёлкать ячейку с именем листа для перехода.
Если что-то было непонятно, посмотрите наше видео!
По-моему, в Excel листы имеют не только имена, но и номера. Ими воспользоваться не удается?
Сам я ими никогда не пользовался и готовых решений пока нет.
По-моему, в Excel листы имеют не только имена, но и номера. Ими воспользоваться не удается?
Сам я ими никогда не пользовался и готовых решений пока нет.
Однако пробовал я с номерами листов, но просто формат ActiveSheet.Hyperlinks.Add SubAddress:="Имя_Листа!Имя_Ячейки" сам по себе предусматривает использование имя листа, а используя номер он добавлять-то ее добавляет, но при клике на нее грит: "Неверная ссылка" :((( Может можно добавить какой-нить другой командой?!
Однако пробовал я с номерами листов, но просто формат ActiveSheet.Hyperlinks.Add SubAddress:="Имя_Листа!Имя_Ячейки" сам по себе предусматривает использование имя листа, а используя номер он добавлять-то ее добавляет, но при клике на нее грит: "Неверная ссылка" :((( Может можно добавить какой-нить другой командой?!
Я так понял, что вся проблема в том, чтобы получить в программе имя листа. Как это сделать, зависит от того, как именно ты определяешь тот лист, на который ссылка. Если по номеру в книге (от левого края), то Worksheets(2).Name, например, возвращает имя второго листа. Если у тебя есть ссылка на ячейку с этого листа (объектная переменная, например, d), то имя содержащего ее листа надо получать при помощи d.Parent.Name
Если у тебя есть в книге конкретный лист, но юзер может его переименовать или переставить в другое место, то делай так: у каждого листа помимо Excel-имени (.Name) есть еще VisualBasic-имя (.CodeName)
Его можно менять только в окне VBA. Выбираешь для него какое-нибудь имя, например, "MyList", называешь соответственно в окне VBA, и потом при помощи MyList.Name получаешь то имя, которое он носит в данный момент в Excel.
Если ничего из вышесказанного тебе не подходит, объясни на какой лист ты хочешь сделать ссылку (в смысле, как определить что это за лист)
Я так понял, что вся проблема в том, чтобы получить в программе имя листа. Как это сделать, зависит от того, как именно ты определяешь тот лист, на который ссылка. Если по номеру в книге (от левого края), то Worksheets(2).Name, например, возвращает имя второго листа. Если у тебя есть ссылка на ячейку с этого листа (объектная переменная, например, d), то имя содержащего ее листа надо получать при помощи d.Parent.Name
Если у тебя есть в книге конкретный лист, но юзер может его переименовать или переставить в другое место, то делай так: у каждого листа помимо Excel-имени (.Name) есть еще VisualBasic-имя (.CodeName)
Его можно менять только в окне VBA. Выбираешь для него какое-нибудь имя, например, "MyList", называешь соответственно в окне VBA, и потом при помощи MyList.Name получаешь то имя, которое он носит в данный момент в Excel.
Если ничего из вышесказанного тебе не подходит, объясни на какой лист ты хочешь сделать ссылку (в смысле, как определить что это за лист)
В общем, задача поставлена так:
Есть книга, в которой отдельный лист - это контракт, который добавляется только по нажатию моей кнопки - шаблон будущего контракта (иначе добавить нельзя, т.к. книга защищена);
Затем в шаблон вводится наименование компании и контракта, нажимается кнопка "Переименовать лист" - имени листа присваивается имя контракта;
Имя компании и имя контракта выносится на лист "Содержание" (для удобства навигации по базе)
И САМОЕ СТРАШНОЕ (шутка конечно ;): При появлении нового контракта я ручками прописываю ссылку на лист в "Содержании".
На всех предыдущих уроках формулы и функции ссылались в пределах одного листа. Сейчас немного расширим возможности их ссылок.
Excel позволяет делать ссылки в формулах и функциях на другие листы и даже книги. Можно сделать ссылку на данные отдельного файла. Кстати в такой способ можно восстановить данные из поврежденного файла xls.
Ссылка на лист в формуле Excel
Доходы за январь, февраль и март введите на трех отдельных листах. Потом на четвертом листе в ячейке B2 просуммируйте их.
Возникает вопрос: как сделать ссылку на другой лист в Excel? Для реализации данной задачи делаем следующее:
- Заполните Лист1, Лист2 и Лист3 так как показано выше на рисунке.
- Перейдите на Лист4, ячейка B2.
- Поставьте знак «=» и перейдите на Лист1 чтобы там щелкнуть левой клавишей мышки по ячейке B2.
- Поставьте знак «+» и повторите те же действия предыдущего пункта, но только на Лист2, а потом и Лист3.
- Когда формула будет иметь следующий вид: =Лист1!B2+Лист2!B2+Лист3!B2, нажмите Enter. Результат должен получиться такой же, как на рисунке.
Как сделать ссылку на лист в Excel?
Ссылка на лист немного отличается от традиционной ссылки. Она состоит из 3-х элементов:
- Имя листа.
- Знак восклицания (служит как разделитель и помогает визуально определить, к какому листу принадлежит адрес ячейки).
- Адрес на ячейку в этом же листе.
Примечание. Ссылки на листы можно вводить и вручную они будут работать одинаково. Просто у выше описанном примере меньше вероятность допустить синтактическую ошибку, из-за которой формула не будет работать.
Ссылка на лист в другой книге Excel
Ссылка на лист в другой книге имеет уже 5 элементов. Выглядит она следующим образом: ='C:\Docs\[Отчет.xlsx]Лист1'!B2.
Описание элементов ссылки на другую книгу Excel:
- Путь к файлу книги (после знака = открывается апостроф).
- Имя файла книги (имя файла взято в квадратные скобки).
- Имя листа этой книги (после имени закрывается апостроф).
- Знак восклицания.
- Ссылка на ячейку или диапазон ячеек.
Данную ссылку следует читать так:
- книга расположена на диске C:\ в папке Docs;
- имя файла книги «Отчет» с расширением «.xlsx»;
- на «Лист1» в ячейке B2 находится значение на которое ссылается формула или функция.
Полезный совет . Если файл книги поврежден, а нужно достать из него данные, можно вручную прописать путь к ячейкам относительными ссылками и скопировать их на весь лист новой книги. В 90% случаях это работает.
Без функций и формул Excel был бы одной большой таблицей предназначенной для ручного заполнения данными. Благодаря функциям и формулам он является мощным вычислительным инструментом. А полученные результаты, динамически представляет в желаемом виде (если нужно даже в графическом).
Читайте также: