4

У меня есть коллекция всех разных номеров деталей для разных версий одной детали, и каждая из них имеет гиперссылку на свой конкретный чертеж в формате PDF. Я хотел бы поместить их в список проверки данных, чтобы кто-то мог выбрать, какую версию он хотел бы, однако гиперссылки не "идут" с ячейками, когда они выбраны (только простой текст). Как я могу получить гиперссылки для каждого отдельного элемента в списке?

Я сделал небольшую таблицу с каждым номером детали и соответствующей ссылкой на расположение файлового сервера в виде простого текста. Тогда у меня может быть выпадающий список, который выбирает любую из частей, и вторая ячейка, которая использует этот выбор для создания правильной гиперссылки из таблицы. Проблема в том, что для этого решения требуются 2 разные ячейки, где у меня есть место только для одной. Есть ли способ получить мой выпадающий список, чтобы также изменить гиперссылки в ячейке?

1 ответ1

0

Я пробовал что-то похожее на то, что вы собираетесь после. К сожалению, в Excel нет формул для возврата встроенного URL-адреса ячейки. Единственный способ получить это через VBA.

  1. Вам нужно будет создать событие для захвата при каждом изменении ячейки в определенном диапазоне. Этот диапазон должен охватывать ваши ячейки проверки данных.

Вот пример, с которого можно начать захват при изменении ячейки:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A1:C10")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
       Is Nothing Then

    ' Display a message when one of the designated cells has been 
    ' changed.
    ' Place your code here.
    MsgBox "Cell " & Target.Address & " has changed."

End If
End Sub

Отрегулируйте диапазон, показанный здесь, к вашему собственному диапазону.

Убедитесь, что поместили этот код в "ThisWorkbook":

  1. Внутри этого события определите, к какой ячейке она относится и к какой ячейке она подключена для гиперссылки.
  2. Используйте VBA, чтобы сказать вам, какая гиперссылка находится в этой ячейке, используя функцию, подобную этой:

Образец:

Option Explicit
Function HyperLinkText(rg As Range)
    Dim sFormula As String, S As String
    Dim L As Long
    Dim H As Hyperlink, HS As Hyperlinks

sFormula = rg.Formula
L = InStr(1, sFormula, "HYPERLINK(""", vbBinaryCompare)

If L > 0 Then
    S = Mid(sFormula, L + 11)
    S = Left(S, InStr(S, """") - 1)
Else
    Set HS = rg.Worksheet.Hyperlinks
    For Each H In HS
        If H.Range = rg Then
            S = H.Address
        End If
    Next H
End If

HyperLinkText = S

End Function

Я не знаю, насколько вы знакомы с VBA. Если вам нужна дополнительная помощь с первыми частями, дайте мне знать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .