Формат гиперссылки по умолчанию для переопределения Excel для определенного диапазона на листе - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть ситуация, когда у меня есть столбец в Excel с вставленными символами (wingdings), в который будут вставлены гиперссылки на внешние документы.У меня проблема в том, что, когда гиперссылка вставляется в ячейку, применяется форматирование гиперссылки по умолчанию, которое удаляет шрифт wingding из ячейки и заменяет его шрифтом по умолчанию, в результате чего значок заменяется номером.

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

Существует ли простой способ применения стиля шрифта к ячейке при вставке гиперссылки (и, следовательно, переопределения стиля гиперссылки по умолчанию) с использованием VBA и, наоборот, применения другого стиля при удалении гиперссылки?

Снимок экрана

Я хочу, чтобы значок ячейки был серым, когда гиперссылка не вставлена, и черным, если гиперссылка вставлена.

Любойпомощь в этом вопрос был бы оценен.

Спасибо

1 Ответ

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

Этот UDF будет определять, содержит ли ячейка или диапазон объекты гиперссылки, и может затем использоваться с условным форматированием:

Public Function IsHyperlink(ByVal Target As Range)
    Application.Volatile
    'Quick Win - look for Hyperlink Object
    IsHyperlink = (Target.Hyperlinks.Count > 0)
    'Check if Excel can convert Target to a Hyperlink
    'Important because the worksheet recalculates BEFORE that happens
    If Not IsHyperlink Then
        IsHyperlink = (Application.WorksheetFunction.CountIf(Target, "www.*") + Application.WorksheetFunction.CountIf(Target, "ftp://*") _
            + Application.WorksheetFunction.CountIf(Target, "http://*") + Application.WorksheetFunction.CountIf(Target, "https://*")) > 0
    End If
    'Check for HYPERLINK() formula
    If (Target.HasFormula Or IsNull(Target.HasFormula)) And Not IsHyperlink Then
        Dim rCell As Range, sFormula As String, aFormula() As String, lStart As Long, lEnd As Long
        For Each rCell In Target.Cells
            If rCell.HasFormula Then
                sFormula = rCell.Formula
                'Remove any text
                While Len(sFormula) > Len(Replace(sFormula, Chr(34), "")) + 1
                    lStart = InStr(sFormula, Chr(34))
                    lEnd = InStr(lStart + 1, sFormula, Chr(34))
                    sFormula = Left(sFormula, lStart - 1) & Mid(sFormula, lEnd + 1)
                Wend
                'Replace "+", "-", "*", "/", "%"
                sFormula = Replace(Replace(Replace(Replace(Replace(sFormula, "+", ","), "-", ","), "*", ","), "/", ","), "%", ",")
                'Replace "=", "(", ")", " "
                sFormula = Replace(Replace(Replace(Replace(sFormula, "=", ","), "(", ","), ")", ","), " ", ",")
                'Search for "HYPERLINK"
                If InStr(UCase(sFormula & ","), ",HYPERLINK,") Then
                    IsHyperlink = True
                    Exit For
                End If
            End If
        Next rCell
    End If
End Function

В настоящее время он не обнаруживает гиперссылки, встроенные через HYPERLINKформула (например, =HYPERLINK("https://stackoverflow.com/", "Visit Stack Overflow!")) Теперь это происходит!

NB Из-за порядка событий Excel будет пересчитывать UDF до того, как преобразует любые URL-адреса, введенные в ячейки.в гиперссылки.Таким образом, я включил в него строку, в которой также будут найдены ячейки, которые Excel может преобразовать - в противном случае для получения результата вам потребуется дополнительный расчет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...