Newsgroup: it.comp.appl.access
Titolo: word e database

Salve, avrei bisogno di far inserire automaticamente in word dati di un
database esterno (due campi), ho visto il comando inserisci campo etc. ma
non riesco a capire cosa si deve fare.
ciao e grazie

 ha scritto nel messaggio
news:JPxMb.77601$VW.32...@news3.tin.it...

Forse intendi Stampa unione (da word)...
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:btuau0$fe2$1...@canarie.caspur.it...


pino ha scritto:

Quello lo usi nella stampa unione, se devi stampare dei moduli prendendo i
dati da una serie di record. Se devi aprire un documento e compilarlo in
automatico con i dati di un'unico record ti conviene usare un altro
sistema.
Io lo uso spesso e funziona benissimo. Allego un esempio di codice,
richiede il riferimento alla libreria di Word.
Il documento Word che apri e dove vai ad inserire i dati dovrà avere dei
campi modulo (Visualizza - Barre degli strumenti - Moduli, Campo modulo
testo) nella cui proprietà "Segnalibro" metterai il nome del campo (quelli
che nel mio esempio sono chiamati nominativo, nascita, citta, via).
Private Sub Lettera_Click()
Dim wrd As Word.Application
Dim doc As Word.Document
On Error GoTo gest_err
    Set wrd = GetObject(, "Word.Application")
    wrd.Visible = True
    wrd.Activate
    Set doc = wrd.Documents.Open("D:\cartella\NomeFileWord.doc")
    With doc
        .Bookmarks("nominativo").Select
        wrd.Selection.Text = cognome & " " & nome
        wrd.Selection.Range.Font.Bold = True
        .Bookmarks("nascita").Select
        wrd.Selection.Text = Format(Nascita, "dd.mm.yyyy")
        wrd.Selection.Range.Font.Bold = True
        .Bookmarks("citta").Select
        wrd.Selection.Text = cittares
        .Bookmarks("via").Select
        wrd.Selection.Text = via
    End With
    GoTo esci
 
gest_err:
    Select Case Err.Number
    Case 429: 'Word non era aperto, aprilo adesso
        Set wrd = CreateObject("Word.Application")
        Resume Next
    Case Else
        Msgbox Err.Number & " - " & Err.Description
    End Select
 
esci:
    Set wrd = Nothing
    Set doc = Nothing
End Sub
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 di word con il database esterno fatto in access
Scrivi alla fine del testo del messaggio precedente, come faccio io; grazie.
Basta che segui i passaggi obbligati che ti presenta word (strumenti -
stampa unione); dopo che hai indicato qual'è la tabella/query di access hai
a disposizione una barra strumenti dove puoi inserire i campi della
tabella/query sul documento.
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:btucod$lk$1...@news.newsland.it...

Ce ne vorregbbero cento come te!  è una settimana che sto lavorando su
questa cosa... se avessi avuto un po' di righe di codice da studiacchiarmi
sarebbe stato tutto più facile ...cmq guardando il tuo codice sono già
contento dei piccoli progressi che ho fatto!
A differenza tua sono riuscito a prendere un file template per la carta
intestata, un .dot per buona parte formattato.
grazie!

 grazie!
Questo metodo piace ai clienti, è molto scenografico, perchè scegli il
record nel db, premi un pulsante e ti vedi comparire word, aprire il
documento o il modello, ed assisti alla compilazione automatica dei campi
con i dati del db.



Ho provato ad associare ad un tasto in una form questa bellissima procedura.
All'altezza di Dim wrd As Word.Application mi dice Errore di compilazione
"Tipo definito adll'utente non definito".
Cosa devo fare?
Dove sto sbagliando?
Furo
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Furo
E come fai a sapere che è bellissima se non l'hai vista in funzione?
Eheheh!
Devi andare in Strumenti - Riferimenti e aggiungere il riferimento alla
libreria di Microsoft Word.
Poi devi avere un file di word con i campi modulo, e cambiare i nomi dei
campi per usare quelli del tuo db, insomma è solo un esempio, e un po' da
aggiustare per essere utilizzata ma non è difficile.



