Newsgroup: it.comp.appl.access
Titolo: Query Invio Comunicazione Scadenza...

salve forse il titolo immesso non è il massimo...ora provo a spiegarmi
il problema è questo ho un database con lista di pazienti i quali hanno una
scadenza di ticket di esenzione... ho fatto una query che digitando x
esempio 11/2000 mi elenca tutte le scadenze di novembre 2000 in ordine
crescente...Ok...
ora io vorrei che a tutti i pazienti venisse inviata una lettera con un
testo da me scritto che li informa della scadenza....possibilmente su un
foglio unico A4 nel quale venga stampato l'indirizzo ed il testo da me
scritto.... non è difficile x voi ...vero ???
Please explain steb by step...oggi non ho mangiato le noccioline...
--
SuperPippo :o))

 ha scritto nel messaggio
news:X9Ah5.52179$wS2.4...@news.infostrada.it...

Come vuoi scrivere questa lettera? Report access? Documento word? Write?
Notepad? Magari lo vuoi inviare via fax o e-mail?
Ciao.

 Ciao.
Beh ad essere sincero non ho le idee chiare... ma sicuramente nella maniera
in cui il tutto sia il piů veloce ed efficiente possibile... credo sia  +
fattibile in report di acces (volendo posso scriverle anche in word) perchč
come dicevo se devo spedire 256 lettere ad altrettanti pazienti la variabile
nel testo deve essere chiaramente il codice_esenzione e la data di scadenza,
il resto del test lo scriverei comune a tutte le lettere...invece
chiaramente 256 saranno gli indirizzi presi dalla tabella dai campi
Cognome, Nome, Via, Cap, Citta Residenza...spero di essermi spiegato bene
..............č difficile tutto ciň ???
--
SuperPippo :o))


Diciamo che se pianifichi prima il lavoro non dovresti incontrare
difficoltà.
Io farei così:
- definisco i dati che mi servono per stampare la lettera inserendoli in una
query di selezione e le eventuali condizioni per filtrare gli stessi;
- con Word creo la lettera inserendogli i campi della query creata
(strumenti - stampa unione);
- nella maschera di access creo un bottone che mi apre word e la lettera da
inviare eseguendo (via VBA) il mailmerge, decidendo prima se il risultato
deve essere inviato direttamente alla stampante o salvato su un'altro
documento word;
Per quanto riguarda la creazione di un report invece del documento word;
(io) preferisco word con la sua facilità nella gestione dei testi.
Ciao.

<CUT>

Gent.mo Sergio... lo sò ...x te è semplice...x me no... ho smanettato un pò
in Word, Stampa Unione...ed ho visto che posso effettuare dei collegamneti
con Qry..(premetto che Word l'ho usato sempre x scrivere delle sempici
lettere)....
Cmq... partendo da dove sono arrivato io...altrimenti mi confondo le
idee...mettendo un bottone di comando in maschera che mi apri Word questo lo
sò fare, che mi attivi la qry che ho già creato che mi trova tutte le
scadenze supponiamo di  *12/2000*...mi apre la tabella con tutte le
scadenze...e ad oggi sono 256, oppure devo crearmi una
maschera/sottomaschera ??
Beh...come vedi ho le idee confuse sul procedimento... x cui se hai tempo da
perdere con me...dovresti dirmi step by step
il susseguirsi del procedimento in modo da stampare queste benedette
lettere...altrimenti provo a smanettare un pò, riferendomi al tuo post... x
vedere fin dove arrivo e poi magari ci risentiamo nei prossimi messaggi...
non mi và di rompere più di tanto...


Ok.
Il primo passo è la creazione della query che contiene i campi e seleziona i
dati da riportare poi nelle lettere scritte con word.
Non o parlato di tabelle o maschere, ma solo di una creazione di una query.
Questa ce l'hai?
Ciao.


Bene, ora puoi scrivere la lettera con word; appena aperto un documento
nuovo, vai su stampa unione - crea (documento principale) - lettera tipo -
finestra attiva - dati (origine) - apri origine dati - tipo file: database
di ms access - apri - query - (scegli la tua query) - Ok - modifica
documento principale.
A questo punto non fai altro che scrivere il testo come una normale lettera,
solo che nei punti "variabili" inserirai i nomi dei campi della query con la
barra che ti è apparsa premendo il bottone "inserisci campo unione".
Es. invece di... Caro Super Pippo; diventa.. Caro (inserisci campo unione
Nome) <<Nome>>.. etc.etc.
Se vuoi vedere un esempio di come sarà la lettera (o le lettere) finale(li);
cerca sulla barra che ti ho citato in precedenza, il bottone con le lettere
"abc" (sarebbe "visualizza dati uniti"). Chiudi tutto e salva.
A te la parola...
Ciao.
P.S. scusami se le mie risposte non saranno giornaliere, sono in ferie e non
ho molte occasioni per collegarmi...

 ho molte occasioni per collegarmi...
 non fà niente che le tue risposte siano giornaliere... goditi le
ferie...anche io sono in ferie fino al 4 settembre e per motivi di forza
maggiore non mi posso muovere da casa x cui il mio tempo lo passo tra il PC
ed il mare ...mia altra grande passione...!


"Parametri insufficienti"??? Il messaggio è di Access o Word? Sai, quando la
query non ha record da restituire word da' un messaggio "strano" ma il
mailmerge funziona lo stesso...
Fammi sapere.
Ciao.

 Fammi sapere.
Grazie  Sergio... ora funziona tutto grazie alla tua
collaborazione...intanto risalendo al problema dell'errore credo che il
tutto si bloccava perchè nella qry come ti dicevo avevo in criteri.. Like
("*"&[Ricerca Data Scadenza]... o almeno credo...togliendola  ho
risolto...sono arrivato alla fine e nella lettera ho messo i Campi Unione da
me prescelti... e poi nella barra superiore nel menu cliccando sul bottone
"abc" mi vedevo il risultato ed in più andando con i bottoni > o < mi vedevo
anche gli altri assistiti automaticamente... bellissimo...
Un'ultima cortesia, ora che ho tolto la stringa di cui sopra come faccio..
anche manualmente a trovarmi x esempio esenti scadenti il mese di Novembre
2000 ???
supponiamo...rimetta la stringa come era... e funzionasse...sembra di sì,
dato che ho fatto la prova, digito "11/2000" e mi esce la lista degli esenti
scadenti come faccio ad automatizzare in word il tutto.. devo rifare di
nuovo stampa unione ???
scusa la mia estrema ignoranza in merito... forse si è creata già una
routine... o devo attivare qualcosa??
Grazie


Se tu tieni presente che, la lettera (.doc) che utilizzi per il mailmerge ha
come sorgente dati una query che può avere delle condizioni e quindi il
risultato potrebbe cambiare; la risposta non può essere altrimenti che sì.
Altra via sarebbe quella di non inserire nella query (in access) nessun
criterio di selezione, ma selezionare i dati in word; sempre con strumenti -
stampa unione, ti sarai accorto che nelle opzioni c'è la possibilità di
inserire delle condizioni (opzioni query). Ma te la sconsiglio, non brilla
in velocità...
Ciao.

 SuperPippo :o))
Casomai è il contrario; prima la query e poi la lettera.
Ma il documento è basato sulla query, quindi è superfluo eseguirla; già
all'apertura dello stesso vengono richiesti i dati ad access e quindi viene
eseguita la query. Il problema è il parametro che devi passare alla query
prima di inviare i dati al documento; visto che è un input di access, ti
consiglio di inserire una casella di testo nella maschera (es.
RicercaDataScadenza) ed inserire nella query il riferimento alla casella
(forms!NomeMaschera!RicercaDataScadenza). Poi nell'evento "su clic" del
bottone che utilizzerai per eseguire il mailmerge inserisci il codice:
'------------------------------------------------
Private Sub Comando0_Click()
On Error GoTo Err_Comando0_Click
Dim oApp As Word.Application, oDoc As Word.Document
Set oApp = CreateObject("Word.Application")
'se non vuoi rendere visibile tutta la operazione
'non inserire la istruzione successiva
oApp.Visible = True
Set oDoc = oApp.Documents.Open(filename:="c:\documenti\nomeFile.doc")
With oDoc.MailMerge
'se vuoi inviare il risultato del mailmerge alla stampante
'inserisci .Destination = wdSendToPrinter
    .Destination = wdSendToNewDocument
    .Execute
