Newsgroup: it.comp.appl.access
Titolo: Stampa Unione

Salve a tutti!
Sono nuovo del gruppo, vi spiego il mio problema:
lavoro su un programma in access97 che gestisce le offerte da inviare ai
clienti dell'azienda per cui lavoro, il programma produce un report che
prende l'intestazione dell'offerta da una tabella e il dettaglio
dell'offerta da una query. E' sorta la necessità di produrre un documento di
offerta in un formato che sia esportabile e modificabile, io ho pensato di
utilizzare la stampa unione di word ma non so come inserire due origini dati
diverse in uno stesso documento, inoltre ho la necessità di inserire un
filtro che mi permetta di stampare soltanto l'offerta che serve. Qualcuno
può indicarmi come risolvere il problema? Esiste una soluzione migliore?
Grazie
--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto nel messaggio
news:194Z243Z111Z98Y...@usenet.libero.it...

Sul sito comune (
www.sitocomune.com
) trovi un esempio di come realizzare
quello che chiedi...
Ciao.
--
Sergio MAZZA

 ha
scritto:

OK grazie per il consiglio.
Ho trovato alcuni tuoi esempi precedenti da cui ho preso il codice VBA
Problema:
Faccio eseguire il codice da un bottone su una maschera, si apre Word, si
apre il documento principale di stampa unione, word frulla per un pò (si
vede la clessidra) dopodicè esegue la stampa unione dell'intestazione
dell'offerta ma non sostituisce la parola segnalibro Elenco sul documento
word, però ne Access (97) nè Word mi segnalano errori. Non riesco ad
individuare l'errore, quale può essere?
Riporto il codice copiato, incollato e adattato:
Private Sub stampadettaglio_Click()
'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 = True
'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\IntOfferta.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
'cerco la stringa "Quì ci inserisco l'elenco"
oApp.Selection.Find.ClearFormatting
With oApp.Selection.Find
.Text = "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:=6
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:="Articolo"
.MoveRight Unit:=wdCell
.TypeText Text:="Descrizione"
.MoveRight Unit:=wdCell
.TypeText Text:="Q.tà"
.MoveRight Unit:=wdCell
.TypeText Text:="Prezzo €"
.MoveRight Unit:=wdCell
.TypeText Text:="Sconto"
.MoveRight Unit:=wdCell
.TypeText Text:="Netto €"
End With
'mi creo la query che mi restituisce il dettaglio della fattura
stringaSql = "Select CodArt, Descriz, Qta, TotSubLordo, Sconto 1, TotSub
From StampaRigheOffertaProva "
'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!CodArt
.MoveRight Unit:=wdCell
.TypeText Text:=rstDett!Descriz
.MoveRight Unit:=wdCell
.TypeText Text:=rstDett!Qta
.MoveRight Unit:=wdCell
.TypeText Text:=rstDett!TotSubLordo
.MoveRight Unit:=wdCell
.TypeText Text:=rstDett!Sconto_1
.MoveRight Unit:=wdCell
.TypeText Text:=rstDett!TotSub
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
Ancora una domanda, la query da cui prendo il dettaglio dell'offerta ha una
formattazione diversa a seconda che si verifichino o meno alcuni controlli e
contiene anche alcuni campi calcolati, per ora, nell'esempio di prova li ho
esclusi, è possibie unire in word anche questi ultimi???



Ciao.
--
Sergio MAZZA

 ha

Grazie per il consiglio, ora ho un altro problema, la query da cui prendo i
dati per l'intestazione contiene due campi memo, quando esguo la stampa
unione mi associa soltanto i primi record della query, ho provato a togliere
i due campi e mi associa correttamente tutti i record, ho cercato nell'help
di word e sul sitocomune ma non ho trovato nulla, esiste un modo di
risolvere il problema dato che i campi memo contengono le specifiche
dell'offerta e non posso eliminarli(descrizione, testo contratto, ecc..)?
Grazie ancora



Io ho provato a fare la stampa unione con una query che mi restituisce una
serie di campi, uno di questi č memo e contiene un testo lungo 2651
caratteri (spazi inclusi); non ho riscontrato nessun problema.
Invece di eliminarli, i campi memo, prova a dividerli in piů campi...
Ciao.
--
Sergio MAZZA

 ha

Ti ringrazio veramente molto per l'aiuto, ho risolto il problema dei campi
memo filtrando le query prima di eseguire la stampa unione, ora, scusami se
approfitto ancora della tua pazienza, ma come cavolo faccio a dare la
formattazione che mi serve al database di dettaglio "mergiato" nel doc
principale di stampa unione? Da dove devo agire? Se l'unico modo č
formattarsi ogni volta il doc finale risultato della stampa unione si perde
molto dell'automazione.
Grazie ancora
Ciao
Andrea


 Andrea
Puoi utilizzare la formattazione automatica della tabella. Questo è un
esempio di codice VBA generato dal generatore di macro (word) per applicare
il secondo tipo di formattazione (me so' incartato?)...
Es.
'-----------
oApp.Selection.Tables(1).AutoFormat Format:=wdTableFormatClassic1,
ApplyBorders:=True, ApplyShading:=True, ApplyFont:=True, ApplyColor:=True, _
        ApplyHeadingRows:=True, ApplyLastRow:=False, ApplyFirstColumn:=True,
_
        ApplyLastColumn:=False, AutoFit:=True
'-----------
Non ho sotto mano il tuo codice, quindi considera che:
- oApp è l'oggetto dichiarato Word.Application;
- Tables(1)  fa riferimento alla prima tabella (dall'alto verso il basso)
presente nel documento;
- nell'help di word, voce: Codici di campo: Database; e in quello VBA voce:
Metodo AutoFormat trovi le spiegazioni per personalizzare la
formattazione...
Il consiglio per fare in fretta è quello di utilizzare il generatore di
macro simulando l'operazione di formattazione automatica e utilizzare il
codice generato, come ho fatto io...
Ciao.
--
Sergio MAZZA