Newsgroup: it.comp.appl.access
Titolo: outputto word e codice con bookmarks (namor)

Ciao a tutti, utilizzo il codice di namor con i bookmarks per l'esportazione 
in un foglio di word però mi è sorto un problema dovrei aggiornarlo direi 
dinamicamente ossia...il codice di namor funziona bene se c'è una quantità 
di parametri fissi.
Nel caso in cui però i campi variano, come si può fare?
Riporto un esempio per spiegare meglio:
devo spedire una lettera che può avere uno o più mittenti e uno o più 
destinatari perciò se avrò per esempio un mittente e un destinatario il 
foglio di word sarà:
"la lettera è stata spedita da <mittente1>
verso <destinatario1>"
se i mittenti sono due e il destinatario uno sarà del tipo:
"la lettera è stata spedita da <mittente1> e anche da <mittente2>
verso <destinatario1>"
e via con le diverse combinazioni...ora onde evitare di formulare un modulo 
di word per ogni combinazione posso trovare una soluzione dinamica?
Magari ipotizzo quella che ha più mittenti e più destinatari e cancello le 
righe dove non ho i campi compilati??Che dite?
Se no se c'è anche un'altro modo ditemi voi...il fine è quello di giungere a 
compilare una lettera prendendo i riferimenti da due maschere/tabelle 
differenti magari strutturate così:
maschera mittenti
record 1  tizio caio
record 2  rossi gino
maschera destinatari
record 1 giallo giovanni
record 2 verdi giacomo
output in lettera di word:
la lettera è stata spedita da  tizio caio e anche da rossi gino
verso giallo giovanni e verdi giacomo.
Scusate la prolessità ma era per spiegare bene il concetto, spero di essermi 
espresso bene.
Grazie
Roberto 

 maschera destinatari




Non serve che prepari gli spazi nel foglio word per tutte le combinazioni
di mittenti e destinatari, ti basta un unico bookmark.
Costruisci un'unica stringa
  "la lettera è stata spedita da <mittente1> e da <mittente2> ...
   verso <destinatario1> e verso ..... e verso ..."
da vba, con dei cicli sui recordset dei mittenti e dei destinatari, e poi
la passi a word già pronta.
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

 ha scritto nel messaggio 
news:d31546$rj7$1...@news.newsland.it...

Mi potresti dare un esempio del codice?
Supponiamo (estratto dal tuo codice)...scrivo il primo campo...del primo 
record...come faccio a scrivere lo stesso campo per il secondo record con 
formattazione del foglio differente?In sostanza a fare quello che mi 
dici?Scusa l'ignoranza...
[CUT]
    'seleziona il bookmark del primo campo Nome cliente:
    Doc.Bookmarks("NomeCliente1").Select
pausa
    'e sovrascrivilo con il contenuto dei campi
    'Cognome e Nome:
    Wrd.Selection.TypeText Me.Cognome & " " & Me.Nome
pausa
[CUT]
Grazie
Roberto 

 Roberto
Non ho capito bene se devi creare una stringa o se devi spedire a word i
vari indirizzi, trattandosi di una lettera presumo la seconda.
Dopo esserti posizionato sul bookmark fai un ciclo e ci metti tutti i
destinatari:
  'seleziona il bookmark del primo campo Nome cliente:
  Doc.Bookmarks("NomeCliente1").Select
  set rst=currentdb.openrecordset ("SELECT .....")
  rst.movefirst
  while not rst.eof
    Wrd.Selection.TypeText rst!Cognome & " " & rst!Nome & vbcrlf
    Wrd.Selection.TypeText rst!indirizzo & vbcrlf
    Wrd.Selection.TypeText rst!CAP & " " & rst!citta & vbcrlf & vbcrlf
  wend
Per i mittenti sarà simile. Poi lo adatti alle tue esigenze. Ricordati di
chiudere e distruggere rst alla fine, e puoi anche usare with..end with
per evitare di ripeterlo sempre.


 ha scritto nel messaggio 
news:d32m05$nqh$1...@news.newsland.it...

Mi sa che sbaglio qualcosa...ho scritto così...
    'seleziona il bookmark del primo campo Nome cliente:
    Doc.Bookmarks("NomeCliente1").Select
    Set Rst = CurrentDb.OpenRecordset("SELECT * FROM Da;")
    Rst.MoveFirst
    While Not Rst.EOF
    Wrd.Selection.TypeText Rst!Cognome & " " & Rst!Nome & vbCrLf
    Wrd.Selection.TypeText Rst!Indirizzo & vbCrLf
    Wrd.Selection.TypeText Rst!Comune & vbCrLf & vbCrLf
    Wend
    Rst.Close
    Set Rst = Nothing
ma mi da, credo giustamente, errore "variabile with non impostata" e poi 
cicla all'infinito forse perchè la posizione degli ultimi due comandi è 
sbagliata...
Se dovessi inserire frasi diverse a seconda che ci fossero uno o più 
mittenti mi conviene inserire un contatore all'interno?o posso sfruttare 
rst?
if rst =1 then
    Set Rst = CurrentDb.OpenRecordset("SELECT * FROM Da;")
    Rst.MoveFirst
    While Not Rst.EOF
    Wrd.Selection.TypeText Rst!Cognome & " " & Rst!Nome & vbCrLf
    Wrd.Selection.TypeText Rst!Indirizzo & vbCrLf
    Wrd.Selection.TypeText Rst!Comune & vbCrLf & vbCrLf
    Wend
    Rst.Close
    Set Rst = Nothing
