Condividi tramite

COLLEG.IPERTESTUALE da salvare in PDF

Anonimo
2022-03-22T10:06:12+00:00

Ciao a tutti.

Ho un problema di cui conosco l'origine ma non la soluzione ... e chiedo aiuto.

Ho un foglio con:

  • A1 (contiene l'url) -> "www.sito.it/"
  • B1 (contiene il codice articolo) -> "xxx"
  • C1 -> "=COLLEG.IPERTESTUALE(A1&B1&".htm"; B1)

Quando salvo in PDF (o stampo) ottengo un pdf nel quale il collegamento NON funziona: questo perché il valore che viene stampato in C1 è B1 e non A1&B1.

Diverso sarebbe se avessi inserito il collegamento ipertestuale dal menu inserisci, ma non è il mio caso.

Poiché quello sopra è solo un esempio (in realtà il collegamento è calcolato in base ad un percorso che dipende da un altro foglio nel quale viene fatto un CERCA.VERT sul codice articolo, e le righe sono +7000), vorrei sapere se c'è un metodo che:

A - preservi la stampa mostrando solo il codice articolo (cliccabile) e il resto della riga (colonna A nascosta o fuori dall'area di stampa)

B - resti calcolato dinamicamente in modo che il collegamento si aggiorni sempre

C - non faccia uso di una macro per trasformare la funzione in collegamento ipertestuale

Grazie a tutti

Andrea Treggia

Microsoft 365 e Office | Excel | Per il lavoro | 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

8 risposte

Ordina per: Più utili
  1. Anonimo
    2022-03-23T11:35:18+00:00

    Ciao Andrea,

    Norman: GRAZIE! Hai fatto davvero tantissimo e sono in debito con te.

    Condivido al 100% l'idea di NON modificare il file originale ma di crearne uno nuovo da cui originare il .pdf, così come non avrei mai usato Word.

    Ho notato anche un altro comportamento "strano" (e poco utile) di Excel.

    Se scrivi un una cella "www.treggia.it", Excel ti crea automaticamente il collegamento ipertestuale (che tante volte elimino con un Ctrl-Z perché non mi è utile).

    Invece, se fai un copia/incolla della medesima stringa, sia con Copia-Valori che con un Copia tipo da Notepad, Excel NON la riconosce come un indirizzo e NON crea in automatico il collegamento ipertestuale: se desideri crearlo, devi "fingere" di editare il campo (ad esempio: F2 e poi Invio).

    Peccato, perché invece di COLLEG.IPERTESTUALE si potrebbe comporre la stringa della URL, che è un link, ma senza l'automatismo che lo trasforma in un collegamento è inutile.

    A meno che non si faccia una macro che fa: "F2, Invio, giù di una riga, da capo fino alla fine" ...

    Sai di come si possa, se si può, dire ad Excel di creare un collegamento anche a fronte di un Incolla?

    Non sono a conoscenza di alcun mezzo per creare un collegamento ipertestuale incollando una stringa.

    Comunque, una soluzione che potrei considerare è quella di creare automaticamente i collegamenti ipertestuali richiesti nella colonna C sfruttando una procedura di evento Worksheet_Change e senza utilizzare formule intermedie.

    Quindi, prova qualcosa del genere:

    '========>>

    Option Explicit

    '-------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range, rCell As Range 
    
    Dim sAddress As String 
    
    Const sColonne As String = "B" 
    
    Set Rng = Intersect(Me.Columns(sColonne), Target) 
    
    If Not Rng Is Nothing Then 
    
        Application.EnableEvents = False 
    
        For Each rCell In Rng.Cells 
    
            With rCell 
    
                .Offset(0, 1).Hyperlinks.Delete 
    
                On Error Resume Next 
    
                If Not IsEmpty(.Value) And Not IsEmpty(.Offset(0, -1).Value) Then 
    
                    sAddress = .Offset(0, -1) & .Value & ".com" 
    
                    Me.Hyperlinks.Add Anchor:=.Offset(0, 1), Address:=sAddress, TextToDisplay:=.Value 
    
                End If 
    
                On Error GoTo 0 
    
            End With 
    
        Next rCell 
    
    End If 
    
    Application.EnableEvents = True 
    

    End Sub

    '<<========

    In questo modo quando uno o più valori vengono inseriti o modificati nella colonna B, i collegamenti ipertestuali richiesti vengono automaticamente creati nella colonna C.

    Potresti scaricare il mio file di prova Andrea20220323.xlsm

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2022-03-23T08:49:34+00:00

    Norman: GRAZIE! Hai fatto davvero tantissimo e sono in debito con te.

    Condivido al 100% l'idea di NON modificare il file originale ma di crearne uno nuovo da cui originare il .pdf, così come non avrei mai usato Word.

    Ho notato anche un altro comportamento "strano" (e poco utile) di Excel.

    Se scrivi un una cella "www.treggia.it", Excel ti crea automaticamente il collegamento ipertestuale (che tante volte elimino con un Ctrl-Z perché non mi è utile).

    Invece, se fai un copia/incolla della medesima stringa, sia con Copia-Valori che con un Copia tipo da Notepad, Excel NON la riconosce come un indirizzo e NON crea in automatico il collegamento ipertestuale: se desideri crearlo, devi "fingere" di editare il campo (ad esempio: F2 e poi Invio).

    Peccato, perché invece di COLLEG.IPERTESTUALE si potrebbe comporre la stringa della URL, che è un link, ma senza l'automatismo che lo trasforma in un collegamento è inutile.

    A meno che non si faccia una macro che fa: "F2, Invio, giù di una riga, da capo fino alla fine" ...

    Sai di come si possa, se si può, dire ad Excel di creare un collegamento anche a fronte di un Incolla?

    Grazie ancora

    Andrea Treggia

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-03-22T13:16:58+00:00

    Ciao Andrea,

    Ciao Norman,

    grazie per la tua risposta.

    I collegamenti ipertestuali verranno copiati come collegamenti ipertestuali cliccabili nel file pdf solo se i collegamenti ipertestuali di Excel sono veri collegamenti ipertestuali anziché formule che restituiscono un collegamento ipertestuale. Questo perché, alla fine, un documento pdf non può riconoscere o utilizzare una formula Excel.

    Per convertire le formule COLLEG.IPERTESTUALE in collegamenti cliccabili al momento del salvataggio del file pdf, ma mantenere le formule dinamiche di Excel, penso che sarà necessario ricorrere a VBA. Prendo atto, tuttavia, che escludi specificamente questa possibilità.

    Va inoltre notato che per ottenere collegamenti ipertestuali cliccabili nel documento pdf, penso sia necessario disporre di Adobe Acrobat e salvare il file come pdf Adobe Acrobat

    COLLEG.IPERTESTUALE in realtà è una formula atipica: non genera un valore (tipo CERCA.VERT) ma una azione, l'aprire un link, al cliccare sulla cella.

    Per questo motivo sarebbe stato "intelligente" riportare all'interno del PDF il link, oltre al testo della cella ... ma così non è, sia che Adobe Acrobat sia installato o no, e indipendentemente che si faccia una "stampa" o un "Salva con nome" in formato .pdf

    Il VBA va bene e potrei scrivermelo da solo ma dovrei fare due cose:

    • superare il problema della protezione del documento in modo trasversale alla versione di Excel
    • chiedere all'utente di aggiornare ogni volta i collegamenti o fare un VBA che lo faccia prima di stampare

    Non è il massimo e non costa poco.

    Esiste una procedura che risolve il problema:

    • selezionare e copiare le celle con COLLEG.IPERTESTUALE
    • fare un Incolla in un documento vuoto di Word
    • copiare in Word il testo appena incollato
    • fare un Incolla in una colonna vuota del documento Excel

    Tutto ciò porta ad avere in Excel dei collegamenti ipertestuali attivi anche nel PDF.

    No macro ma, ancora una volta, una procedura poco lineare e con qualche possibile problema di formato.

    Da qui la domanda: si può fare di meglio?

    Ancora grazie.

    Se fosse per me, per creare il foglio da salvare in formato pdf, senza recorso a Microsoft Word, proverei qualcosa del genere:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim srcWB As Workbook 
    
    Dim srcSH As Worksheet, destSH As Worksheet 
    
    Dim rCell As Range, RngA As Range, RngB As Range, RngC As Range 
    
    Dim LRow As Long 
    
    Const sFoglio As String = **"Foglio1"                          '&lt;&lt;=== Modifica** 
    
    Const sColonna\_Collegamenti As String = **"C:C"      '&lt;&lt;=== Modifica** 
    
    Set srcWB = ThisWorkbook 
    
    Set srcSH = srcWB.Sheets(sFoglio) 
    
    srcSH.Copy 
    
    Set destSH = ActiveSheet 
    
    With destSH 
    
        LRow = LastRow(destSH, .Columns(sColonna\_Collegamenti)) 
    
        Set RngC = .Range(sColonna\_Collegamenti).Resize(LRow) 
    
    End With 
    
    For Each rCell In RngC.Cells 
    
        With rCell 
    
            If Left(rCell.Formula, 10) = "=HYPERLINK" Then 
    
                Set RngA = Intersect(.EntireRow, destSH.Columns("A")) 
    
                Set RngB = Intersect(.EntireRow, destSH.Columns("B")) 
    
                destSH.Hyperlinks.Add Anchor:=rCell, Address:=RngA.Text & RngB.Text & ".com", TextToDisplay:=RngB.Value 
    
                .Value = .Value 
    
            End If 
    
        End With 
    
    Next rCell 
    
    destSH.Columns("A:B").Delete 
    

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

    Optional Rng As Range, \_ 
    
    Optional minRow As Long = 1) 
    
    If Rng Is Nothing Then 
    
        Set Rng = SH.Cells 
    
    End If 
    
    On Error Resume Next 
    
    LastRow = Rng.Find(What:="\*", \_ 
    
        After:=Rng.Cells(1), \_ 
    
        Lookat:=xlPart, \_ 
    
        LookIn:=xlFormulas, \_ 
    
        SearchOrder:=xlByRows, \_ 
    
        SearchDirection:=xlPrevious, \_ 
    
        MatchCase:=False).Row 
    
    On Error GoTo 0 
    
    If LastRow &lt; minRow Then 
    
        LastRow = minRow 
    
    End If 
    

    End Function

    '<<========

    Questo codice lascia inalterato il file originale, con i suoi collegamenti ipertestuali dinamici, e crea un nuovo file, senza colonne A e B, e con collegamenti ipertestuali statici e veri che puoi quindi salvare come documento pdf.

    Potresti scaricare il mio file di prova Andrea20220322.xlsm

    A causa di un problema con l'attuale editor del forum, che inserisce righe vuote indesiderate nel codice copiato dal forum, suggerirei di copiare il mio codice direttamente dal mio file di prova.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2022-03-22T11:42:36+00:00

    Ciao Norman,

    grazie per la tua risposta.

    I collegamenti ipertestuali verranno copiati come collegamenti ipertestuali cliccabili nel file pdf solo se i collegamenti ipertestuali di Excel sono veri collegamenti ipertestuali anziché formule che restituiscono un collegamento ipertestuale. Questo perché, alla fine, un documento pdf non può riconoscere o utilizzare una formula Excel.

    Per convertire le formule COLLEG.IPERTESTUALE in collegamenti cliccabili al momento del salvataggio del file pdf, ma mantenere le formule dinamiche di Excel, penso che sarà necessario ricorrere a VBA. Prendo atto, tuttavia, che escludi specificamente questa possibilità.

    Va inoltre notato che per ottenere collegamenti ipertestuali cliccabili nel documento pdf, penso sia necessario disporre di Adobe Acrobat e salvare il file come pdf Adobe Acrobat

    COLLEG.IPERTESTUALE in realtà è una formula atipica: non genera un valore (tipo CERCA.VERT) ma una azione, l'aprire un link, al cliccare sulla cella.

    Per questo motivo sarebbe stato "intelligente" riportare all'interno del PDF il link, oltre al testo della cella ... ma così non è, sia che Adobe Acrobat sia installato o no, e indipendentemente che si faccia una "stampa" o un "Salva con nome" in formato .pdf

    Il VBA va bene e potrei scrivermelo da solo ma dovrei fare due cose:

    • superare il problema della protezione del documento in modo trasversale alla versione di Excel
    • chiedere all'utente di aggiornare ogni volta i collegamenti o fare un VBA che lo faccia prima di stampare

    Non è il massimo e non costa poco.

    Esiste una procedura che risolve il problema:

    • selezionare e copiare le celle con COLLEG.IPERTESTUALE
    • fare un Incolla in un documento vuoto di Word
    • copiare in Word il testo appena incollato
    • fare un Incolla in una colonna vuota del documento Excel

    Tutto ciò porta ad avere in Excel dei collegamenti ipertestuali attivi anche nel PDF.

    No macro ma, ancora una volta, una procedura poco lineare e con qualche possibile problema di formato.

    Da qui la domanda: si può fare di meglio?

    Ancora grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2022-03-22T11:08:28+00:00

    Ciao Andrea,

    Ho un problema di cui conosco l'origine ma non la soluzione ... e chiedo aiuto.

    Ho un foglio con:

    • A1 (contiene l'url) -> "www.sito.it/"
    • B1 (contiene il codice articolo) -> "xxx"
    • C1 -> "=COLLEG.IPERTESTUALE(A1&B1&".htm"; B1)

    Quando salvo in PDF (o stampo) ottengo un pdf nel quale il collegamento NON funziona: questo perché il valore che viene stampato in C1 è B1 e non A1&B1.

    Diverso sarebbe se avessi inserito il collegamento ipertestuale dal menu inserisci, ma non è il mio caso.

    Poiché quello sopra è solo un esempio (in realtà il collegamento è calcolato in base ad un percorso che dipende da un altro foglio nel quale viene fatto un CERCA.VERT sul codice articolo, e le righe sono +7000), vorrei sapere se c'è un metodo che:

    A - preservi la stampa mostrando solo il codice articolo (cliccabile) e il resto della riga (colonna A nascosta o fuori dall'area di stampa)

    B - resti calcolato dinamicamente in modo che il collegamento si aggiorni sempre

    C - non faccia uso di una macro per trasformare la funzione in collegamento ipertestuale

    I collegamenti ipertestuali verranno copiati come collegamenti ipertestuali cliccabili nel file pdf solo se i collegamenti ipertestuali di Excel sono veri collegamenti ipertestuali anziché formule che restituiscono un collegamento ipertestuale. Questo perché, alla fine, undocumento pdf non può riconoscere o utilizzare una formula Excel.

    Per convertire le formule COLLEG.IPERTESTUALE in collegamenti cliccabili al momento del salvataggio del file pdf, ma mantenere le formule dinamiche di Excel, penso che sarà necessario ricorrere a VBA. Prendo atto, tuttavia, che escludi specificamente questa possibilità.

    Va inoltre notato che per ottenere collegamenti ipertestuali cliccabili nel documento pdf, penso sia necessario disporre di Adobe Acrobat e salvare il file come pdf Adobe Acrobat

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento