Выделите целевую ячейку цветом, связанным с HYPERLINK - PullRequest
0 голосов
/ 30 декабря 2018

Я реализовал функциональность, в которой есть динамические гиперссылки в нескольких строках.Эти ГИПЕРЛИНКЫ указывают на разные ячейки на разных листах одной и той же книги.Когда я нажимаю на любую из ГИПЕРЛИНКОВ, я могу перейти к этой целевой ячейке.

Теперь по умолчанию эта ячейка выделяется толстой черной рамкой.Можно ли как-нибудь сделать так, чтобы эта ячейка отображалась определенным цветом всякий раз, когда она подсвечивается после нажатия кнопки HYPERLINK.

1 Ответ

0 голосов
/ 30 декабря 2018

Отличная проблема!Мы можем использовать события рабочего листа, чтобы справиться с этим.Событие, которое я считаю подходящим, - это событие follow hyperlink .Не уверен, как настроить это через python, если честно.Но было весело работать над этим в любом случае!Goodluck.

Код выглядит следующим образом:

Само событие в листе, содержащем вашу гиперссылку:

Option Explicit

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    AlterHyperLinkedRanged.Main Target
End Sub

Обычный модуль с именем AlterHyperLinkedRanged

Option Explicit

Sub Main(Target As Hyperlink)

    Dim ParsedSubAddress As ParsedSubAddress
    Set ParsedSubAddress = New ParsedSubAddress

    ParsedSubAddress.Parse Target.Subaddress

    Dim HyperLinkedRange As Range
    Set HyperLinkedRange = ParsedSubAddress.Worksheet.Range(ParsedSubAddress.Address)

    HyperLinkedRange.Borders.Color = RGB(0, 255, 0)

End Sub

И класс, который мы создали для хранения данных, переданных в target.subaddress, AKA - диапазон, границу которого мы хотим изменить.Я создал новый объект для обработки и хранения этих данных.Я делаю это на лету, не стесняйтесь улучшать!Этот код будет входить в модуль класса.

Именованный класс ParsedSubAddress :

Option Explicit

Private Type Attrib
    Address As String
    WS As Worksheet
End Type

Private this As Attrib

Public Property Get Address() As String
    Address = this.Address
End Property

Private Property Let Address(value As String)
    this.Address = value
End Property

Public Property Get Worksheet() As Worksheet
    Set Worksheet = this.WS
End Property

Private Property Let Worksheet(value As Worksheet)
    this.WS = value
End Property

Function Parse(ByVal Subaddress As String)
    If Not (InStr(Subaddress, "!") > 0) Then
        this.Address = Subaddress
        Set this.WS = ActiveSheet
    Else
        this.Address = Mid(Subaddress, InStr(Subaddress, "!") + 1, Len(Subaddress))
        Set this.WS = Sheets(Mid(Subaddress, 1, InStr(Subaddress, "!") - 1))
    End If
End Function
...