Condividi tramite

Modificare hyperlink associato al testo di una cella

Anonimo
2019-05-13T08:01:45+00:00

Ciao a tutti,

ho un foglio excel con celle che contengono testo.

Al testo è associato un hyperlink tipo https://percorso1/ITA/info.

Sulla base del valore di una cella di tipo menù a tendina che elenca le nazioni, vorrei far si che l'hyperlink in questione si modificasse:

Testo Cella Hyperlink Originale Scelta da menù a tendina Hyperlink finale
Listino https://percorso1/ITA/info Italia https://percorso1/ITA/info
Listino https://percorso1/ITA/info Spagna https://percorso1/ESP/info
Listino https://percorso1/ITA/info Francia https://percorso1/DEU/info

La cella di tipo menù a tendina si appoggia su una tabella in un foglio secondario del tipo:

Nazione Acronimo
Italia ITA
Spagna ESP
Germania DEU

Avete idee su come ottenere il comportamento desiderato?

Grazie mille in anticipo

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

3 risposte

Ordina per: Più utili
  1. Anonimo
    2019-05-22T16:30:30+00:00

    Ritengo di sì.

    Quella riga di comando imposta un oggetto "ListObject" che lato utente è una "Tabella" (Inserisci-Tabella).

    Se non utilizzi una tabella devi impostare il range di dive si trovano le colonne delle nazioni e dove inserire i link.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-05-22T10:30:25+00:00

    Ciao casanmaner,

    grazie mille per l'aiuto.

    Ho provato ad adattarlo nel mio esempio specifico, rinominando i riferimenti dove aveva senso.

    Il problema che sto incontrando è nel riga    Set oLo1 = Me.ListObjects(sNomeTabellaLink) perchè mi ritorna un RunTime Error = 9 - Subscript out of range.

    Qualche suggerimento.

    La principale differenza con l'esempio utilissimo che mi hai fornito e che la tabella di appoggio non utilizza uno stile di tabella tra quelli standard come nel tuo caso.

    Potrebbe dipendere da questo?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-05-14T05:42:21+00:00

    Ciao prova a vedere questo esempio se ti può dare qualche spunto:

    https://www.dropbox.com/s/eir00nhg4jrme3m/Modificare%20hyperlink%20associato%20al%20testo%20di%20una%20cella.xlsm?dl=0

    Nel Foglio1 ho inserito una tabella dove nelle celle della colonna Nazione è presente la convalida con l'elenco delle nazioni.

    L'elenco è presente nel Foglio2 in una seconda tabella di raccordo tra il nome della Nazione e l'acronimo.

    Nel modulo del Foglio1 ho utilizzato l'evento change inserendo questo codice:

    '---

    Private Sub Worksheet_Change(ByVal Target As Range)

       Const sPrefissoLink As String = "https://percorso1/"

       Const sSuffissoLink As String = "/info"

       Const sNomeTabellaLink As String = "TabellaLink"

       Const sNomeFoglioTabellaRaccordo As String = "Foglio2"

       Const sNomeTabellaRaccordo As String = "TabellaRaccordo"

       Const sNomeColonnaNazioni As String = "Nazione"

       Const sNomeColonnaLink As String = "Iperlink"

       Const sNomeColonnaAcronimi As String = "Acronimo"

       Dim oLo1 As ListObject, oLo2 As ListObject

       Dim rng As Range, r As Range

       Dim iRow As Long

       Dim sNazione As String, sLink As String, sAcronimoPaese As String

       Dim iPos As Variant

       Dim rLink As Range

       On Error GoTo Errore

       Set oLo1 = Me.ListObjects(sNomeTabellaLink)

       Set oLo2 = ThisWorkbook.Worksheets(sNomeFoglioTabellaRaccordo).ListObjects(sNomeTabellaRaccordo)

       Application.EnableEvents = False

          Set rng = Intersect(Target, oLo1.ListColumns(sNomeColonnaNazioni).DataBodyRange)

          If Not rng Is Nothing Then

             For Each r In rng

                sNazione = r.Value

                iRow = r.Row - oLo1.Range.Row

                Set rLink = oLo1.ListColumns(sNomeColonnaLink).DataBodyRange(iRow)

                If sNazione <> "" Then

                   iPos = Application.Match(sNazione, oLo2.ListColumns(sNomeColonnaNazioni).DataBodyRange, 0)

                   If Not IsError(iPos) Then

                      sAcronimoPaese = oLo2.ListColumns(sNomeColonnaAcronimi).DataBodyRange(iPos).Value

                      sLink = sPrefissoLink & sAcronimoPaese & sSuffissoLink

                      rLink.Hyperlinks.Add Anchor:=rLink, _

                                           Address:=sLink, _

                                           TextToDisplay:=sLink

                   Else

                      rLink.ClearContents

                   End If

                Else

                   rLink.ClearContents

                End If

             Next r

          End If

    RiprendiErrore:

       Application.EnableEvents = True

       Exit Sub

    Errore:

       MsgBox "Si è verificato un errore!" & vbNewLine & _

              "Errore n. " & Err.Number & vbNewLine & _

              Err.Number, vbCritical, "Errore VBA"

       Resume RiprendiErrore:

    End Sub

    '---

    Selezionando una nazione dall'elenco a discesa della convalida nella cella della colonna Iperlink viene inserito un link composto dal prefisso "https://percorso1/", dall'acronimo della nazione (es. Italia=ITA) e infine dal suffisso finale "/info".

    Se viene cancellato il contenuto della cella della colonna Nazione viene cancellato anche il link nella corrispondete cella della colonna Iperlink.

    Vedi tu se ti può essere di spunto.

    La risposta è stata utile?

    0 commenti Nessun commento