Макрос ссылка на другой лист в excel

Если в макросе не указано слева ничего, то обращение идет к подобъекту активного объекта. Например,

Код
Cells(Rows.Count, 2).End(xlUp).Row

В этом случае обращение идет к ячейкам. Они — подобъект листа. Значит, обращение пойдет к ячейкам активного листа. Чтобы обратиться к ячейкам листа, который не является активным, то нужно указать его явно:

Код
Sheets("имя Вашего листа").Cells(Rows.Count, 2).End(xlUp).Row

Чтобы укоротить запись можно вставить блок With. У Вас он использован. Внутри этого блока ко всему, что начинается с точки, применяется тот объект, который в строке с With.
Переменным можно присваивать объекты. В приведенном Вами макросе это тоже использовано, тогда можно обращаться к ячейкам неактивного листа еще и так:

Можно работать и с неактивной в данный момент книгой:

Код
Workbooks("Имя Вашей книги").Sheets("имя Вашего листа").Cells(15, 2)

Обращение с явным указанием возможно и для активного объекта…

Добрый день.
в VBA не силен, поэтому обращаюсь к вам.
У меня есть макрос который делает фигуру прозрачной по значению в ячейке.
Мне необходимо чтоб название фигуры и значение находились на другом листе,
ну допустим Лист2 ячейка F10.
Соответственно в макросе должна быть ссылка на конкретный лист и ячейку.
К сожалению сделать самому не получилось подскажите вы пожалуйста.
Пример кода.
[vba]

Код

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
lr = Cells(Rows.Count, 2).End(xlUp).Row
arr = Range(Cells(10, 1), Cells(lr, 3)).Value
For Each Shape In ActiveSheet.Shapes
    For i = 1 To UBound(arr)
         If Shape.Name = arr(i, 1) Then
            If arr(i, 2) = 1 Then Shape.Fill.Transparency = 1
            If arr(i, 2) = 2 Then Shape.Fill.Transparency = 0
         End If
    Next
Next
End Sub

[/vba]

Создание гиперссылки в VBA Excel методом Hyperlinks.Add для перехода на другой лист, на интернет-сайт, для открытия любого файла в программе по умолчанию.

Hyperlinks.Add — это метод, который добавляет новую гиперссылку к указанному объекту Range (диапазону, ячейке) или объекту Shape (фигуре).

Синтаксис

Expression.Add (Anchor, Address, SubAddress, ScreenTip, TextToDisplay)

Expression — выражение (переменная), возвращающее объект Hyperlinks.

Параметры

Параметр Описание
Anchor Объект Range или объект Shape, к которому привязывается (добавляется) новая гиперссылка. Обязательный параметр. Тип данных — Object.
Address Адрес гиперссылки. Обязательный параметр. Тип данных — String.
SubAddress Субадрес гиперссылки. Необязательный параметр. Тип данных — Variant.
ScreenTip Всплывающая подсказка, отображаемая при наведении указателя мыши на текст гиперссылки. Необязательный параметр. Тип данных — Variant.
TextToDisplay Текст гиперссылки. Необязательный параметр. Тип данных — Variant.

Если текст гиперссылки (TextToDisplay) не указан, будет отображен текст параметров Address и SubAddress.

Создание гиперссылки на рабочий лист другой книги:

ActiveSheet.Hyperlinks.Add Anchor:=Range(«A4»), Address:=«C:UsersEvgeniyDesktopКнига2.xlsx», _

    SubAddress:=«Лист3!D5», ScreenTip:=«Гиперссылка на Лист3!D5 в Книга2», TextToDisplay:=«Книга2 — Лист3!D5»

Создание гиперссылки на другой лист текущей книги:

ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=«», _

    SubAddress:=«Лист4!D6», TextToDisplay:=«Эта книга — Лист4!D6»

Создание гиперссылки на другую ячейку того же листа:

Worksheets(«Лист1»).Hyperlinks.Add Anchor:=Range(«A1»), Address:=«», _

    SubAddress:=«Лист1!D6», TextToDisplay:=«Перейти к D6»

Создание гиперссылки на документ Word:

ActiveSheet.Hyperlinks.Add Anchor:=Range(«A1»), Address:=«C:UsersEvgeniyDocumentsДокумент 1.docx», _

    TextToDisplay:=«Ссылка на Документ 1»

Создание гиперссылки на точечный рисунок:

ActiveSheet.Hyperlinks.Add Anchor:=Range(«A1»), Address:=«C:UsersEvgeniyDocumentsРисунок 1.bmp», _

    TextToDisplay:=«Ссылка на Рисунок 1»

Пример добавления гиперссылки на рубрику «VBA Excel» сайта «Время не ждёт»:

ActiveSheet.Hyperlinks.Add Anchor:=Range(«A1»), Address:=«https://vremya-ne-zhdet.ru/category/vba-excel/», _

    TextToDisplay:=«Рубрика VBA Excel»