End With
'se vuoi chiudere subito il documento master per non farlo modificare
oDoc.Close
'ora puoi rendere visibile word con il risultato del mailmerge
oApp.Visible = True
'impostiamo word come applicazione in primo piano ed attiva
oApp.Activate
Exit_Comando0_Click:
    Exit Sub
Err_Comando0_Click:
    oApp.Visible = True
    Set oDoc = Nothing
    Set oApp = Nothing
    MsgBox Err.Description
End Sub
'------------------------------------------------
Considera che il bottone (io) l'ho chiamato "Comando0"...
Ciao.

 bottone che utilizzerai per eseguire il mailmerge inserisci il codice:
scusami quest'ultima non l'ho capita... oltre la casella di testo devo
inserire vicino un bottone di comando giusto ???
ho fatto così ... e nell'evento su click.. ho inserito il tuo codice.. però
eseguendo il tutto mi dà un errore in
Dim *oApp As Word.Application*, oDoc As Word.Document.... esattamente tra
gli asterischi ???

...
Ehh gli esami non finiscono mai...
(Eduardo)
--------
SuperPippo :o)))


Ma i soldi, sempre...
Ciao.


.... scusami Sergio se Ri-rispondo prima che tu abbia risposto al mio, ma
avendo un pò approfondito su questo database sono venuti fuori alcuni
problemi....cerco di spiegarmi..
questo Db conterrà +/- 13.000 esenti ticket... ma ad oggi ve ne sono
inseriti  3.874
in una tabella collegata in un'altra tabella Esenzioni che porta 4.976
esenzioni degli esenti sopra riportati... questo perchè un esente può aver
più di un esenzione... ed ecco il problema... adottando il codice VBA da te
suggeritomi e che funzia a meraviglia... mandando in Stampa Unione mi
prepara tutti e 4.976 fogli
mentre in pratica, dovrei stampare solo i 3.874 nominativi esenti... dove
in un solo foglio dovrebbe riportare le 2 o più scadenti esenzioni di
quell'esente... spero riesco a farmi capire..!!
inoltre c'e' la possibilita quando si apre  Word di visionare le lettere in
modalità Stampa Unione ??... sembra abbastanza comodo azionare i pulsantini
di scorrimento invece di scorrere le pagine...
Grazie come sempre x la tua gentile collaborazione....


