HyperlinAddress

di il
10 risposte

HyperlinAddress

Buongiorno a tutti. E' la prima volta in assoluto che uso un forum, percio' chiedo anticipatamente scusa se commetto degli errori. Mi presento: sono un impiegato che utilizza access per migliorare la gestione di alcuni aspetti lavorativi e non ho una grande conoscenza di programmazione.
Vi anticipo che prima di scrivere ho cercato tanto senza trovare soluzione
sto sviluppando un database in access per la gestione di un archivio di documenti in arrivo e in partenza. dopo la registrazione, il sistema genera un nr univoco per ogni documento con cui nomino il file corrispondente + .txt o .docx. che viene memorizzato una cartella esterna. Nella maschera relativa ad una specifica registrazione, dove e' visibile il relativo nr univoco, ho inserito un pulsante per aprire il documento cui si riferisce. ho usato:
Command5.HyperlinkAddress = ''C:\percoso'' & ''\'' & Me.NrUnivoco & ''.Txt''
funziona perfettamente, ma posso aprire solo i file .txt, se provo ad aggiungere una riga con .docx, non funziona piu'.
Dato che ho esaurito le mie ricerche e le mie capacita', sarei molto grato se qualcuno potesse indicarmi la soluzione.
grazie

10 Risposte

  • Re: HyperlinAddress

    biker1 ha scritto:


    funziona perfettamente, ma ... non funziona piu'.
    Quindi non funziona perfettamente.

    biker1 ha scritto:


    se provo ad aggiungere una riga con .docx, non funziona piu'.
    ci fai vedere questa parte di codice? perché detto così è "impossibile".
    Dà errore? non succede niente e basta? C'è un programma predefinito per l'apertura dei file docx? Se lo apri con il doppio click dalla finestra di esplora risorse (o esplora cartelle o esplora file che dir si voglia) ci riesci?
  • Re: HyperlinAddress

    biker1 ha scritto:


    Command5.HyperlinkAddress = ''C:\percoso'' & ''\'' & Me.NrUnivoco & ''.Txt''
    Scritto così per me non significa nulla...e non riesco a capire come fa a funzionare. Giustamente Philcattivocarattere chiede che tu esponga tutto il codice VBA, comprendendo la riga che ti dà errore.
    Il comando per aprire i file esterni al database è Application.FollowHyperlink con tutti i suoi argomenti. Leggi qui
    https://docs.microsoft.com/en-us/office/vba/api/Access.Application.FollowHyperlink
  • Re: HyperlinAddress

    Avete ragione, scusate. Di seguito il codice che ho usato e che mi fa aprire solo i file .txt

    Private Sub Comando5_Click()
    Command5.HyperlinkAddress = ''C:\percoso'' & ''\'' & Me.NrUnivoco & ''.Txt''
    End Sub

    Con questo riesco ad aprire i file .txt, ma non so come fare a ''dirgli'' di aprire anche i file .docx
    grazie
  • Re: HyperlinAddress

    Mah... che quella riga di codice apra il file txt mi suona veramente strano, vista la guida Microsoft sull'uso di HyperlinkAddress (che solo dopo l'intervento di Osvaldo ho riconosciuto come tale, l'avevo confuso con FollowHyperlink che avrei usato)
    In ogni caso è ovvio che finché nel codice non farai riferimento al file docx non capirà mai che deve aprirlo.
  • Re: HyperlinAddress

    Per favore, abbiate pazienza della mia ignoranza! con le mie poche conoscenze, trovo difficile anche spiegarmi.
    facciamo conto che dentro una cartella ho i file che si chiamano 1.txt e 2.docx e che devo aprirli alternativamente a seconda che nella scheda di registrazione stia visualizzando il NrUnivoco 1 o il NrUnivoco 2.
    scrivendo la seguente riga di codive Vi assicuro che riesco ad apre il file .txt:

    Private Sub Comando5_Click()
    Command5.HyperlinkAddress = ''C:\percoso'' & ''\'' & Me.NrUnivoco & ''.Txt''
    End Sub

    non sapendo come fare per aprire anche il .docx ho provato a scrivere:

    Private Sub Comando5_Click()
    Command5.HyperlinkAddress = ''C:\percoso'' & ''\'' & Me.NrUnivoco & ''.Txt''
    Command5.HyperlinkAddress = ''C:\percoso'' & ''\'' & Me.NrUnivoco & ''.docx''
    End Sub

    in questo caso cerca solo il file .docx e non piu' il file .txt anche se se sto sulla maschera che visualizza il NrUnivoco 1 il cui documento e' memorizzato come 1.txt
  • Re: HyperlinAddress

    Prendendo per buono che funziona, prova a scriverlo così
    Private Sub Comando5_Click()
    Command5.HyperlinkAddress = ''C:\percoso'' & ''\'' & Me.NrUnivoco & ''.*''
    End Sub
    P.S.: Come da regolamento, quando scrivi nella finestra dell'editor, clicca in basso sul tasto "Editor completo & Anteprima", seleziona il codice VBA, poi clicca sul tasto in alto </> per farlo apparire con i tipici caratteri monotype più familiari ai programmatori.
  • Re: HyperlinAddress

    Ho provato, mi dice:
    impossibile aprire il file 1.* Impossibile aprire il file specificato
  • Re: HyperlinAddress

    Secondo me hai queste possibilità:
    A) Devi creare una If (con gestione errore) tale che se c'è errore con .txt, deve eseguire la riga con .docx.

    B) Se non vuoi gestire l'errore, devi controllare se il file esiste nella directory, sempre con If. Si usa la funzione Dir. Penso sia la soluzione più corretta/ortodossa. Qui di seguito ti riporto dei miei appunti che spiegano come usare MkDir (che non ti serve) e Dir
    Dir e MkDir.
    È possibile creare una cartella sfruttando MkDir:
    MkDir "C:\Cartella1\Cartella2\Cartella3"
    si può usare anche una variabile K di tipo Stringa in cui è stato preventivamente assegnato un path
    Dim K As String
    K = "C:\Cartella1\Cartella2\Cartella3"
    MkDir K
    Prima di creare una directory conviene sempre controllare che se essa esiste già o no, grazie a Dir
    Dim K As String
    K = "C:\Cartella1\Cartella2\Cartella3"
    If Dir(K, vbDirectory) = "" Then MkDir K
    Dir permette di tirare fuori l'ultima parte a destra del path. Dir si può usare anche nel caso in cui il path termina con un file
    K = Dir("C:\Cartella1\Cartella2\Cartella3\File.pdf")
    in K ci va a finire "File.pdf"
    Se si Esporta (OutputTo) un file e si vuole preventivamente controllare se tale file esiste o meno nella directory
    If Dir(PathReferto, vbDirectory) = "" Then DoCmd.OutputTo acOutputReport, "RefertoCorrente", acFormatRTF, PathReferto
    in questi casi ho usato vbDirectory accanto e mi sono sempre trovato bene (non trascurarlo).

    C) Soluzione a basso costo: crea 2 pulsanti con 2 codici diversi.
  • Re: HyperlinAddress

    Grazie Osvaldo, sei stato gentilissimo.
    mi mettero' al lavoro con le indicazioni che mi hai dato.
  • Re: HyperlinAddress

    Buon giorno,
    premetto che, di solito non amo sconvolgere il lavoro già fatto da altri e mi limito a rispondere al quesito ma questa volta devo trasgredire questa regola.

    1° Ipotesi il Db in oggetto è già in uso da diverso tempo? Contiene una gran quantità di file?

    Se la condizione è questa l'intervento è un pò piu complesso, ma non impossibile accenno soltanto:
    1) Caricare in una Tab tutti i nomi file.
    2) Con un'operazione su stringa estrarre l'estensione
    3) aggiornare l'estensione in apposito "Campo" , atteso che il NomeFile è costituito dall'id, è un gioco da ragazzi, ma io non lo sono da diverso tempo, mi potrei impegnare ad esserlo se tu ci faresti sapere che il problema è questo.

    2° Ipotesi stiamo realizzando ora il DB?

    Nella 2° ipotesi si procede così o perlomeno io faccio così:

    a) il nome del file, compreso di estensione lo memorizzo al momento del salvataggio, nel caso in specie (il nome del file è costituito dall'ID univoco, ottima scelta) basterebbe inserire una combo costituita dalle sole estensioni .txt .pdf ...etc e non consentire il salvataggio del record se non dopo aver selezionato l'estensione. (è quando carico il file che conosco l'estensione poi la debbo cercare.)

    b) operare sul link:
    su clik del pulsante o sul nome del documento, opportunamente sottolineato inserisco questo codice:
     Dim Link as string
        Link=Application.CurrentProject.Path & "\IlNomeTuaCartella\"& me.NomeMioFile & "\"& me.NomeTuaEstensione
    Application.FollowHyperlink Link
    Questo prevede che il tuo "Progetto" abbia come struttura:
    C:\ CartellaIlMioProgetto\-CartellaiMieiFile\File Access (il tuo file access)
    Il beneficio che trarresti da questo impianto consente che, spostando la cartella "CartellaIlMioProgetto" tutto continua a funzionare...sempre
Devi accedere o registrarti per scrivere nel forum
10 risposte