ho modificato le voci che mi interessavano e tolto quelle in più nella
parte dello specchio che mi interessava. Ora però dovrei far scrivere
all'interno di cella di una tabella in word i dati di presi da una
sotto maschera.
ho la form di access basata su una tabella dove prende i dati relativi
ad un corso all'interno di questa c'è una sottomaschera che elenca gli
studenti di questo corso.
Per la prima parte come ho detto ho risolto mi rimane di inserire i
dati della sottomaschera (che poi sarebbe un solo campo "nominativo")
in un foglio di word dove mi trovo una tabella e in una colonna vanni
inseriti i nominativi dei partecipanti.
io ho già inserito nel modello di word i bookmark denominandoli
<Studente>, <Studente1> e così via fino in fondo allo specchio, uno
per cella.
però non riesco a capire come fare ad abbinare il primo nominativo
della sottomaschera a <Studente> , il secondo a <Studente1> e così
via..
qualcuno mi potrebbe aiutare?
Grazie
Bcla
Nell'esempio di namor, che ho scopiazzato anch'io, all'avvio si apre
un modulo contenente le istruzioni. Mi par di capire che devi stendere
un elenco contenente alcuni nomi presi dalla tua sottomaschera, in tal
caso vai a vedere cosa dice della distinzione fra 'campi modulo' e
'segnalibri'. A te serve la parte di codice, contenuta sotto il
pulsante "Esporta", che inizia dal commento "'esportazione Elenco
prodotti:", in cui non riempie dei singoli campi ma scrive tante righe
quante servono.
In realtà il segnalibro è uno solo, in cui scrivi tutte le righe che
ti servono.
Ciao
Riccardo Baldinotti
si questa parte di codice mi funziona già l'unico problema che ho e
nella parte che riguarda un elenco di nomi (presi dalla sottomaschera)
da inserire nelle varie celle di word dall'alto verso il basso e
tutte in automatico.
Non so se mi sono spiegato.
bcla
> bcla-
È esattamente quello che ti dicevo. Se guardi l'esempio, la parte che
ti ho indicato è proprio quella che prende i dati dalla sottomaschera.
Non c'è bisogno di mettere un campo modulo per ogni riga, anche perché
potresti non sapere quante saranno.
In particolare, la parte che inizia da " 'apertura del recordset "
nell'evento SuClick del pulsante Esporta, apre il recordset e compila
tutte le righe che servono.
Riccardo Baldinotti
> È esattamente quello che ti dicevo. Se guardi l'esempio, la parte che
> ti ho indicato è proprio quella che prende i dati dalla sottomaschera.
> Non c'è bisogno di mettere un campo modulo per ogni riga, anche perché
> potresti non sapere quante saranno.
> In particolare, la parte che inizia da " 'apertura del recordset "
> nell'evento SuClick del pulsante Esporta, apre il recordset e compila
> tutte le righe che servono.
> Riccardo Baldinotti
Non mi va---
ho fatto così ma niente, mi da esportazione terminata ma senza
compilare i nomi degli studenti
____
Doc.Bookmarks("Studente").Select
pausa
'apertura del recordset
SQL = "SELECT * FROM tblFrequentatori WHERE ID=" & Me.ID & _
" ORDER BY Studente;"
Set Rst = CurrentDb.OpenRecordset(SQL)
pausa
'ciclo sul recordset
With Rst
Totale = 0 '
.MoveFirst 'posizionati sul primo record
While Not .EOF 'ripeti fino alla fine del recordset:
pausa
.MoveNext 'passa al prossimo record
Wend 'Not .EOF
End With 'Rst
Rst.Close: Set Rst = Nothing
'"Sostituisci la selezione"
Wrd.Options.ReplaceSelection = ReplSel
Wrd.Application.WordBasic.MsgBox "Esportazione terminata",
"Esportazione dati da Access"
Io però non vedo cosa scrivi, subito prima di "pausa", cioè
l'equivalente delle righe:
TotRiga = Nz(!Quantita) * Nz(!prezzo)
Record = Tbl & Format(!Data, "ddd dd.mm.yyyy") & Tbl &
_
!Prodotto & Tbl & _
!Um & Tbl & _
Format(Nz(!Quantita), "#,##0.00") & Tbl & _
Format(Nz(!prezzo), "#,##0.00") & Tbl & _
Format(TotRiga, "#,##0.00")
Wrd.Selection.TypeText Record & vbCrLf 'scrivi la riga
nell'esempio.
Quelle righe scrivono 6 campi. Se a te serve il solo campo
<nominativo>, allora sarà un comando così:
Wrd.Selection.TypeText Rst!nominativo & vbCrLf 'scrivi
la riga
Ricapitolando:
While Not .EOF 'ripeti fino alla fine del recordset:
Wrd.Selection.TypeText Rst!nominativo & vbCrLf
'scrivi la riga
.MoveNext 'passa al prossimo record
I comandi "pausa" servono solo per mostrare chiaramente l'esempio e
puoi toglierli
Ciao
Riccardo Baldinotti
allego la parte di codice:
'esportazione Studenti:
'selezione del punto di inserimento
Doc.Bookmarks("Studente").Select
'apertura del recordset
'(apro un nuovo recordset per poter impostare l'ordinamento,
SQL = "SELECT * FROM tblFrequentatori WHERE ID=" & Me.ID & _
" ORDER BY Studente;"
Set Rst = CurrentDb.OpenRecordset(SQL)
'ciclo sul recordset ed esportazione di tutte le righe
With Rst
Totale = 0 '
.MoveFirst 'posizionati sul primo record
While Not .EOF 'ripeti fino alla fine del recordset:
Wrd.Selection.TypeText Rst!Studente & vbCrLf ' scrivi la
riga
.MoveNext 'passa al prossimo record
Wend 'Not .EOF
End With 'Rst
'chiudi e azzera il recordset
Rst.Close: Set Rst = Nothing
----
il problema è che mi compila solo il primo nome e non gli altri
perchè dovendo scriverli all'interno di una cella (uno per cella) uno
sotto l'altro il comando vbCrLf non mi va bene perchè mi va a capo
all'interno della stessa cella.
ora pensavo o di ripetere Wrd.Selection.TypeText Rst!Studente &
vbCrLf ' più volte tante quante sono le celle da riempire modificando
"Studente" in Studente1, Studente 2 ecc.
oppure dovrei calcolare tante quante sono le tabulazioni per portarmi
sulla cella seguente e utilizzare TAB ?
devo fare qualche prova.
bcla
Secondo me hai inserito un campo modulo e non un segnalibro.
Nelle istruzioni del file che usiamo di esempio è descritta la
differenza.
Che versione di Access usi?
Riccardo Baldinotti
Access 2003 e ho inserito un segnalibro non un campo modulo
Bcla
In effetti, leggendo meglio mi accorgo che il problema è quella
"cella" nel documento Word. L'esempio scrive n righe di testo, non
all'interno di una cella; ti riferisci a una tabella? Perché mi sembra
che non sia necessaria in quanto il tuo singolo dato viene messo in
elenco. Come vedi, l'esempio non ha tabelle.
Allora faccio un'ipotesi: la tabella ti serve perché il documento ha
dei campi vuoti che poi vanno compilati a mano? Potresti limitarti a
scrivere le intestazioni e poi modificare la riga, per esempio, così:
Record = Tbl & Rst!Studente & Tbl & _
"_____" & Tbl & _
"_____" & Tbl & _
"_____" & Tbl & _
"_____" & Tbl & _
"_____"
Wrd.Selection.TypeText Record & vbCrLf
In pratica scrivendo il tuo nominativo e poi n campi con una
sottolineatura lunga quanto serve per ogni campo aggiuntivo (io ne ho
messi cinque), separati da tabulazioni.
Altrimenti, penso anch'io che ti convenga mettere tanti campi modulo
quante sono le tue righe, dare ad essi un nome St1, St2 eccetera, e
ciclare sui record così:
With Rst
.MoveFirst
u=1
While Not .EOF
Doc.Bookmarks("St" & u).Select
Wrd.Selection.TypeText Rst!Studente
.MoveNext
u=u+1
Wend
End With
Lo svantaggio è che devi avere un numero predeterminato di righe, cioè
sapere a priori quanti "StXX" ti servono.
Spero di avere capito.
Riccardo Baldinotti
grazie mille
mau
ciao
mau
Su http://www.sitocomune.com/, nella sezione General, è l'esempio
"6.137 Esempio di automazione per l'invio e la formattazione di dati
da Access a Word usando i bookmarks".
Riccardo Baldinotti
Grazie
mau
Si proprio quello che volevo fare ma mi si bloccava sempre dopo averne
inserito 2 o 3.
Grazie