Fazer lista suspensa mostra hiperlinks

4

Eu tenho uma coleção de todos os diferentes números de peça para diferentes versões de uma única peça, e cada um deles é hyperlinkado para o desenho diferente específico em formato pdf. Eu gostaria de colocá-los em uma lista de validação de dados para que alguém possa selecionar qual versão eles gostariam, no entanto, os hiperlinks não "acompanham" as células quando elas são selecionadas (somente texto simples). Como posso obter os hiperlinks para carregar cada item diferente na lista?

Eu fiz uma pequena tabela com cada número de peça e o link correspondente para o local do servidor de arquivos em texto simples. Então eu posso ter uma lista suspensa que seleciona qualquer uma das partes, e uma segunda célula que usa essa seleção para gerar o hiperlink correto da tabela. O problema é que esta solução requer 2 células diferentes, onde eu só tenho espaço para uma. Existe uma maneira de obter minha lista suspensa para alterar também os hiperlinks na célula?

    
por Jacob Whiteman 02.06.2016 / 13:57

1 resposta

0

Eu tentei algo parecido com o que você está procurando. Infelizmente, não há fórmulas do Excel para retornar a URL incorporada de uma célula. A única maneira de recuperar isso é através do VBA.

  1. Você terá que criar um evento para capturar sempre que uma célula for alterada em um determinado intervalo. Esse intervalo deve cobrir as células de validação de dados.

Aqui está um exemplo para você começar a capturar quando uma célula muda:

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

Ajuste o intervalo mostrado aqui para o seu próprio alcance.

Certifique-se de colocar este código dentro de "ThisWorkbook":

  • Dentro desse evento, reúna qual célula e qual célula está conectada para o hyperlink
  • Use o VBA para informar qual hiperlink está nessa célula usando uma função semelhante a esta:
  • Amostra:

    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
    

    Não sei como você está familiarizado com o VBA. Se você precisar de ajuda adicional com as primeiras partes, me avise.

        
    por 02.06.2016 / 14:06