Newsgroup: it.comp.appl.access
Titolo: Stampa Unione - creazione elenco

salve a tutti sono entrato da poco nel NG ed ho già bisogno di aiuto
me la cavo piuttosto bene ma questa volta ho proprio bisogno del vostro
aiuto
problema
stò creando un mdb con access 97 ed ho l'esigenza di creare diverse delle
stampe in word 97
e questo perche sono delle stampe che spesso cambiano non tanto nel
contenuto ma nella struttura
e quindi uso word 97 non c'è nessun problema nel collegare i dati filtrare
il record giusto il proble ma è che
non ho la più pallida idea di come posso fare a fargli creare en elenco di
dati
 se non sono stato a bastanza chiaro ecco un esempi
gli asterischi rappresentano la lettera che cambia di continuo e le "q"
invece rappresentano tanti record simile ad dettagli di una fattura se
ancora non sono stato abbastanza chiaro
spero possiate aiutarmi grazie mille
**************************
**************************
*************************
**************************
q    q    q    q    q    q    q    q    q
q    q    q    q    q    q    q    q    q
q    q    q    q    q    q    q    q    q
q    q    q    q    q    q    q    q    q
q    q    q    q    q    q    q    q    q

 ha scritto nel messaggio
news:EsrZ6.25526$8R5.6...@news.infostrada.it...

Sei stato chiarissimo e questo è uno dei piccoli problemi di word'97, mi
sembra che nel 2000 ci sia la possibilità di "leggere" una tabella access
con istruzioni sql e connessione odbc.
Direi che la soluzione da scegliere è in base alla tua esigenza, cioè, se le
righe sono un umero fisso o variabile.
Se è fisso puoi utilizzare l'istruzione di campo (word) nextif che legge il
record successivo al verificarsi della condizione. Quindi se hai 10 righe
inserirai 9 nextif perchè il primo già lo leggi e la condizione per leggere
i prossimi record è se un campo non è vuoto (scegli tu quale).
Se è variabile allora diventa un po' più difficile, perché dive crearti una
routine (VBA in Access) che ti filtra il primo record dell'intestazione
della fattura (Ditta, numero fattura etc. etc.), esegue la stampa unione e
sul documento appena creato con la stessa routine leggi i dati filtrati del
dettaglio e li scrive nella tabella del documento word a quel punto o salvi
il doc o lo stampi. Il ciclo si ripete per ogni intestazione di fattura e
passando dal modello di stampa unione al documento creato per scriverci la
tabella...
Ciao.

 wrote in message
9h72c9$j3r$1...@canarie.caspur.it...

Ti chiedo scusa ma non sono sicuro di aver ben capito il tuo suggerimento
specificando che si tratta di un numero di record variabili che può andare
da uno a N
ti prego di rispiegarmi come fare perche non ho capito se esiste un modo ho
devo
in pratica usare un istruzione simile al sendkeys per scrivere tutto per
intero la parte del dettaglio
scusa ancora per la mia non conoscenza
grazie ciao

 grazie ciao