Praticamente stai dicendo che nella lettera dovresti elencare la lista delle
esenzioni per ogni esente; no? Non è difficile costruire con word una cosa
del genere, ma neanche facilissimo per chi è alle prime armi specialmente
con vba e gli oggetti di office.
In parole povere si tratterebbe di inserire nella tua lettera una tabella
che contenga l'elenco delle esenzioni; ma il problema nasce proprio quì.
Word o il mailmerge (per la versione '97, la 2000 non la conosco per ora)
trattano ogni record come una informazione per una sola lettera; quindi un
record una lettera. Lo stesso tema è stato affrontato e risolto da Giovanni
Albertone per Mari nei messaggi che partono dal 10.08.2000 con oggetto
Access -> Word in tabelle. E' una soluzione elegante e snella; io per farla
meno povera di codice l'ho risolta in modo diverso ma più da "masturbazione
mentale".
Il mio consiglio è di leggere quei messaggi cercando di capire i concetti di
recordset, oggetti table e range (entrambi di word) ovviamente aiutandoti
con l'help sia di access che di word; visto che inserendo i riferimenti alla
libreria hai anche a disposizione l'help cliccando su una parola chiave e
poi premendo f1. Meglio se con un buon libro.
Poi se vuoi farti del male ti spiego la mia soluzione...
Poi che intendi per "...c'e' la possibilita quando si apre  Word di
visionare le lettere in modalità Stampa Unione ??... sembra abbastanza
comodo azionare i pulsantini di scorrimento invece di scorrere le
pagine..."? Vedere il risultato prima di eseguire il mailmerge utilizzando i
pulsanti di scorrimento record? Spero che tu non dica sul serio; purtroppo
più vuoi un prodotto finale complesso (es. lettera con elenco), più sfuma la
possibilità di interagire con word tramite le "normali" operazioni. Vedi, ci
sono tante soluzioni per un problema; io ne ho affrontate alcune e con gli
strumenti che avevo a disposizione, ciò non toglie che tu potresti
utilizzare altri strumenti che io non conosco ma che sono più efficienti;
che ne so' potresti utilizzare crystal report, ripeto, non lo conosco ma
sento che se ne parla un gran bene e magari ci stiamo lambiccando il
cervello per niente perchè lui in 4 e 4 = 8 ti crea la lettera con la
tabella come vuoi tu.
Tutta 'sta pappardella per farti sprecare soldi di connessione (hi! hi!), no
scherzo. E' per dirti che: ok, affrontiamo insieme il problema senza
dimenticare pero' che ci sono sicuramente altre soluzioni che tu sarai
costretto ad implementare con il passar del tempo, all'aumentare della
complessità della tua procedura...
Ciao.

Puoi, oltre che spezzare il messaggio anche cancellarlo del tutto; ma
l'importante per me (e anche per te) è che ci sia visibilità pubblica dei
messaggi che ci scambiamo. Questo per (mi ripeto ancora) avere più soluzioni
e una eventuale correzione (errare umanum est) oltre a rendere
partecipi anche gli altri delle soluzioni che sono state trovate.
Puoi inviarmi quello che vuoi basta che non superi i 3 Mbyte e che non
contengano messaggi tipo ILOVEYOU, ma è una soluzione che deve rimanere come
estrema. Ah! Io utilizzo Access'97.
Comunque guardando l'esempio che mi hai inviato e indicando che l'elenco va
da 1 a max 5 voci, potresti (mooolto
semplicemente) inserire una serie di campi word nextif e if che prevedono il
controllo se il campo del prossimo record è vuoto o no.
Sarebbe:
Gent. Signore/a Le comunichiamo che il/i suo/suoi tesserino/i di esenzione
ticket
Codice {MERGEFIELD CodiceEsenzione}Scade il {MERGEFIELD
DataScadenzaEsenzione}
{NEXTIF CodiceEsenzione<>""}{IF {MERGEFIELD CodiceEsenzione}<>"" "Codice
{MERGEFIELD CodiceEsenzione} Scade il {MERGEFIELD DataScadenzaEsenzione} ""}
{NEXTIF CodiceEsenzione<>""}{IF {MERGEFIELD CodiceEsenzione}<>"" "Codice
{MERGEFIELD CodiceEsenzione} Scade il {MERGEFIELD DataScadenzaEsenzione} ""}
{NEXTIF CodiceEsenzione<>""}{IF {MERGEFIELD CodiceEsenzione}<>"" "Codice
{MERGEFIELD CodiceEsenzione} Scade il {MERGEFIELD DataScadenzaEsenzione} ""}
{NEXTIF CodiceEsenzione<>""}{IF {MERGEFIELD CodiceEsenzione}<>"" "Codice
{MERGEFIELD CodiceEsenzione} Scade il {MERGEFIELD DataScadenzaEsenzione} ""}
etc. etc.
Ciao.
P.S. Fai attenzione agli spazi.


-
SuperPippo :o))


Beh, facendo riferimento al testo della lettera che mi hai inviato non
poteva essere che word. Comunque scusami per avrlo dato per scontato.
Dunque; riassumendo tu mi hai detto che nella lettera ci possono essere da 1
a max 5 righe di informazioni per persona (destinatario lettera). Se č cosě
puoi semplificarti la vita inserendo nella lettera 5 righe che contengono
istruzioni word (campi) che leggono 5 record.
Ossia: il primo record viene letto (diciamo) automaticamente e i prossimi 4
vengolo letti e inclusi nella lettera se un campo che decidi tu (per es.
CodiceEsenzione) non č vuoto (<>""). Nella lettera dovrai inserire queste
altre 4 serie di istruzioni per eseguire la lettura dei record successivi:
- {NEXTIF Condizione} che permette di "saltare" al prossimo record se la
condizione risulta vera;
- {IF Condizione IstruzioniSeVero IstruzioniSeFalso} che verifica (ancora)
se il campo scelto (CodiceEsenzione) non sia vuoto e se vero scrivere la
riga: Codice "numerocodice" Data scadenza "datascadenza" del record letto.
I campi word rappresentati con le parentesi graffe li vedi premendo la
combinazione ALT-F9 e li fai "sparire" con la stessa combinazione. Questo ti
serve per poter inserire nei campi le istruzioni che normalmente (tramite
wizard) non potresti scrivere. Altrimenti se vuoi divertirti e non
utilizzare il wizard (che sarebbe meglio) i campi li generi con CTRL-F9; ti
appaioni le graffe ed il cursone si posiziona all'interno delle stesse
permettendoti di scrivere quello che vuoi e in questo caso ricopiare quello
che ti ho scritto...
Tutto chiaro?
Ciao.