Ho risolto sostituendo le prime due dichiarazioni con queste
Dim wordApp As Object
Dim wordDoc As Object
e ora funziona perfettamente. Il problema nasce nel momento in cui voglio
portare in word il contenuto di una sottomaschera contenuta in quella dove
c'è il tasto per l'avvio di questa procedura.
Il campo Articolo di tale sottomaschera potrebbe avere più prodotti.
Come si può fare in word un campo modula che possa contenere più Articoli?


 Furo
Strano, vuol dire che avevi già impostato il riferimento alla libreria
Word, ma allora avrebbe dovuto funzionare anche con Word.Application e
Word.Document.
Il campo modulo serve solo per individuare il posto all'interno del
documento word in cui andare a scrivere i dati. Poi ci puoi mettere quello
che vuoi, per esempio una stringa contenente degli "a capo" (vbcrlf) verrà
messa in word su più righe.
Devi fare un ciclo che costruisca una stringa con tutti gli articoli della
sottomaschera, separati da virgole, trattini o quello che vuoi, o da
vbcrlf se vuoi un'articolo per riga, e poi invece di mandare a word
direttamente il valore del singolo campo, ci metti la stringa.



Nella sottomaschera chiamata SottomascheraArticoliOfferti, presente nella
maschera Offerte, ci sono i seguenti campi:
Articolo, Codice art, Descrizione, Consegna, Netto di vendita, Qtà, Costo
Ho provato solo il campo Articolo facendo
.Bookmarks("Articolo").Select
wordApp.Selection.Text = Articolo & vbCrLf
ma ricevo il seguente messaggio - errore di compilazione: variabile non
definita
Mi puoi fare tu l'esempio del ciclo che costruisca una stringa con tutti gli
articoli della
sottomaschera?
Furo.


 Furo.
Se scrivi solo Articolo non va perchè si aspetta di trovare una variabile
con quel nome o un controllo della maschera, invece tu ce l'hai come
controllo/campo nella sottomaschera.
Puoi fare il classico ciclo sul recordset o recordsetclone della
sottomaschera e accodare tutti gli articoli ad una stringa che poi
metterai nel campo modulo di word.
Dim Elenco As String
Elenco = ""
With Me.sottomaschera.Form.RecordsetClone
    .MoveFirst
    While Not .EOF
        Elenco = Elenco & !nome_campo & vbCrLf
        .MoveNext
    Wend
End With
wordApp.Selection.Text = Elenco



Funziona benissimo.
Grazie, Furo.



Problema...
Quanto sopra funziona benissimo però:
1 alcuni valori che vengono trasportati in word vengono da caselle
combinateche si trovano sia nella maschera principale che nella
sottomaschera.
Pertanto anzichè copiare il suo valore mi copia il riferimento numerico del
record.
Come posso fare in modo che mi copi il valore che in quel momento leggo
dentro alla casella combinata?
2 non riesco ad allineare come in una tabella i valori della
SottomascheraArticoliOfferti. Con riferimento al listato sopra sto provando
con queste stringhe modificate ma non assolvono allo scopo
Elenco = Elenco & !Consegna & vbCrLf & !Articolo & vbCrLf
...
.Bookmarks("Consegna").Select
.Bookmarks("Articolo").Select
wordApp.Selection.Text = Elenco
...
Furo


 Furo
Devi usare un solo bookmark, separare i due campi con una tabulazione
invece che con un ritorno a capo e impostare le tabulazioni nel documento
word (vedi insieme 'TabStops').
  Elenco = Elenco & !Consegna & chr(9) & !Articolo & vbCrLf
  ...
  .Bookmarks("Consegna").Select
  <imposta le tabulazioni>



Funziona benissimo. Grazie.
Non riesco però a capire come modificare la proprietà .Column della combo.
Dato il caso reale sopra mi fai vedere un esempio?


 Furo
Non puoi modificarla, puoi solo leggerla per ottenere il valore che si
trova in una delle colonne non associate.
Me.CasellaCombinata.Column(1)



Problema risolto.
Grazie, Furo