Il modo (non l'unico) esiste ma non è risolvibile un 4 e 4 = 8.
Prendiamo per buono che la tipologia della lettera word è simile ad una
fattura, intestazione + dettaglio, così ci intendiamo.
Ti spiego come faccio io:
- creati la query che ti restituisce l'intestazione della fattura;
- creati il documento word (fattura) e associalo (stampa unione) alla query
"intestazione" creata;
- inserisci nel documento word una parola o frase che utilizzerai come
segnalibro per la tabella dei dettagli; per esempio "Quì ci inserisco
l'elenco".
Ora si tratta di eseguire, da access, prima la stampa unione
dell'intestazione della fattura (documento word) poi di inserire la tabella
relativa al dettaglio nel documento generato.
- In un modulo creati una subroutine e chiamala come vuoi;
- inizi a scrivere il codice che:
    - "chiami" l'oggetto Word;
    - apri il documento "fattura";
    - ti ricrei una stringa con l'istruzione sql che ti seleziona
l'intestazione della fattura da stampare;
    - la applichi al documento word;
    - esegui la stampa unione con output su un nuovo documento;
    - selezioni il documento creato;
    - trovi la parola o frase "magica";
    - la selezioni per sovrascriverla;
    - ti selezioni, con una query, i dati del dettaglio;
    - inizi a scrivere tante righe di tabella per ogni record restituito
dalla query;
    - chiudi senza salvare il modello della fattura e stampi o visualizzi il
documento creato.
Facile no?
Proviamo con un po' di codice:
'--------------
Sub stampaDettaglio()
'gestisco l'errore altrimenti rimango in mutande
On Error GoTo stampaDettaglio_err
'chiamiamo word e per ora non lo rendiamo visibile
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Visible = False
'variabile contenente il recordset del Dettagglio
Dim rstDett As Recordset
'variabile contenente l'istruzione sql
Dim stringaSql As String
'apro il modello della fattura
oApp.Documents.Open "C:\Documenti\Fattura.doc"
'eseguo la stampa unione dell'intestazione con output su un nuovo documento
With oApp.Documents(1).MailMerge
    .Destination = wdSendToNewDocument
    .Execute
End With
'attivo il documento creato
oApp.Windows(2).Activate
'ciclo fino alla fine del recordset
Do While Not rstDett.EOF
'cerco la stringa "Quì ci inserisco l'elenco"
oApp.Selection.Find.ClearFormatting
With oApp.Selection.Find
    .Text = "Quì ci inserisco l'elenco"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
oApp.Selection.Find.Execute
'inserisco la tabella con X colonne, intestazione Y righe
oApp.ActiveDocument.Tables.Add Range:=oApp.Selection.Range,
NumRows:=rstDett.RecordCount, NumColumns:=4
oApp.Selection.Tables(1).Select
'tabella senza griglia
oApp.Selection.Tables(1).Borders.Enable = False
'mi posiziono e
oApp.Selection.MoveLeft Unit:=wdCharacter, Count:=1
'scrivo l'intestazione della tabella
With oApp.Selection
    .TypeText Text:="Numero Articolo"
    .MoveRight Unit:=wdCell
    .TypeText Text:="Descrizione"
    .MoveRight Unit:=wdCell
    .TypeText Text:="Costo unitario"
    .MoveRight Unit:=wdCell
    .TypeText Text:="Quantità"
End With
'mi creo la query che mi restituisce il dettaglio della fattura
stringaSql = "Select numeroArticolo, DescrizioneArticolo, costoUnitario,
quantita From DettaglioFattura Where idFattura = " & forms!Fattura!id
'mi prendo il recordset
Set rstDett = CurrentDb.OpenRecordset(stringaSql)
'tanto pe' nun sape' ne' legge ne' scrive
rstDett.MoveLast
rstDett.MoveFirst
'scrivo il dettaglio della fattura
Do While Not rstDett.EOF
    With oApp.Selection
        .MoveRight Unit:=wdCell
        .TypeText Text:=rstDett!numeroArticolo
        .MoveRight Unit:=wdCell
        .TypeText Text:=rstDett!descrizioneArticolo
        .MoveRight Unit:=wdCell
        .TypeText Text:="L." & Format(rstDett!costoUnitario, "#,###")
        .MoveRight Unit:=wdCell
        .TypeText Text:=Format(rstDett!quantita, "#,###")
    End With
    rstDett.MoveNext
Loop
'posso visualizzare il risultato per un controllo
oApp.Visible = True
'stampo il documento appena creato
oApp.ActiveDocument.PrintOut
'chiudo il documento senza salvarlo
oApp.Windows(2).Close SaveChanges:=wdDoNotSaveChanges
'chiudo il modello della fattura senza salvarlo
oApp.Windows(1).Close SaveChanges:=wdDoNotSaveChanges
'chiudo word
oApp.Quit
'chiudo il recordset
rstDett.Close
'rilascio gli oggetti
Set oApp = Nothing
Set rstDett = Nothing
MsgBox "Stampa terminata."
stampaDettaglio_exit:
    Exit Sub
stampaDettaglio_err:
    oApp.Visible = True
    MsgBox Err.Number & ", " & Err.Description
End Sub
'--------------
Devi prima inserire i riferimenti alla libreria di word (strumenti -
riferimenti)...
Ciao.

Scusa ma mi sono accorto che c'č un errore:
Dopo:
'----------
...
'attivo il documento creato
oApp.Windows(2).Activate
********* l'istruzione seguente non ci va' *************
'ciclo fino alla fine del recordset
Do While Not rstDett.EOF
**********   fine *************************
...
'-------------
Ciao.



Infatti avevo trovato qualche problema  a farla funzionare, 
Grazie.
Ancora una domandina (ne approfitto, lo so), 
Se uno deve aggiungere piů dettagli, si puň fare in modo che altre
query (stringhe SQL) vengano aggiunte?
(mi sarň spiegato?)
Scusa ancora e grazie....


Continua a darmi 
errore 91, variabile oggetto, o variabile del blocco with non
impostata
Cosa posso aver sbagliato??? eppure ho cotrollato tutti i passi
e mi sembrano a posto
Grazie Max