Autocompilazione dei bookmarks di word da una maschera Access 2016

Anonimo
2019-01-21T21:52:48+00:00

Buonasera a tutti.

Ho un problema nell'apertura di un modulo Word da un pulsante di una maschera di Access 2016.

Mi spiego meglio: Ho creato un database con Access 2016 in cui c'è una maschera che contiene dei pulsanti che servono per aprire  determinati modelli di Word da me creati con dei bookmarks. Praticamente al click del pulsante si dovrebbe aprire in primo piano il determinato modello di Word con i Bookmarks compilati con i campi "Cognome", "Nome" e "Data di nascita" attinti dalla schermata della maschera di Access in quel momento aperta. Complilando l'evento "su click" nelle proprietà dello specifico bottone con il codice che di seguito posterò, ottengo si l'apertura in primo piano dello specifico modello di Word, ma i Bookmarks sono vuoti in quanto non so come creare i riferimenti ai campi nel codice. Potreste cortesemente aiutarrmi su come devo creare il codice idoneo al caso?

Il codice da me usato è il seguente:

Dim wshshell As Object

Set wshshell = CreateObject("wscript.shell")

wshshell.Run """C:\Percorso\Nome_file"""

Rimanendo in attesa di suggerimenti, ringrazio anticipatamente.

Microsoft 365 e Office | Access | Per la casa | 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

36 risposte

