Inserimento collegamento ipertestuale

di il
11 risposte

Inserimento collegamento ipertestuale

Salute a tutti.
Ogni tanto passo di qui quando non riesco a venir fuori da un problema.

Adesso ho la necessità di dover effettuare la ricerca di un percorso di un file (nel caso specifico un PDF) e inserirlo in una casella settata come "Collegamento ipertestuale".

Sul database che ho realizzato, avevo inserito un pulsante con la quale mi aprivo la mascherina e selezionava il file pdf che mi serviva.

Dim dialog As FileDialog
Set dialog = Application.FileDialog(msoFileDialogFilePicker)

With dialog
    .AllowMultiSelect = False
    .Show
    .Filters.Add "Access Projects", "*.PDF"
    Me.RIS_LINK= .SelectedItems.Item(1)
        
End With

Adesso il problema sta che la versione Office 2010 che stiamo usando è passata dal Windows 7/32bit al Windows 10/64bit, e quindi il fileDialog non mi funziona più dandomi un errore su tipo di formato errato.
In definitiva, andando a digitare l'"As", il FileDialog non mi compare più nella tendina.
Sto scervellandomi a trovare la libreria prevista da Access 64bit, ma niente da fare.

Diciamo che comunque, ho risolto tuttavia la situazione: vado sulla casella di Ipertxt, clicco sul tasto destro, selezione Modifica Collegamento Ipertext e lui mi seleziona il file.
Per me che sono pratico, non ci sono problemi, ma il db lo usa un gruppo di persone che non sono andati più in la della 3^ media (in alcuni casi la licenza elementare), per cui vorrei trovare una soluzione per fare in modo che cliccano su un pulsante, o sulla casella di testo, e si apre una finestra di dialogo, il che, per loro, è più pratico.
Indicazioni o consigli?

Grazie a chi risponderà

