Macro Collegamento Ipertestuale



  • Macro Collegamento Ipertestuale
    di alfrimpa data: 19/03/2015 16:30:13

    Ciao a tutti.

    Sono un paio di giorni che mi sto lambiccando il cervello per capire per quale motivo la prima macro qui sotto funziona perfettamente (inserendo in cella anche l'estensione del file) mentre la seconda (che mi sembra sostanzialmente identica) mi restituisce errore di run-time n. 5 Chiamata di routine o argomento non validi.

    Che cosa sbaglio o non capisco?

    Grazie

    Alfredo
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("a:a")) Is Nothing Then
        If Target = "" Then End
    ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell.Offset(-1, 0), Address:= _
            "C:Excel" & Target.Value, TextToDisplay:=Target.Value
    End If
    End Sub
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim est As String
    est = ".pdf"
    If Not Intersect(Target, Range("a:a")) Is Nothing Then
        If Target = "" Then End
       ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell.Offset(-1, 0), Address:= _
            "C:Excel" & Target.Value & est, TextToDisplay:=Target.Value
    End If
    End Sub
    
    
    






  • di alfrimpa data: 19/03/2015 16:56:43

    Un'altra domanda.

    Quando uso la prima macro e mi viene inserito il collegamento in cella se vi clicco su mi appare un messaggio del Centro di Protezione di Excel.

    Cosa devo fare per evitare tale visualizzazione?.

    Grazie

    Alfredo





  • di alfrimpa data: 19/03/2015 17:08:53

    Ho anche inserito C:Excel tra i percorsi attendibili nel Centro di Protezione Excel ma il messaggio appare comunque.

    Alfreod





  • di giuseppeMN (utente non iscritto) data: 19/03/2015 18:22:51

    Buona sera, Alfredo;
    sai che, appena posso, cerco di evitare gli "Eventi".
    Mi hanno creato più problemi che benefici; ma questo, molto probabilmente, è un mio problema.
    Quello che posso dirti è che, quotidianamente, utilizzo il Codice:
    - Sub Assegna_Hyperlinks()
    senza alcun problema.

    In buona sostanza, nella Cella in Campo 14 (Colonna "N"), ho il Link che seleziono e trasformo in Collegamento ipertestuale con il Codice sopra indicato.

    L'ho inserito, con piena soddisfazione, nel mio File:
    - Rispondo o no
    Tu sai di cosa si tratta.

    In realtà, all'nizio, ho utilizzato il Codice:
    - Sub Full_assegna_Hyperlinks()
    per gestire tutti i link già inseriti ma non ancora definiti come Collegamenti ipertestuali.

    Sarà mia premura verificare cosa accade nel secondo Evento, ma, per il momento, non saprei proprio che dirti.


    A disposizione.

    Buona serata.

    Giuseppe



     
    Option Explicit
    
    Sub Assegna_Hyperlinks()
    Dim Indirizzo As String
            Cells(ActiveCell.Row, 14).Select
            Indirizzo = Cells(ActiveCell.Row, 14).Value
            Cells(ActiveCell.Row, 14).Hyperlinks.Delete
                ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Indirizzo
            Cells(ActiveCell.Row, 6).Select
    End Sub
    Sub Full_assegna_Hyperlinks()
    Dim Rec As Long, x As Long
    Dim Indirizzo As String
        Rec = Cells(Rows.Count, 14).End(xlUp).Row
        For x = 3 To Rec
            Indirizzo = Cells(x, 14).Select
            Indirizzo = Cells(x, 14).Value
                ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Indirizzo
        Next x
    End Sub
    



  • di Vecchio Frac data: 19/03/2015 21:56:09

    @Alfrimpa
    I due codici mostrati sono identici (nel secondo aggiungi l'estensione, non fa differenza), sembra impossibile che non funzionino allo stesso modo.
    In realtà entrambi falliscono coll'errore che indichi se inserisci un numero invece di un testo o se selezioni più celle di colonna A. Il primo problema si supera costringendo a strrnga Target.Value di TextToDsplay. Il secondo col conteggio delle celle.
    Non dimenticare EnableEvents quando si modificano celle dentro routine di eventi.
    Infine evita l'End e usa Exit Sub.
    Allego versione leggermente modificata :o)
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim est As String
    
        est = CStr(Target.Value) & ".pdf"
        
        If Intersect(Target, Range("a:a")) Is Nothing Then Exit Sub
        If Target = "" Or Target.Cells.Count > 1 Then Exit Sub
        
        Application.EnableEvents = False
        ActiveSheet.Hyperlinks.Add Anchor:=Target, Address:="C:Excel" & est, TextToDisplay:=CStr(Target.Value)
        Application.EnableEvents = True
    End Sub






  • di alfrimpa data: 19/03/2015 22:15:33

    Ciao Vecchio Frac

    Hai, come sempre ragionissima -:)

    Ti dirò che inizialmente la macro funzionava benissimo perché non immettevo numeri nelle celle; poi casualmente ho inserito numeri e la macro ha smesso di funzionare.

    Non si finisce mai di imparare! Ma tu il VBA ce l'hai nel DNA? (e ho fatto anche la rima -:))

    Un'ultima cosa: sai come fare per evitare il messaggio del Centro di Protezione di Excel di cui ho parlato più su che mi viene visualizzato quando clicco sul un collegamento ipertestuale?

    Grazie

    Alfredo

    P.S. Ovviamente un doveroso ringraziamento va anche a Giuseppe per la sua risposta/suggerimento.





  • di alfrimpa data: 19/03/2015 22:48:25

    Perdonami Vecchio Frac (ma la sete di sapere è tanta )

    Ma se la macro si "aspettava" una stringa ed io inserivo un numero non avrei dovuto ricevere un errore di run-time 13 tipo non corrispondente anzichè errore di run-time 5?

    Grazie

    Alfredo





  • di Vecchio Frac data: 20/03/2015 10:53:30

    Non è la macro ad aspettarsi una stringa ma il suo parametro TextToDisplay. Dobbiamo convertire a stringa il valore prima di passarglielo. Il senso dell'errore è quello (5, Argomento non valido).
    Sul messaggio del centro di protezione temo che sia inevitabile.





  • di alfrimpa data: 20/03/2015 11:04:18

    Grazie mille Vecchio Frac ne sai una più del diavolo

    Alfredo





  • di Vecchio Frac data: 20/03/2015 11:13:02

    Mah, io credo di sapere solo quel che so, quel che non so non so neanche di non saperlo :)