Ordina per: Più utili
  1. Anonimo
    2019-01-31T19:40:40+00:00

    Ciao Vladimiro,

    ti ho postato le due versioni di codice in mio possesso in quanto quello tuo non dava i risultati da me voluti.

    A questo punto arrivati visto che entrambi i codici che ho io svolgono la loro funzione ma non completamente, potresti essermi d'aiuto per inserire i riferimenti ai bookmarks nella mia prima versione del codice o per visualizzare in primo piano il file di Word nella mia seconda versione di codice? Magari come si fa a richiamare prima della seconda versione di codice, contenuto in un private sub, un'altra serie di codice contenuto in un modulo standard (che serve proprio a portare in primo piano il file di Word)?

    Grazie ancora di tutto.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-01-30T20:06:46+00:00

    Ciao Vladimiro,

    ho ritardato qualche giorno per risponderti in quanto ho voluto ritestare il codice da te postato e rivedere ancora una volta il documento del link che mi hai consigliato (che tra l'altro io avevo già).

    Purtroppo ti devo confermare che non c'è verso di far compilare i bookmarks. Anche seguendo il doc del link non si ottiene nulla. Forse è cambiato qualcosa con le istruzioni delle versioni successive di Access (io ho il 2016 mentre nel doc si usa il 97 o il 2000).

    Io ho già un codice che funziona perfettamente e i bookmarks si compilano in modo corretto, l'unico problema è che il file di Word viene aperto ridotto a icona e non in primo piano, altrimenti tutto funzionerebbe a meraviglia.

    Avrei anche un altro listato di codice da inserire in un modulo standard (che porta in primo piano il file di Word) però va richiamato prima della sub che fa aprire Word. E siccome non so come fare per richiamarlo sono "in panne". Ora ti posto il codice in mio possesso che funziona perfettamente compilando i bookmarks ma aprendo Word ridotto a icona, può darsi che tu riesca a trovare la dritta idonea.

    Dim appword As Object 'Word.Application

    Dim Doc     As Object 'Word.Document

    Dim fPath   As String

    Dim FName   As String

      On Error Resume Next

    Set appword = GetObject(, "Word.Application")

    Error.Clear

    If Err.Number <> 0 Then

         Set appword = CreateObject("Word.Application")

    End If

    appword.Visible = True

     fPath = "C:\MioPercorso"

    FName = "MioWordFile.docx"

      With appword

         Set Doc = .Documents.Open(fPath & FName)

         .Activate

    End With

      With Doc

         .Bookmarks("Cognome").Range.insertAfter Me.Cognome

         .Bookmarks("Nome").Range.insertAfter Me.Nome

         .Bookmarks("Data_di_nascita").Range.insertAfter Me.Data_di_nascita

         End With

    Set Doc = Nothing

    Set appword = Nothing

    Questo è quanto. Spero di aver fatto cosa utile.

    In attesa di tuo riscontro ti ringrazio cordialmente

    Ciao,

    io ti avevo indicato un modo diverso per gestire il percorso senza specificarlo in modo che se un domani il database e il file di Word lo davi a qualcuno, non avevi problemi a riguardo... fai tu!

    La routine che hai scritto va bene, l'unica cosa che devi modificare è proprio il file di Word, salvandolo come modello:

    modificando nella seguente riga di codice l'estensione ".docx" del file di Word:

    FName = "MioWordFile.dotx"

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-01-29T20:58:16+00:00

    Ciao Vladimiro,

    ho ritardato qualche giorno per risponderti in quanto ho voluto ritestare il codice da te postato e rivedere ancora una volta il documento del link che mi hai consigliato (che tra l'altro io avevo già).

    Purtroppo ti devo confermare che non c'è verso di far compilare i bookmarks. Anche seguendo il doc del link non si ottiene nulla. Forse è cambiato qualcosa con le istruzioni delle versioni successive di Access (io ho il 2016 mentre nel doc si usa il 97 o il 2000).

    Io ho già un codice che funziona perfettamente e i bookmarks si compilano in modo corretto, l'unico problema è che il file di Word viene aperto ridotto a icona e non in primo piano, altrimenti tutto funzionerebbe a meraviglia.

    Avrei anche un altro listato di codice da inserire in un modulo standard (che porta in primo piano il file di Word) però va richiamato prima della sub che fa aprire Word. E siccome non so come fare per richiamarlo sono "in panne". Ora ti posto il codice in mio possesso che funziona perfettamente compilando i bookmarks ma aprendo Word ridotto a icona, può darsi che tu riesca a trovare la dritta idonea.

    Dim appword As Object 'Word.Application

    Dim Doc     As Object 'Word.Document

    Dim fPath   As String

    Dim FName   As String

      On Error Resume Next

    Set appword = GetObject(, "Word.Application")

    Error.Clear

    If Err.Number <> 0 Then

         Set appword = CreateObject("Word.Application")

    End If

    appword.Visible = True

     fPath = "C:\MioPercorso"

    FName = "MioWordFile.docx"

      With appword

         Set Doc = .Documents.Open(fPath & FName)

         .Activate

    End With

      With Doc

         .Bookmarks("Cognome").Range.insertAfter Me.Cognome

         .Bookmarks("Nome").Range.insertAfter Me.Nome

         .Bookmarks("Data_di_nascita").Range.insertAfter Me.Data_di_nascita

         End With

    Set Doc = Nothing

    Set appword = Nothing

    Questo è quanto. Spero di aver fatto cosa utile.

    In attesa di tuo riscontro ti ringrazio cordialmente

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-01-26T22:55:01+00:00

    Ciao,

    purtroppo Sandro Peruz è già da un po' che ha abbandonato questa community.

    Tornando a noi,

    Grazie Vladimiro Leone per l'interessamento.

    Ho seguito i tuoi suggerimenti testando il codice che hai postato, però purtroppo non va come a me serve.Primo perché non compila i segnalibri e poi perché dopo chiuso il database, alla sua riapertura mi apre il file di Word ridotto a icona, non in primo piano.

    Impossibile che non compili i segnalibri, probabilmente non corrisponde il nome del Bookmarks sul modulo di word, oppure il problema deriva direttamente dal controllo della maschera.

    Per quanto riguarda la riapertura del db con il modulo di Word ridotto a icona, credo che il motivo, anche in questo caso, sia da ricercarsi altrove.

    Basta fare un piccolo esempio sempre sullo stesso codice, eliminando l'unico Bookmarks che ho inserito:

        Modello = CurrentDb.Name

        Modello = Left(Modello, Len(Modello) - Len(Dir(Modello))) & "TuoFileWord.dot"

        On Error Resume Next

        Set Wrd = GetObject(, "Word.Application")

        If Err.Number = 429 Then

            Set Wrd = CreateObject("Word.Application")

        End If

        On Error GoTo 0

        Wrd.Visible = True ' <- apertura del modulo

        Wrd.Activate

        ReplSel = Wrd.Options.ReplaceSelection

        Wrd.Options.ReplaceSelection = True

        Set Doc = Wrd.Documents.Add(Modello)

        Doc.Activate

        Set Doc = Nothing

        Set Wrd = Nothing

    ' chiusura del modulo o creazione di un file sulla base del modulo

    Inoltre ti avevo consigliato il seguente link non menzionato nella risposta:

    se vuoi approfondire, ti consiglio di scaricare al seguente link:

     http://www.donkarl.com/it/ - Automazione Access-Word  Marco Pizzamiglio

    Qui, oltre ad un piccolo manuale che ti spiega passo, passo i passi da compiere, ci sono ben tre database con esempi di automazione Access - Modulo di Word.

    Per finire, se riesci a mettere on line un piccolo esempio di database con un modulo di word, vedrai che qualcuno ti darà una mano.

    Io purtroppo, da lunedì sarò via per tre giorni.

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2019-01-24T20:32:42+00:00

    Grazie Mimmo57 per la risposta.

    Si io dico "attinti dalla schermata della maschera di Access in quel momento aperta", ma è chiaro che la maschera in quel momento aperta non è altro che un record di una tabella dove sono memorizzati i dati.

    Per quanto riguarda la stampa unione, no, non ho necessità di quella. Non devo stampare una serie di documenti. A me serve solo riportare nei segnalibri di Word alcuni campi del record che in quel momento è visualizzato in modalità maschera. Comunque grazie ugualmente,

    La risposta è stata utile?

    0 commenti Nessun commento