FollowHyperlink

di il
12 risposte

FollowHyperlink

In vari post precedenti si è a lungo discusso su come ottimizzare eventuali linkaggi a Immagini, Video...File esterni in genere. Scartata l'ipotesi del campo tipo "collegamento ipertestuale", @Alex suggerisce la formula FollowHyperlink, associando il Doppio clic sul campo-maschera per raggiungere il file esterno.
Ho un database di catalogazione Libri, CD, Video ecc...In una tabella ho un campo Indirizzo che serve ad indicare dove sta un oggetto. Se tale oggetto è virtuale, cioè proprio un file che si trova all'interno del computer, l'indirizzo riporta esattamente il path per raggiungerlo: in questo caso FollowHyperlink dovrebbe funzionare. Ma se si tratta di un oggetto fisico, appare una semplice scritta del tipo Stanza X/Libreria Y/Scaffale Z...
Che succede se faccio Doppio clic in casi come questo?
Access invia un messaggio di errore di default?
Si può captare l'errore e inviare un messaggio personalizzato?
Attualmente, quando si tratta di path, lo copio e lo incollo nell'URL, raggiungendo la cartella o il file in questione. Si tratta in realtà di circa 5.000 Indirizzi-Path nell'intera tabella che a tutt'oggi ha 79.000 record.
Vale la pena sfruttare questa opportunità?