else
    Set Rst = CurrentDb.OpenRecordset("SELECT * FROM Da;")
    Rst.MoveFirst
    While Not Rst.EOF
    Wrd.Selection.TypeText Rst!Cognome & " " & Rst!Nome & vbCrLf
    Wrd.Selection.TypeText Rst!Indirizzo & vbCrLf
    Wrd.Selection.TypeText Rst!Comune & vbCrLf & "e anche" & vbCrLf
    Wend
    Rst.Close
    Set Rst = Nothing
...
Grazie dell'aiuto
Roberto 

 Roberto
Mancano due cose, la dichiarazione della variabile dim rst as
dao.recordset e il comando che ti sposta sul record successivo dopo aver
esportato l'indirizzo, Rst.Movenext, che va subito prima del wend.


 ha scritto nel messaggio 
news:d32v42$c8l$1...@news.newsland.it...

Ora funziona ma dovendo praticamente scrivere il testo all'interno di VB non 
riesco a formattare solo parte del testo ossia:
      Wrd.Selection.TypeText Rst!Cognome & " " & Rst!Nome & " nato a " <----  
vorrei che solo cognome e nome fosse in grassetto
      Wrd.Selection.TypeText Rst!Comune
piano piano ci sto arrivando alla soluzione...ah sarebbe possibile 
all'apertura del mio modulo di word copiare le prime n righe? ed 
eventualmente incollarle di seguito?
Grazie come sempre dell'aiuto
Roberto 

 Roberto
Dai, non era poi tanto difficile attivare e disattivare il grassetto, ci
si poteva arrivare guardando l'esempio:
    Wrd.Selection.Font.Bold = true
    Wrd.Selection.TypeText Rst!Cognome & " " & Rst!Nome & vbCrLf
    Wrd.Selection.Font.Bold = false
    Wrd.Selection.TypeText Rst!Indirizzo & vbCrLf
    Wrd.Selection.TypeText Rst!Comune & vbCrLf & vbCrLf
Per copiare le prime righe potresti fare cosě:
dim tmpstr as string
    Doc.Paragraphs(1).Range.Select
    Wrd.Selection.Extend vbCr
    Wrd.Selection.Extend vbCr
    Wrd.Selection.Extend vbCr
    tmpstr = Wrd.Selection.Text
    Wrd.Selection.Collapse wdCollapseEnd
    Wrd.Selection.TypeText tmpstr
    Wrd.Selection.TypeText tmpstr
    .......


    Wrd.Selection.TypeText Rst!Comune & vbCrLf & vbCrLf
eh così lo sapevo ma non hai visto bene la stringa:
Wrd.Selection.TypeText Rst!Cognome & " " & Rst!Nome & " nato a "
io volevo mettere in grassetto solo cognome e nome mentre " nato a " volevo 
fosse normale...però adesso che ci penso sono un pò sbadato lo stesso perchè 
avrei potuto risolvere così....
Wrd.Selection.Font.Bold = true
Wrd.Selection.TypeText Rst!Cognome & " " & Rst!Nome & vbCrLf
Wrd.Selection.Font.Bold = false
Wrd.Selection.TypeText " nato a"
scusa....
Grazie
Roberto 

 ha scritto nel messaggio 
news:d336dh$m65$1...@news.newsland.it...

Per copiare le righe di mio interesse ho utilizzato questo codice, ma alla 
prima apertura mi da errore di run-tim 462!Se poi chiudo word e rieseguo il 
codice tutto funziona correttamente....
Sai cosa possa essere? ho provato a guardare nell'help ma non ho avuto 
aiuti...
    Set Doc = Wrd.Documents.Add(Modello)
    Doc.Activate
    Selection.MoveDown Unit:=wdLine, Count:=2
    Selection.MoveDown Unit:=wdLine, Count:=2, Extend:=wdExtend
    Selection.Copy
Ciao
Roberto

 Roberto
Si, ovviamente devi spezzare la stringa per avere in grassetto solo il
nome, ma togli il vbcrlf sennň va a capo.


 Roberto
Si, si può usare anche questo sistema ma il codice non è completo. Dopo
aver fatto il Copy devi spostare il cursore e fare un Paste se intendevi
duplicare le righe, così le copia negli appunti e basta.
   Set Doc = Wrd.Documents.Add(Modello)
   Doc.Activate
   Selection.MoveDown Unit:=wdLine, Count:=2
   Selection.MoveDown Unit:=wdLine, Count:=2, Extend:=wdExtend
   Selection.Copy
   Selection.Collapse wdCollapseEnd
   Selection.Paste
Per il fatto che ti dà errore prova a mettere Wrd. davanti a tutti i
Selection.


 ha scritto nel messaggio 
news:d33h3v$m6u$1...@news.newsland.it...

Si si il selection.copy era in fondo....
Ora è OK..... perfetto!
Grazie
Roberto