Добрый день! Есть отчет на 3 листа, один из них сводный. На первом и втором листе сделаны гиперссылки на итоговую таблицу и зашит простой макрос на фильрацию:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) ActiveSheet.Range("ФП").AutoFilter 16, Target.TextToDisplay End Sub
Но макрос отрабатывает криво. При переходе с гиперссылки всегда фильтрует по первому значению с листа, а не по тому значению с которого переходим. Подскажите, пожалуйста, кто-то с таким сталкивался? Ничего похожего здесь не могу найти
написал: - Debug.Print Target.TextToDisplayподсказывает что это
Да! При нажатии на любую строку всегда фильтрует "Совтемеррмя школм", если в первой строке убрать ссылку. То будет всегда фильтровать по второй:(((( можно ли с этим что-то сделать
Откуда берутся эти ссылки? Нужно переделывать источник. Или макрос события. Я сейчас вижу что если удалить первую ссылку (которая на втором листе на P5) то исчезают все ссылки. И сейчас у всех этих ячеек Target As Hyperlink один и тот же, поэтому и работают все одинаково. А привязки к тексту ячейки в этом коде нет.
написал: Откуда берутся эти ссылки? Нужно переделывать источник. Или макрос события.
Т.е. мне нужно поправить макрос. Спасибо большое! Я начинающий пользователь макросов, нашла готовый и применила. А ссылки я вставляла: выделила всю область строк-ссылка-вставка гиперссылки-P5 листа 2
Ну вот поэтому все и фильтруют одинаково, по одной ссылке. Делайте каждую ссылку индивидуально, на ячейку с этим значением - будет фильтровать по этому значению. Вручную конечно гемор, но можно тоже макрос соорудить для этого дела.
anna_bella_valentina, вот макрос для гиперссылок второго листа - когда значения уже есть:
Скрытый текст
Код
Sub tt()
Dim i&, r
Set r = Sheets("Полный список").[P4].CurrentRegion
With CreateObject("Scripting.Dictionary")
For i = 2 To r.Rows.Count
If Not .exists(r(i).Value) Then .Item(r(i).Value) = r(i).Address
Next
Set r = Sheets("2").[A2].CurrentRegion
For i = 2 To r.Rows.Count
If r(i).Hyperlinks.Count > 0 Then r(i).Hyperlinks().Delete
r(i).Hyperlinks.Add Anchor:=r(i), Address:="", SubAddress:= _
"'" & Sheets("Полный список").Name & "'!" & .Item(r(i).Value), TextToDisplay:=r(i).Value
Next
End With
End Sub
Это заготовка, писал по приложенному файлу. Можно/нужно дорабатывать. Например можно вообще сразу в чистый лист выгружать всё что из Sheets("Полный список").[P4].CurrentRegion собралось в словаре, и сразу ставить ссылки на первую ячейку с этим значением.
Скрытый текст
Код
Sub tt()
Dim i&, r, k
Set r = Sheets("Полный список").[P4].CurrentRegion
With CreateObject("Scripting.Dictionary")
'собираем в словарь все Федеральные_проекты, с адресами ячеек
For i = 2 To r.Rows.Count
If Not .exists(r(i).Value) Then .Item(r(i).Value) = r(i).Address
Next
i = 0
'ставим на активный лист с треьей строки ссылки в первый столбец на Федеральные_проекты
For Each k In .keys
i = i + 1
If Cells(i + 2, 1).Hyperlinks.Count > 0 Then Cells(i + 2, 1).Hyperlinks().Delete
Cells(i + 2, 1).Hyperlinks.Add Anchor:=Cells(i + 2, 1), Address:="", SubAddress:= _
"'" & Sheets("Полный список").Name & "'!" & .Item(k), TextToDisplay:=k
Next
End With
End Sub