Сделать ссылку на лист excel vba

Обновлено: 16.05.2024

В 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. Заполните Лист1, Лист2 и Лист3 так как показано выше на рисунке.
  2. Перейдите на Лист4, ячейка B2.
  3. Поставьте знак «=» и перейдите на Лист1 чтобы там щелкнуть левой клавишей мышки по ячейке B2.
  4. Поставьте знак «+» и повторите те же действия предыдущего пункта, но только на Лист2, а потом и Лист3.
  5. Когда формула будет иметь следующий вид: =Лист1!B2+Лист2!B2+Лист3!B2, нажмите Enter. Результат должен получиться такой же, как на рисунке.

Как сделать ссылку на лист в Excel?

Ссылка на лист немного отличается от традиционной ссылки. Она состоит из 3-х элементов:

  1. Имя листа.
  2. Знак восклицания (служит как разделитель и помогает визуально определить, к какому листу принадлежит адрес ячейки).
  3. Адрес на ячейку в этом же листе.

Примечание. Ссылки на листы можно вводить и вручную они будут работать одинаково. Просто у выше описанном примере меньше вероятность допустить синтактическую ошибку, из-за которой формула не будет работать.

Ссылка на лист в другой книге Excel

Ссылка на лист в другой книге имеет уже 5 элементов. Выглядит она следующим образом: ='C:\Docs\[Отчет.xlsx]Лист1'!B2.

Описание элементов ссылки на другую книгу Excel:

  1. Путь к файлу книги (после знака = открывается апостроф).
  2. Имя файла книги (имя файла взято в квадратные скобки).
  3. Имя листа этой книги (после имени закрывается апостроф).
  4. Знак восклицания.
  5. Ссылка на ячейку или диапазон ячеек.

Данную ссылку следует читать так:

  • книга расположена на диске C:\ в папке Docs;
  • имя файла книги «Отчет» с расширением «.xlsx»;
  • на «Лист1» в ячейке B2 находится значение на которое ссылается формула или функция.

Полезный совет . Если файл книги поврежден, а нужно достать из него данные, можно вручную прописать путь к ячейкам относительными ссылками и скопировать их на весь лист новой книги. В 90% случаях это работает.

Без функций и формул Excel был бы одной большой таблицей предназначенной для ручного заполнения данными. Благодаря функциям и формулам он является мощным вычислительным инструментом. А полученные результаты, динамически представляет в желаемом виде (если нужно даже в графическом).

Читайте также: