Da access a word (casella di testo vuota)

di il
10 risposte

Da access a word (casella di testo vuota)

Ciao a tutti,
provo a postare qui il quesito proposto in altro argomento.
Intanto ringrazio Osvaldo e Alex per il loro contributo.
Nella compilazione di un documento word che "peschi" i dati da una tabella access come risolvere la mancanza di un dato in uno dei campi ?
Vale a dire se uno dei valori non è presente come posso evitare che la procedura si blocchi ??
Oppure sarebbe possibile avvisare l'utente che manca il dato tal-dei-tali con un popup e consentirgli quindi la modifica.

Grazie

10 Risposte

  • Re: Da access a word (casella di testo vuota)

    mazda91 ha scritto:


    se uno dei valori non è presente come posso evitare che la procedura si blocchi ??
    Volendo rispondere solo a questa domanda, spesso io dribblo il problema sostituendo ovunque c'è Null con una "stringa di lunghezza zero". Si ottiene digitando 2 volte apici doppi ("").

    mazda91 ha scritto:


    Oppure sarebbe possibile avvisare l'utente che manca il dato tal-dei-tali con un popup e consentirgli quindi la modifica.
    Si tratta di condizionare l'evento che va a pescare il dato nel campo X. Ma, se non ricordo male, l'operazione partiva da una maschera, su di essa possiamo creare set di azioni VBA (o macro)...non credo si possa fare direttamente da tabelle (mi si corregga se sbaglio). Con le macro la condizione sarebbe:
    Forms![NomeMaschera]![NomeCampo] Is Null
    vedi un po' tu come inserirla nel tuo codice VBA.
  • Re: Da access a word (casella di testo vuota)

    mazda91 ha scritto:


    Ciao a tutti,
    provo a postare qui il quesito proposto in altro argomento.
    Intanto ringrazio Osvaldo e Alex per il loro contributo.
    Nella compilazione di un documento word che "peschi" i dati da una tabella access come risolvere la mancanza di un dato in uno dei campi ?
    Vale a dire se uno dei valori non è presente come posso evitare che la procedura si blocchi ??
    Oppure sarebbe possibile avvisare l'utente che manca il dato tal-dei-tali con un popup e consentirgli quindi la modifica.

    Grazie
    Sinceramente non ricordo il modo con cui hai implemenato questa procedura...
    Se hai usato quanto suggerivo io con i Bookmark, la cosa è banale, verifica il valore e lo inserisci solo se non è nullo...!
  • Re: Da access a word (casella di testo vuota)

    La procedura seguita è stata quella dell'utilizzo dei bookmark.
    Non mi è chiaro come verificare che il valore non sia nullo.
    Quello che vorrei ottenere è che per la compilazione di un determinato documento siano presenti tutti i dati e in caso contrario la procedura avvisi che manca un ceto dato.
    Per cui il punto è evitare che alla richiesta di compilazione di un testo la procedura partendo si pianti per la mancanza del dato.

    Grazie
  • Re: Da access a word (casella di testo vuota)

    La verifica credo debba essere fatta su NULL e NULLSTRING, per questo in un solo colpo, si sfrutta il CASTING dei dati in questo modo
    
    If Len(Me!NomeTextBox.Value & vbNullstring)=0 Then
       ' In questo caso è NULLO o VUOTO
    Else
       ' in questo caso non è NULLO e non è VUOTO
    End If
  • Re: Da access a word (casella di testo vuota)

    Buongiorno Alex,
    il codice andrebbe quindi a essere modificato in questo modo ?

    Private Sub Comando74_Click()
    Dim Wrd As Word.Application, Doc As Word.Document
    Dim Rst As DAO.Recordset
    Dim Modello As String, NomeFile As String, i As Integer
    Dim Record As String, SQL As String
    Dim Tbl As String * 1
    Dim TotRiga As Currency, Totale As Currency
    Dim ReplSel As Boolean

    'Trova il nome, completo di percorso, del modello word
    '("prova.dot" nella stessa cartella del database)
    Modello = CurrentDb.Name
    Modello = Left(Modello, Len(Modello) - Len(Dir(Modello))) & "prova.dot"

    On Error Resume Next 'gestione errori step by step
    'cerca un'istanza di Word già aperta
    Set Wrd = GetObject(, "Word.Application")
    If Err.Number = 429 Then
    'se c'è stato un errore è perchè Word non era già aperto:
    'aprilo adesso
    Set Wrd = CreateObject("Word.Application")
    End If

    On Error GoTo 0 'ripristina la segnalazione degli errori

    'rendi visibile la finestra di Word:
    Wrd.Visible = True
    'attiva Word e portalo in primo piano:
    Wrd.Activate
    'abilita l'opzione "Sostituisci la selezione". Se non fosse
    'attiva, i campi modulo rimarrebbero all'interno del testo.
    ReplSel = Wrd.Options.ReplaceSelection
    Wrd.Options.ReplaceSelection = True

    'Apri un nuovo documento basato sul modello:
    Set Doc = Wrd.Documents.Add(Modello)
    'attivalo e portalo in primo piano:
    Doc.Activate

    'seleziona il bookmark del primo campo Nome cliente:

    'inserisco qui il codice di Alex e lo faccio per ogni campo

    If Len(Me!NomeTesto01.Value & vbNullstring)=0 Then
    ' In questo caso è NULLO o VUOTO
    Else
    ' in questo caso non è NULLO e non è VUOTO
    End If

    Doc.Bookmarks("Testo01").Select

    'e sovrascrivilo con il contenuto dei campi
    'Cognome e Nome:
    Wrd.Selection.TypeText Me.Data_consegna

    'ripeto qui il codice di Alex

    If Len(Me!NomeTesto02.Value & vbNullstring)=0 Then
    ' In questo caso è NULLO o VUOTO
    Else
    ' in questo caso non è NULLO e non è VUOTO
    End If

    Doc.Bookmarks("Testo02").Select
    Wrd.Selection.TypeText Me.Deposito

    eccetera eccetera

    'avvisa l'utente che l'esportazione è terminata
    Wrd.Application.WordBasic.MsgBox "Esportazione terminata", "Esportazione dati da Access"

    End Sub

    P.S.:Ho messo in rosso la parte modificata dal tuo codice. Non ho fatto ancora delle prove.

    Cosa te ne sembra.

    Grazie
  • Re: Da access a word (casella di testo vuota)

    Io ho fatto cosi:
    Doc.Bookmarks("cap").Select
           Wrd.Selection.TypeText IIf(IsNull(Me.cap), "< CAP >", Me.cap)
    in caso che tovi un campo null (in questo caso il CAP) inserisce in word la scritta <CAP>
  • Re: Da access a word (casella di testo vuota)

    marco61 ha scritto:


    Io ho fatto cosi:
    Doc.Bookmarks("cap").Select
           Wrd.Selection.TypeText IIf(IsNull(Me.cap), "< CAP >", Me.cap)
    in caso che tovi un campo null (in questo caso il CAP) inserisce in word la scritta <CAP>
    Certamente questa è una buona soluzione che potrebbe usare, se invece volesse SKIPPARE, quindi non scrivere nulla la variante sarebbe
    
    IF Len(Me.Cap.Value & vbNullString)>0 then 
        Doc.Bookmarks("cap").Select
        Wrd.Selection.TypeText Me.cap
    End if
    Suggerisco a [mazda91] di postare il codice usando il TAGCODE, e soprattutto di dare un senso logico a quello che ci propone...!
    I riferimenti o commenti che si leggono sono completamente scompaginati, i BOOKMARK non coincidono o non sono Nominali di quello che a mio avviso dovrebbe agevolare la compensione...!

    Cosa rappresenta un Bookmark chiamato [Testo01]...?
    Se sai che quel Bookmark rappresenta il NOME... chiamalo NOME o con una convenzione parlante esplicita... altrimenti chi ti legge pensa che nella confusione potrebbe essere meglio stare alla larga...!

    Per farti capire riporto un tratto di codice
    
    Doc.Bookmarks("Testo01").Select
    
    'e sovrascrivilo con il contenuto dei campi
    'Cognome e Nome:
    Wrd.Selection.TypeText Me.Data_consegna
    Ora in questo caso selezioni il bookmark [Testo01], poi dici nel commento che sovrascrivi il contenuto di Nome e Cognome, ma il controllo si chiama Data_Consegna....!!!!!!!!!!!!!!!

    Se a tuo avviso questo ci semplifica la comprensione......
  • Re: Da access a word (casella di testo vuota)

    Intanto grazie delle vostre risposte e mi rendo contro (anche) della pazienza, effettivamente nella fretta qualche sbadataggine la si commette.
    Come diceva il celebre Totò:"Gattibus per facere prescia facet gattini guercios"!
    Ad ogni modo non penso di inserire codice per lo skip perchè così facendo vorrebbe dire che l'utente può decidere di omettere la compilazione di un campo. Io vorrei fare in modo da NON costringerlo (perchè magari potrebbe non avere un certo dato) a compilare tutto ma fare in modo che se stampa un documento e a questo manca qualcosa:
    1* la procedura non si blocchi
    2* l'utente chiuda word e in access compili quello che manca.
    Compili, oppure come suggerisce Osvaldo risolva mettendo i due apici.
    Allora ho inserito il codice di marco61 in questo modo (per semplicità adesso metto solo una riga di codice):

    Doc.Bookmarks("cap").Select
    Wrd.Selection.TypeText IIf(IsNull(Me.cap), "< MANCA DATO >", Me.cap)

    Grazie
  • Re: Da access a word (casella di testo vuota)

    La mia impressione è che non vuoi fare 1mm in più per capire...!

    Lo SKIP non è che significa saltare a piè pari... se ragioni sul suggerimento dato, il test contiene un doppio controllo... e, nel caso sia vuoto fai una cosa nel caso sia compilato fai l'altra...

    Cosa sia una e l'altra devi saperlo tu...

    Ora se questo ancora non ti è chiaro io non so come procedere e chiudo il mio supporto.
  • Re: Da access a word (casella di testo vuota)

    Grazie Alex della tua risposta.
    Permettimi di dirti che la tua impressione è errata. Non è che io non mi sforzi di capire.
    Il problema deriva dal fatto che non conoscendo i comandi che hai inserito nel codice, io faccio delle prove e da quelle capisco (a volte di più a volte di meno) quanto succede.
    Per quanto riguarda i campi da popolare il mio ragionamento è questo:
    per esempio nel compilare (in word) un documento nel quale inserisco COGNOME e NOME potrebbe capitare che il campo NOME sia vuoto perchè nell'anagrafica delle persone dove viene previsto insieme a COGNOME (separatamente), venga inserito come sconosciuto.
    Perchè magari vi sono dati parziali e quindi mi sembrava utile evitare che la procedura si bloccasse.
    Il tuo codice funziona e quindi se trova il campo vuoto lo salta e mi compila il resto del testo però preferisco che mi avvisi (come suggerisce marco61, con il suo codice) della mancanza del dato.
    Preciso che quanto realizzo è dato dalle conoscenze che riesco a realizzare su questo forum, quindi nel bene e nel male ... grazie.

    mazda91
Devi accedere o registrarti per scrivere nel forum
10 risposte