------------
Scusa Sergio.. ma ho qualche problema con i InserisciCampoWord e le
parentesi graffe... in
pratica non riesco a togliere dalla condizione IF, Codice_esenzione, non sia
vuoto una parentesi graffa in più
e qualche segno...come ti mostro di seguito... altrimenti mi fà cancellare
tutta la stringa...
esempio :  {Nextif Codice_Esenzione<>""}{If{Mergefield Codice_Esenzione}<>""
"" ""}<>"" "}.
PS - posso editare le parentesi graffe anche con la combinazione
Alt-123/125..vengono accettate a livello di comando ?


No, solo con la combinazione ctrl-f9 puoi inserire le graffe e far
riconoscere a word che deve trattare il contenuto come un campo.
Non sei molto chiaro nell'esporre il problema; andiamo per passi ok?
Descrivimi il primo problema:
Ciao.

 ha scritto nel
messaggio news:8nr2i6$6uc$1...@lacerta.tiscalinet.it...

......Certo che hai una pazienza Sergio... proprio da orientale...!!! Bene
!!!
vediamo se riesco a farmi capire... in pratica il codice spedito da te il 19
Agosto alle 14.50
quello da inserire nella lettera di Word... sai meglio di me che non ho
potuto fare un Copia-Incolla
perchè non lo accetta...sigh x me sarebbe stato + facile... !!!
quindi destreggiandomi in Word in stampa Unione etc.non riesco a farli
essere come i tuoi, nel senso che utilizzando
inserisci campo word ...quindi le varie funzioni... mi inserisce una
parentesi graffa in + e non sò come toglierla...
questo è il primo problema... sarà una schiocchezza risolvere il problema
..ma ci ho sbattuto un'intera mattinata...!
mi fermo qui x ora...


Io pazienza? E allora l'NG che mi sopporta? Meglio non toccare questo
tasto...
Dai, rimbocchiamoci le maniche; diciamo che hai davanti la tua lettera prima
del mio ultimo suggerimento (NEXTIF), ok?
Vai accapo, e premi ctrl-f9; ti appaiono le graffe; tu scrivici dentro
NEXTIF; spazio; premi ctrl-f9 (altre graffe); scrivici dentro MERGEFIELD
CodiceEsenzione (se così si chiama il campo altrimenti lo cambi); porti il
cursore fuori della graffa finale del mergefield; scrivi <>"".
Risultato finale:
{NEXTIFspazio{MERGEFIELDspazioCodiceEsenzione}<>""}
n.b. ti ho inserito la parola "spazio" per indicarti esattamente la
sintassi.
Fatto ciò, porti il cursore fuori dell'ultima graffa del nextif; premi
ctrl-f9 (graffe); scrivici dentro IF; spazio; premi ctrl-f9 (graffe);
scrivici dentro MERGEFIELD CodiceEsenzione; porti il cursore fuori
dell'ultima graffa del mergefield; scrivi <>""; spazio; scrivi (virgolette
incluse) "Codice; spazio; premi ctrl-f9 (graffe); scrivici dentro MERGEFIELD
CodiceEsenzione; spazio; Data scadenza; spazio; premi ctrl-f9; scrivici
dentro MERGEFIELD DataScadenza; porti il cursore fuori della graffa di
datascadenza; chiudi le virgolette "; spazio; scrivi (virgolette incluse)
"".
Risultato finale:
{IFspazio{MERGEFIELDspazioCodiceEsenzione}<>""spazio"Codicespazio{MERGEFIELD
CodiceEsenzione}spazioDataspazioScadenzaspazio{MERGEFIELDspazioDataScadenza}
"spazio""}
n.b. ti ho inserito la parola "spazio" per indicarti esattamente la
sintassi.
Praticamente hai un paragrafo con nextif ed attaccato ad esso l'if. Fatto
questo, selezioni tutto il paragrafo, dall'inizio alla fine, copialo ed
incollalo per 4 volte. Premi alt-f9; dovresti vedere i nomi dei campi con
hai margini << e >> e vai con il tasto "abc" o il mailmerge...
Ciao.