Поиск первой ячейки с гиперссылкой в заданном диапазоне:

Sub Primer()

Dim myRange As Range, n As Integer, i As Integer, s As String

‘Задаем диапазон поиска

Set myRange = Range(«A1:G10»)

‘Вычисляем количество ячеек в заданном диапазоне

n = myRange.Cells.Count

‘Ищем первую ячейку с гиперссылкой

    For i = 1 To n

        If myRange.Cells(i).Hyperlinks.Count > 0 Then

            s = myRange.Cells(i).Address

            Exit For

        End If

    Next

MsgBox s

End Sub

Для поиска последней ячейки с гиперссылкой в заданном диапазоне следует заменить строку
For i = 1 To n
на
For i = n To 1 Step -1.


Привет, Народ!
У меня совсем нет опыта в написании макросов, поэтому прошу помощи.
Ситуация следующая: у меня есть книга Excel с несколькими листами. На одном из листов есть табличка с исходными данными, к ней написан (путем записи макроса) макрос, который автообновляет данные в табличке (получает их из интернета) и форматирует их так, как мне нужно.
При создании командной кнопки (к который я этот амкрос привязываю) на другом листе книги, макрос работать отказывается и в ошибке указывает вторую строчку, в которой указан диапазон моей таблички.
Вопрос: как оптимизировать код макроса, чтобы по нажатию кнопки, созданной на любом листе этой книги он запускался именно на нужном, с исходной табличкой?
И еще вопрос: как сделать, чтобы вышеуказанный макрос работал в фоновом режиме по моему нажатию на кнопку (т.е. без видимого перехода на лист с исходной табличкой, если я напрмер работаю в другом листе) и выдавал всплывающее сообщение, что работа макроса закончена?


Путей к вершине — множество. Этот один из многих!


Цитата: GWolf от 25.03.2009, 11:09
А эту книжку вы не могли бы выложить ;)

Вот пример книги, в приложенном файле. В ней (книге) две страницы: «Титульный лист» и «Исходные данные».
Записан макрос (Котировки_получение_и_обработка), который работает по нажатию на кнопку «Обновить» на странице «Исходные данные», и не работает по нажатию кнопки «Кнопка1» на странице «Титульный лист».
Хотелось бы, чтобы макрос действовал по нажатию на кнопку на любой из страниц книги. А также — см. мой первый пост :-)


Путей к вершине — множество. Этот один из многих!


Надеюсь GWolf не обидется, что я «встрял» :)

ultravirus,
Во-первых, не используйте Select в Вашем макросе, т.е. замените строки

Range("C2:O2").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone

на:


with Range("C2:O2")
      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

и второе,
что бы обращение было к конкретному листу конкретной книги используйте абсолютную ссылку, т.е.
конкретную книгу — Workbooks(«Пример.xls») и конкретный лист — Worksheets(«Исходные данные»)

with Workbooks("Пример.xls").Worksheets("Исходные данные").Range("C2:O2")
      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

и всё наладится ;)

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


Цитата: boa от 26.03.2009, 00:09
Надеюсь GWolf не обидется, что я «встрял» :)

ultravirus,
Во-первых, не используйте Select в Вашем макросе, т.е. замените строки

Range("C2:O2").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone

на:

with Range("C2:O2")
      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

и второе,
что бы обращение было к конкретному листу конкретной книги используйте абсолютную ссылку, т.е.
конкретную книгу — Workbooks(«Пример.xls») и конкретный лист — Worksheets(«Исходные данные»)
with Workbooks("Пример.xls").Worksheets("Исходные данные").Range("C2:O2")
      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

и всё наладится ;)

необижусь абсолютно …

with Workbooks(«Пример.xls»).Worksheets(«Исходные данные»)
      .Range(«C2:O2»)’ — что дает такая запись, в отличии от предложенной boa? См. Прим.

      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

Прим.

В пределах With … End with теперь можно указывать через точку, любой диапазон принадлежащий книге и (или, если в With указан только лист) листу указанному в With

И еще:

— если Вам нужно задать на выполнение макросом заранее неизвестный диапазон, так научите макрос его (этот диапазон) определять! Например, так:

Sub Proba()
    Dim nRwEnd As Long ' - для занятых строк
    Dim nClEnd As Long ' - для занятых столбцов

    With ThisWorkbook.ActiveSheet
        nRwEnd = .Cells(1, 1).CurrentRegion.Rows.Count
        nClEnd = .Cells(1, 1).CurrentRegion.Columns.Count
    End With
End Sub

Путей к вершине — множество. Этот один из многих!


