Newsgroup: it.comp.appl.access
Titolo: da acces a word

Scusate la domanda come posso trasportare una query in un elenco di word?
mi spiego devo inserire dei dati della query in una tabella di word gia'
formata ?
spero di essere stato abbastanza chiaro
grazie dell'aiuto

 ha scritto nel messaggio
news:w2Gvc.278794$hc5.12...@news3.tin.it...

Non ho mai fatto grandi cose in Word per cui prendi questo codice come lo
passa il convento :))))) (Ho sempre fatto un casino pazzesco tra GetObject e
CreateObject...)
Premetto che il mio pc è ormai un cadavere senza anima e i messaggi di
errore a volte sono assolutamente incomprensibili. Ho provato questo vecchio
codice che avevo, dovrebbe funzionare anche se non assicuro miracoli, se
così non fosse usa un po' di fantasia e di applicazione :)))
Tale codice dovrebbe aprire il documento nel quale vuoi popolare la tabella
di word. Chiaramente dovrai sostituire:
1) nella variabile strPercorsoFile il percorso esatto del documento di Word
che ti interessa aprire
2) nella variabile strOrigine il nome della query/tabella in cui si trovano
i dati o specificare una stringa sql che li costruisca. Cancella la stringa
sql che ho usato come prova
Preciso inoltre che la tabella viene costruita direttamente con codice, per
cui se ne hai una preimpostata nel tuo documento, non verrà considerata in
quanto:
1) dovrei conoscere le coordinate esatte in cui si trova la tabella
all'interno del documento (cosa che non hai specificato) per sostituirla o
popolarla
2) non puoi certo sapere a priori di quante righe sarà composta la query (i
dati potrebbero mutare da un momento all'altro) e, potresti voler
visualizzare qualche campo in più o in meno nella tua tabella all'interno
del documento. Tutto questo viene comodamente impostato da codice in maniera
dinamica.
In ultima analisi:
1) la tabella viene posizionata all'inizio del documento, per cui se hai
impostato del testo dovrai riscriverlo/copiarlo e, solo successivamente,
potrai formattare il tutto a tuo piacimento
2) non ho gestito gli errori
3) Uso le versioni Access2000/Windows98
4) Puoi benissimo migliorare il codice con soluzioni più idonee a quello che
ti serve. Quello che ti passo è scarno (sempre che funzioni....)
5) Ricordati di impostare in Access le librerie di Word
Crea un pulsante su una maschera di Access e scrivi:
Private Sub Command1_Click()
    EsportaDati
End Sub
Private Function EsportaDati () As Boolean
    Dim mywdapp As Word.Application
    Dim mydoc As Word.Document
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim myrange As Word.Range
    Dim acell As Word.Cell
    Dim strOrigine As String
    Dim irow As Integer
    Dim icell As Integer
    Dim ifld As Integer
    Dim itab As Integer
    Dim strPercorsoFile As String
    Set rs = New ADODB.Recordset
    Set cn = CurrentProject.Connection
    EsportaDati = False
    'strPercorsoFile = "C:\Programmazione\Codem\EsempiCodice\Modello.doc"
    strPercorsoFile = "Il percorso del Tuo File"
    Set mydoc = GetObject(strPercorsoFile)
    mydoc.Application.Visible = True
    Set myrange = Selection.Range
    'strOrigine = " SELECT BollettinoConcessioneMinore.IdBollettino,
BollettinoConcessioneMinore.IdConcessioneMinore, " & _
     '                 " BollettinoConcessioneMinore.Ruolo,
BollettinoConcessioneMinore.AnnoRuolo AS Anno,
BollettinoConcessioneMinore.NumeroBollettino AS     'Bollettino, " & _
 '                     " BollettinoConcessioneMinore.ScadenzaPagamento AS
Scadenza, BollettinoConcessioneMinore.ContoCorrente AS CCP,
'BollettinoConcessioneMinore.Intestatario, " & _
 '                     "
BollettinoConcessioneMinore.DataVersamento,BollettinoConcessioneMinore.Impor
toVersamentoEuro as Canone FROM 'BollettinoConcessioneMinore WHERE
BollettinoConcessioneMinore.IdBollettino BETWEEN 1 AND 3"
    strOrigine = "NomeDellaTuaTabella/Query o stringa Sql"
    rs.Open strOrigine, cn, adOpenForwardOnly, adLockReadOnly
    irow = 0
    ifld = 0
    icell = 0
    itab = 1
            mydoc.Tables.Add myrange, rs.RecordCount + 1, rs.Fields.Count
            For ifld = 0 To rs.Fields.Count - 1
                icell = icell + 1
                With mydoc.Tables(itab).Rows(1)
                    .Cells(icell).Range.Bold = True
'HO FORMATTATO LA PRIMA RIGA DELLA TABELLA  IN GRASSETTO
                    .Cells(icell).Range.Text = rs(ifld).Name
                End With
            Next ifld
            Do Until rs.EOF
                For irow = 2 To mydoc.Tables(itab).Rows.Count
                    ifld = 0
                    For Each acell In mydoc.Tables(itab).Rows(irow).Cells
                            With acell
                                .Range.ParagraphFormat.Alignment =
wdAlignParagraphLeft  'ALLINEO A SINISTRA
                                .Range.Text = IIf(IsNull(rs(ifld)), "",
rs(ifld))                            'GESTIONE DEI CAMPI A VALORE NULL
                            End With
                        ifld = ifld + 1
                    Next acell
            rs.MoveNext
                Next irow
            Loop
       rs.Close
    cn.Close
    MsgBox "Operazione completata con successo"
    Set myrange = Nothing
    Set rs = Nothing
    Set cn = Nothing
    Set mydoc = Nothing
    Set mywdapp = Nothing
    EsportaDati = True
End Function
Saluti