Newsgroup: it.comp.appl.access
Titolo: Compilazione di tabelle word da access

ciao a tutti.
sto utilizzando il modulo di "Namor" per la compilazione di Word da
access
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

 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"

                 .MoveNext 'passa al prossimo record
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

 wrote:

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

 - Mostra testo citato -
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

 - Mostra testo citato -
Access 2003  e ho inserito un segnalibro non un campo modulo
Bcla

 wrote:
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

Scusate, potreste linkare questo modulo di Namor?
grazie mille
mau


Secondo me e' il metodo migliore, oltretutto ti aggiunge automatimente
una riga nuova quando arrivi a fine tabella.
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

 Riccardo Baldinotti
Grazie
mau

 wrote:

Si proprio quello che volevo fare ma mi si bloccava sempre dopo averne
inserito 2 o 3.
Grazie