Сделал все как написано выше — не получается так, чтобы при нажатии на кнопку на другом листе, макрос работал бы на заданном :-(

При нажатии на кнопку выводится сообщение от VBA: «Run-time error ‘1004’: Application-defined or object-defined error» и при нажатии в сообщении на кнопку Debug выводит ошибку на первую же строку исполняемого кода макроса:

    Selection.QueryTable.Refresh BackgroundQuery:=False

Что делать????


Вот что написано в справке:

The following example creates a connection to a SharePoint site and publishes the ListObject object named List1 to the server. A reference to the QueryTable object for the list object is created and the MaintainConnection property of the QueryTable object is set to True so that the connection to the SharePoint site is maintained between trips to the server.

(Следующий пример создает подключение с сайтом SharePoint и издает объект ListObject по имени List1 на сервер. Справочная информация на объект QueryTable для объекта списка создана, и MaintainConnection <xlproMaintainConnection.htm> свойство объекта QueryTable установлен в Истину так, чтобы подключение с сайтом SharePoint было поддержано между поездками в сервер.)

      Dim wrksht As Worksheet
   Dim objListObj As ListObject
   Dim objQryTbl As QueryTable
   Dim prpQryProp As pro
   Dim arTarget(4) As String
   Dim strSTSConnection As String

      Set wrksht = ActiveWorkbook.Worksheets(«Sheet1»)
   Set objListObj = wrksht.ListObjects(1)

      arTarget(0) = «0»
   arTarget(1) = «http://myteam/project1»
   arTarget(2) = «1»
   arTarget(3) = «List1»

      strSTSConnection = objListObj.Publish(arTarget, True)

      Set objQryTbl = objListObj.QueryTable

      objQryTbl.MaintainConnection = True

может в этом проблема — объект незадан явно?
Я с объектом QueryTable не работал. Небыло таких задач.

Путей к вершине — множество. Этот один из многих!


Я не большой спец. Но я обычно создаю переменную типа Range и потом пользуюсь оператором Set. Можно и к другой странице, и к другой книге…


Так… Насчет кнопки на другой странице разобрался — нужно было все лишь вставить строку
   Worksheets(«Лист с таблицей»).Activate
в начало кода, и строку
   Worksheets(«Титульный лист»).Activate
(названия введены для простоты понятия о чем говорю).
Однако теперь встает другой вопрос — как заставить макрос работать в фоновом режиме, чтобы в фоне по нажатию кнопки происходила работа макроса, но без активного прыгания по страничкам?

Может, кто-то знает?


Цитата: ultravirus от 26.03.2009, 15:28
Однако теперь встает другой вопрос — как заставить макрос работать в фоновом режиме, чтобы в фоне по нажатию кнопки происходила работа макроса, но без активного прыгания по страничкам?

Может, кто-то знает?

в начале:
    Application.ScreenUpdating = False
Ваш код
    Application.ScreenUpdating = True
в конце

Путей к вершине — множество. Этот один из многих!


Ур-р-р-р-я-а-а-а-а!!!!!! Заработало!!!! Спасибо всем откликнувшимся и не совсем  :D


Рад! Чертовски рад!

P.S. Как предложение: выкладывать те решения, которые «заработали»! Может кому еще пригодится! Но это только предложение.

Путей к вершине — множество. Этот один из многих!


Вставка гиперссылок на листы в Excel макрос

Добрый день уважаемые читатели блога! После небольшого перерыва возобновляю работу по Excel. Вопросов накопилось довольно много — буду отвечать на них по очереди. 

Сегодня речь пойдёт о гиперссылках в Excel, точнее об их автоматической вставке на лист. Представим ситуацию, когда в нашей книге листов огромное количество, бухгалтерские расчёты, к примеру. 

Вставка гиперссылок на листы в Excel макрос

Вставить вручную гиперссылки можно, пусть для этого и понадобится чуть больше времени. Обычно мы вставляем гиперссылки через вкладку «Вставка» и кнопку «Гиперссылка», а затем переходим на пункт «Место в документе».

Вставка гиперссылок на листы в Excel макрос

Видите, уже сложнее. Проделать такую операцию с точки зрения лени времени будет слишком затратно.  Поэтому напишем небольшой макрос. 

Вставим в наш документ новый модуль:

  1. Вкладка «Разработчик», блок кнопок «Код», кнопка «Visual Basic»;
  2. Далее «Insert» — > «Module».

Вставка гиперссылок на листы в Excel макрос

Поместим в поле кода следующий текст:

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 макрос

Теперь мы можем просто щёлкать ячейку с именем листа для перехода. 

Если что-то было непонятно, посмотрите наше видео!

Вас может заинтересовать урок — Поменять строки местами.

Понравилась статья? Поделить с друзьями:
  • Макрос среднее значение в excel макрос
  • Макрос сравнение по двум столбцам excel
  • Макрос сравнение двух таблиц в excel на совпадение
  • Макрос сохраняющий все файлы excel
  • Макрос сохранить как формат excel