12 Risposte

  • Re: FollowHyperlink

    Non ho capito molto... ma con le macro non puoi gestire questo aspetto, io prima di lanciare la chiamata al metodo FollowHyperlink farei un controllo dell'esistenza del file... oppure implenterei una gestione errori, guarderei l'error number restituito e lo gestirei.

    Questo con le macro non si può fare, quindi mi fermo.
  • Re: FollowHyperlink

    È vero che non si può fare con macro. Mi piacerebbe conoscere le sintassi dei due codici VBA da te immaginati e cominciare a farmi un'idea.
  • Re: FollowHyperlink

    Funzione PUBLIC in un modulo in quanto può essere usata da più punti:
    
    Public Function EsisteFile(ByVal str As String) As Boolean
        On Error Resume Next
        EsisteFile = (GetAttr(str) And vbDirectory) = 0
    End Function
    quindi
    
    If EsisteFile(Me!CampoPath.Value) then Application.FollowoHyperlink.....
  • Re: FollowHyperlink

    Ti ringrazio in ogni caso, anche quando continuo a non capirci nulla. Fatto sta che, rileggendo vari post sull'argomento, l'unico al quale sono riuscito ad avvicinarmi meglio è questo
    http://www.iprogrammatori.it/forum-programmazione/access/problema-collegamento-ipertestuale-t15309.html?hilit=Followhyperlink#p8487802
    (vedi il codice dell'ultimo post)
    Ho prelevato ciò che appariva simile alle mie esigenze e l'ho elaborato così:
    Private Sub Indirizzo_DblClick(Cancel As Integer)
    Dim Vai As String
    Vai = "G:\" & Indirizzo.Value
    Me.Application.FollowHyperlink Address:=Vai, NewWindow:=True
    End Sub
    Lasciami assaporare almeno la soddisfazione nel vedere concretizzarsi per la prima volta un codice VBA. Poi passo ad analizzare quanto segue:

    1. Con questo codice, se Indirizzo è hyperlink conduce all'apertura del file: OK.
    Altrimenti Access mi invia un proprio messaggio di errore: per ora va bene anche così.

    2. Tu mi hai proposto Public Function, ma non riesco ad afferrare il perchè, una volta tanto che la richiesta di FollowHyperlink parte soltanto da uno specifico campo di sottomaschera.

    3. Come puoi notare dal 3° rigo del mio codice, ho aggiunto "G:\" in quanto i file da aprire si trovano su hard disk esterno alla posizione G:, ma si tratta a questo punto di un path assoluto. Come posso correggerlo in path relativo?

    4. So che la gestione degli errori è un punto di forza del VBA, però mi sento ancora troppo lontano da questo argomento. Se vuoi darmi una mano al riguardo, sarà sempre gradita, se occorre uno sforzo superiore, non ti sprecare per un cocciuto come me!

    Potresti rispondere o fare ulteriori osservazioni ad ogni punto?
  • Re: FollowHyperlink

    OsvaldoLaviosa ha scritto:


    Ti ringrazio in ogni caso, anche quando continuo a non capirci nulla.
    ......
    Lasciami assaporare almeno la soddisfazione nel vedere concretizzarsi per la prima volta un codice VBA. Poi passo ad analizzare quanto segue:

    1. Con questo codice, se Indirizzo è hyperlink conduce all'apertura del file: OK.
    Altrimenti Access mi invia un proprio messaggio di errore: per ora va bene anche così.
    Non ho commenti.

    OsvaldoLaviosa ha scritto:


    2. Tu mi hai proposto Public Function, ma non riesco ad afferrare il perchè, una volta tanto che la richiesta di FollowHyperlink parte soltanto da uno specifico campo di sottomaschera.
    Non ho capito la domanda, e cosa ha questa in comune con la mia proposta di Function che ha il solo scopo di VERIFICARE l'esistenza del File da aprire...!

    OsvaldoLaviosa ha scritto:


    3. Come puoi notare dal 3° rigo del mio codice, ho aggiunto "G:\" in quanto i file da aprire si trovano su hard disk esterno alla posizione G:, ma si tratta a questo punto di un path assoluto. Come posso correggerlo in path relativo?
    Dipende da cosa hai salvato nel campo della Tabella... [Indirizzo]
    Se hai salvato il PATH completo, quindi ASSOLUTO e questo è DIVERSO da quello che ora devi usare, non puoi fare molto... devi effettuare uno STRIP o elaborazione della stringa completa dalla coda al primo CHAR(BachSlash)... e li aggiungere il nome della risorsa mappata[G:].
    Purtroppo a questo non so cosa dire in quanto non hai spiegato chiaramente cosa hai salvato e cosa devi usare come Stringa di riferimento.

    OsvaldoLaviosa ha scritto:


    4. So che la gestione degli errori è un punto di forza del VBA, però mi sento ancora troppo lontano da questo argomento. Se vuoi darmi una mano al riguardo, sarà sempre gradita, se occorre uno sforzo superiore, non ti sprecare per un cocciuto come me!
    A questo non credo servano risposte... anzi questo poteva non esserci.

    OsvaldoLaviosa ha scritto:


    Potresti rispondere o fare ulteriori osservazioni ad ogni punto?
    Fatto.

    P.S. Il metodo FollowHyperlink è comodo ma non è il massimo, io personalmente non lo uso perchè non è gestibile in realtà come errori specifici ma solo come errori generici, oltretutto ha un difetto grafico di FLARE e di attivazione di MenùBar(almeno fino ad A2003).
    Tuttavia il metodo corretto è ancora troppo lontano da proporre.
  • Re: FollowHyperlink

    @Alex ha scritto:


    OsvaldoLaviosa ha scritto:
    3. Come puoi notare dal 3° rigo del mio codice, ho aggiunto "G:\" in quanto i file da aprire si trovano su hard disk esterno alla posizione G:, ma si tratta a questo punto di un path assoluto. Come posso correggerlo in path relativo?
    Dipende da cosa hai salvato nel campo della Tabella... [Indirizzo]
    Se hai salvato il PATH completo, quindi ASSOLUTO e questo è DIVERSO da quello che ora devi usare, non puoi fare molto... devi effettuare uno STRIP o elaborazione della stringa completa dalla coda al primo CHAR(BachSlash)... e li aggiungere il nome della risorsa mappata[G:].
    Purtroppo a questo non so cosa dire in quanto non hai spiegato chiaramente cosa hai salvato e cosa devi usare come Stringa di riferimento.
    Ti faccio degli esempi concreti di path memorizzati nel campo Indirizzo, poi mi dici se sono in sintonia con la tua osservazione.
    Arti\Musica\Folk\Tradizionale\Tarantella del Gargano.pdf
    Arti\\Musica\Pop\Bennato Edoardo\Isola che non c'è.doc
    Arti\Cinema\Fellini Federico\E la nave va.jpg
    Io ho un hard disk nell'unità G: e, fra le tante cartelle, vi è anche Arti (le altre a seguire). Tutti i path cominciano per Arti, mi piacerebbe che, se domani voglio spostare la cartella Arti in un'altra directory del computer, il path relativo apri lo stesso il file desiderato.
  • Re: FollowHyperlink

    Se la struttura è equivalente basta CONCATENARE la risorsa MAPPATA...

    Personalmente farei il Check della presenza...
  • Re: FollowHyperlink

    @Alex ha scritto:


    Se la struttura è equivalente basta CONCATENARE la risorsa MAPPATA...
    Non capisco. Se non è molto diverso dal mio 3° rigo, vorrei soltanto che me lo correggessi "relativamente".

    @Alex ha scritto:


    Personalmente farei il Check della presenza...
    Ci penserò in futuro, quando avrò più dimistichezza con la gestione errori e quant'altro
  • Re: FollowHyperlink

    OsvaldoLaviosa ha scritto:


    @Alex ha scritto:


    Se la struttura è equivalente basta CONCATENARE la risorsa MAPPATA...
    Non capisco. Se non è molto diverso dal mio 3° rigo, vorrei soltanto che me lo correggessi "relativamente".
    E' esattamente quello...!!
  • Re: FollowHyperlink

    Ho necessità di riprendere questo thread e ripartire da questo codice
    Private Sub Indirizzo_DblClick(Cancel As Integer)
    Dim Vai As String
    Vai = "G:\" & Indirizzo.Value
    Me.Application.FollowHyperlink Address:=Vai, NewWindow:=True
    End Sub
    Così come è in "assoluto" funziona.
    Il discorso della Public Function non l'ho capito e, per ora, preferisco metterlo da parte.
    Vorrei sostituire quel codice con un path relativo. Ho provato così, mettendo il database nella stessa directory dove si trova la cartella Arti e scrivendo:
    Private Sub Indirizzo_DblClick(Cancel As Integer)
    Dim Vai As String
    Vai = "..\" & Indirizzo.Value
    Me.Application.FollowHyperlink Address:=Vai, NewWindow:=True
    End Sub
    Questo codice non funziona. Cosa devo correggere?
    Curiosamente, se dopo il messaggio di errore, clicco su Debug, viene evidenziata in giallo la riga
    Me.Application.FollowHyperlink Address:=Vai, NewWindow:=True
    mentre mi aspetterei sulla riga precedente...ripeto, non sono capace di rimediare da solo sul VBA.
  • Re: FollowHyperlink

    Non sei nel WEB e il ROOT non lo puoi identificare con "..\"

    Il Root lo devi rendere ESPLICITO
    
    Vai = CurrentProject.Path & "\" & Indirizzo.Value
  • Re: FollowHyperlink

    Funziona! Grazie.
Devi accedere o registrarti per scrivere nel forum
12 risposte