Excel. Как сделать гиперссылку "Назад"

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

День добрый!
Есть задача.
На листе1 есть гиперссылка "Перейти" на лист3
И на листе2 есть гиперссылка "Перейти" на лист3

На листе3 надо сделать гиперссылку "Назад" таким образом, чтобы при нажатии на нее мы возвращались на тот лист (1 или 2), с которого только что вызывали гиперссылку "Перейти" на лист3.

Желательно без макросов.
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

без макросов наверно не получиться запиши например как действует кнопка назад с веб панели
ака хинт: коментируйте код, самим же легче будет разобраться ;)
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Желательно без макросов
Вряд ли получится...

А с макросами - без проблем: (проверено в Excel 2003)

Код: Выделить всё

Private Sub [B]Workbook_SheetFollowHyperlink[/B](ByVal Sh As Object, ByVal Target As Hyperlink)
    StartCell = Target.Range.Address(, , , True)
    If InStr(1, Target.SubAddress, "[B]Лист3[/B]" & "!") Then
        With Range(Target.SubAddress)
            .Hyperlinks.Delete
            .Parent.Hyperlinks.Add .Cells(1), "", StartCell, "Назад"
        End With
    End If
End Sub
Аналогично можно отловить событие перехода обратно (с Листа3 на Лист2 или Лист1), и удалить / изменить созданную (или все) гиперссылки на Листе3
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

При переходе по гиперссылке сам Excel использует

Application.Goto(Reference,true)

А это значит, чот текущее выделение должно помещаться в коллекцию

Application.PreviousSelections(Index)

Так что туда переходите без макросов, а обратно уже макросом, но просто на первый элемент коллеции PreviousSelections, если таковой существует. Т.е. что-то типа

On Error Resume Next
Application.Goto(Application.PreviousSelections(1))

Как-то так...
Надо пробовать...
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Спасибо всем за ответы,
пришел к такому варианту...

для листов 1 и 2 пишем код:

Код: Выделить всё

 
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
 
ActiveWorkbook.Names.Add Name:="Name_r1", RefersToR1C1:=Target.Range
 
End Sub

на листе 3 делаем ссылку на диапазон с именем "Name_r1".

Было бы здорово при создании гиперссылки
и указании места в документе была возможность поставить галочку - "автоматически возвращаться на место последнего перехода" :)
Ответить