11 Risposte

  • Re: Inserimento collegamento ipertestuale

    Togli i riferimenti ad Office dichiara la variabile come Object e definisci la costante di libreria come costante di Applicativo
    [msoFileDialogFilePicker]...
    Non avrai più l'help e l'intellisense ma dovrebbe andare...
  • Re: Inserimento collegamento ipertestuale

    La variable l'ho definita come Object.
    Il resto non l'ho inteso molto bene, abbi pazienza.
  • Re: Inserimento collegamento ipertestuale

    carlo pots ha scritto:


    Sto scervellandomi a trovare la libreria prevista da Access 64bit, ma niente da fare.
    Non so se ti aiuta questo
    https://docs.microsoft.com/en-us/office/vba/api/access.application.filedialog
    dove dice
    ' Requires reference to Microsoft Office 11.0 Object Library

    @Alex ha scritto:


    Togli i riferimenti ad Office dichiara la variabile come Object e definisci la costante di libreria come costante di Applicativo
    [msoFileDialogFilePicker]...
    Non avrai più l'help e l'intellisense ma dovrebbe andare...
    Credo che @Alex voglia far leva su questo dilemma
    forum.masterdrive.it/microsoft-office-access-vba-23/latebinding-vs-earlybinding-46733/
  • Re: Inserimento collegamento ipertestuale

    Il problema sulla libreria mancante l'avevo già letto, tant'è che stavo cercando dove trovarla per scaricarla, ma niente.
    Per quanto riguarda il dilemma che dicevi, quel post l'avevo già letto, solo che parla di oggetti OLE, che in se non sarebbe nemmeno male inserire nel DB, salvo poi dover fare i conti con i soliti limiti di Access (2 GB), e dato che il materiale da archiviare è notevole, mi conviene più inserire un collegamento ipertext che non un oggetto OLE.
  • Re: Inserimento collegamento ipertestuale

    carlo pots ha scritto:


    Il problema sulla libreria mancante l'avevo già letto, tant'è che stavo cercando dove trovarla per scaricarla, ma niente.
    Io non credo che devi scaricarla, quanto in "visualizzazione struttura VBA", hai un menu Strumenti/Riferimenti dentro il quale dovresti trovare "quella libreria" (scorrila perché è lunga) e mettere il segno di spunta.

    carlo pots ha scritto:


    Per quanto riguarda il dilemma che dicevi, quel post l'avevo già letto, solo che parla di oggetti OLE, che in se non sarebbe nemmeno male inserire nel DB, salvo poi dover fare i conti con i soliti limiti di Access (2 GB), e dato che il materiale da archiviare è notevole, mi conviene più inserire un collegamento ipertext che non un oggetto OLE.
    Non mi pare che si parli di OLE. @Alex (correggimi se sbaglio) punta il dito sul fatto che:
    - se vuoi usare il VBA con tutte le comodità dell'intellisense, usa le librerie "specifiche" (Earlybinding)
    - se il tuo database deve passare da computer di diversa "generazione", occorre avere un codice VBA "più generico" (con le dichiarazioni As Object per esempio, Latebinding)
  • Re: Inserimento collegamento ipertestuale

    Infatti non deve inserire riferimenti se non in fase di sviluppo, poi vanno tolti a favore dell'associazione Tardiva(Latebinding)

    Quindi credo che prima Carlo debba leggere e capire meglio di cosa si parla...
  • Re: Inserimento collegamento ipertestuale

    Allora, come suggerito da Osvaldo, sono riuscito a aggiungere anche la libreria 11.0.
    Adesso la finestra di dialogo si apre regolarmente, riesco ad individuare il file di cui devo inserire il link, però, quando viene inserito nel campo, se ci passo sopra col mouse e ci clicco, non procede all'apertura del link.
    Cosa ho dimenticato?
  • Re: Inserimento collegamento ipertestuale

    Devo essere sincero che non ho compreso al 100% quello che vuoi fare. Mi fido del fatto che tu vuoi realizzare 2 cose:
    1. Creazione del path da scrivere dentro il tuo "campo": in questo ci sei riuscito.
    2. Dal campo ti aspetti il "collegamento ipertestuale" grazie a un clic "automatico": questo ti manca.

    Per me, vuoi che il buon @Alex mi ha sempre sconsigliato i campi di tipo collegamento ipertestuale, vuoi che non ti seguo qui, io avrei preferito un semplice campo "testuale" e l'evento clic che produce il seguente
    Private Sub TuoCampoTestuale_Click()
    Application.FollowHyperlink Me!TuoCampoTestuale.Value, , True
    End Sub
  • Re: Inserimento collegamento ipertestuale

    carlo pots ha scritto:


    Allora, come suggerito da Osvaldo, sono riuscito a aggiungere anche la libreria 11.0.
    Adesso la finestra di dialogo si apre regolarmente, riesco ad individuare il file di cui devo inserire il link, però, quando viene inserito nel campo, se ci passo sopra col mouse e ci clicco, non procede all'apertura del link.
    Cosa ho dimenticato?
    Quello che ti ha suggerito Osvaldo, si usa SOLO in fase di sviluppo, ma diventa un BOOMERANG in fase di disribuzione ed a lungo termine...

    Devi togliere i riferimenti alla Libreria Office e scrivere il codice in modo diverso, così
    
    Dim dialog As Object
    Const msoFileDialogFilePicker = 3
    Set dialog = Application.FileDialog(msoFileDialogFilePicker)
    
    With dialog
        .AllowMultiSelect = False
        .Show
        .Filters.Add "Access Projects", "*.PDF"
        Me.RIS_LINK= .SelectedItems.Item(1)
    End With
    Magari oltre al Copia/Incolla non farebbe male leggere ed approfondire questi aspetti tecnici...
  • Re: Inserimento collegamento ipertestuale

    Allora, parto dal presupposto che entrambi i metodi funzionano, e ringrazio anche Alex per lo "strappo alla regola", considerando che per me non si vive solo di copy&paste, ma ho anche l'abitudine di cercare di capire il funzionamento di certe istruzioni.
    Certo, in un mare in tempesta, ogni buco è porto, e se posso "carpire" righe di codice che mi agevolano un po' l'esistenza, non nego che lo faccio.
    D'altro canto sono partito che usavo Access come un handicappato, e adesso ho realizzato un DB con N automatismi (forse anche troppi, ma considerando chi deve usare il DB, forse sono ancora pochi).

    Detto questo, avrei voluto evitare di postare la questione, in quanto, sostanzialmente, la subroutine funzionava ... fintanto i nostri capi non hanno deciso di comprare dei nuovi computer (quelli di prima funziona(va)no con pizzichi e morsi sotto Win7) e quindi mi sono trovato in difficoltà oggettiva.
    Ovviamente, sebbene Osvaldo mi abbia dato una buona dritta sulle librerie, capisco comunque il punto di vista di Alex, perché comunque il problema va SUPERATO e non AGGIRATO, perché poi mi ritrovo sempre con lo stesso problema.

    Grazie Alex e grazie a Osvaldo.
  • Re: Inserimento collegamento ipertestuale

    Ora rileggi il primo suggerimento che avevo dato... e magari rendi conto di cosa avevo detto di complicato o cosa tu non riuscivi a comprendere e cerchi di approfondire...

    Questo approccio si definisce LATEBINDING che in questo caso ha una versione semplificata in quanto le librerie Office vengono legate all'oggetto Application.... ma di fatto deleghi il compilatore, o meglio l'interprete vba ad andarsele a cercare, in questo modo isa quelle che trova con la versione residente.
    Se invece le referenzi il vba pensa che tu sappia quello che fai e va a cercare solo le lib referenziate... e se non le trova va in errore.
    Questo accade proprio quando si fanno aggiornamenti...
Devi accedere o registrarti per scrivere nel forum
11 risposte