Newsgroup: it.comp.appl.access
Titolo: Problema merging dati stampa unione

Salve a tutti ho il seguente problema cercando di fare la stampa di 
unione da codice VBA utilizzando una query con parametri ricavati da una 
maschera.
Quando arrivo al punto Vedi (***) access mi rende l'errore "la routine 
property let non è stata definita e la routine property get non ha 
restituito l'oggetto"
Qualcuno mi puo' aiutare a capire cosa accade e perchè?
Le librerie ADO, DAO e x WORD, sono presenti nei riferimenti.
Private Sub letterapre_Click()
On Error GoTo Err_letterapre_Click
    Dim oApp As Object
 
    Set oApp = CreateObject("Word.Application")
    oApp.Visible = True
 
    'variabile contenente il recordset del Dettagglio
    Dim rstDett As DAO.Recordset
    'variabile contenente l'istruzione sql
    Dim stringaSql1, stringaSql2  As String
 
    'mi creo la query che mi restituisce il dettaglio
    stringaSql1 = "SELECT Ordini.Anno, ordini.ordine, Ordini.[Quotazione 
iniziale], Ordini.Testata," & _
    " contatti.Nome, contatti.Cognome, riviste.Riviste_Editore, 
riviste.indirizzo, riviste.Località," & _
    " riviste.Prov, Ordini.[Quotazione Monitor], riviste.CAP, 
Ordini.Nome_Configurazione,"
 
    stringaSql2 = " [Quotazione Iniziale]-[quotazione Monitor] AS 
importo" & _
    " FROM riviste INNER JOIN (Ordini INNER JOIN contatti ON 
Ordini.ID_Contatto = contatti.ID_contatto)" & _
    " ON (riviste.Testata = Ordini.Testata) AND (riviste.ID = 
contatti.riviste_ID)"
 
    'mi prendo il recordset
    Set rstDett = CurrentDb.OpenRecordset(stringaSql1 & stringaSql2)
 
    'controllo i dati
    rstDett.MoveLast
    rstDett.MoveFirst
 
    oApp.Documents.Open "C:\Documents and Settings\massimob.HL\Documenti
\workinprogress\Gestione riviste\lettera2.doc"
 
'-----------------------------------------------
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="Nome"
    With oApp.ActiveDocument(1).MailMerge (***)
        .Destination = wdSendToNewDocument
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=True
    End With
 
    oApp.Close
    Set oApp = Nothing
Exit_letterapre_Click:
 
    Exit Sub
Err_letterapre_Click:
    MsgBox Err.Description
    Resume Exit_letterapre_Click
 
 
End Sub
-- 
MaxBan

 End Sub
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

 
Ciao maurizio grazie dei consigli, non ho capito il discorso di oDoc, 
perchè devo creare un oggetto oDoc che punta ad un'oggetto simile oApp?
Il tutto si blocca qui: .Destination = wdSendToNewDocument con un errore 
"Oggetto richiesto non disponibile"
Premetto che il doc lettera2 è un doc word con i campi "MERGEFIELD 
xxxxxx" uguali a quelli della query.

 perchè devo creare un oggetto oDoc che punta ad un'oggetto simile oApp?
    Non simile! Molto diverso. Uno e un oggetto:
        Class Application
            Membro di Word
l'altro:
        Class Document
            Membro di Word


, 
maurizio...@freepass.it
 says...

Allora vedo di risponderti:
1)Selection <- ho fatto una prova x vedere se creando il codive da VBA 
lo aggiornava con i dati del merging, in particolare ho attivato il 
registratore di macro e creato una stampa di unione per vedere il codice 
che generava word. Preso il pezzo che m'interessava (o almeno credevo)ho 
provato ma niente non fuzia nemmeno così, crea il campo ma non lo 
aggiorna. Comunque dato che ho già il doc word con i mergefield la cosa 
era solo x prova.
2) il munero 1 mi sa che l'ho preso incollando il codice dalla macro VBA 
in modo forse un po' troppo bovino.
3) Non salvo perchè ancora non sono arrivato a quel punto e non so come 
si fa :(
Il doc word lettera2 contiene i campi mergefield xxxx (xxx puo' essere 
indirizzo, nome, ecc. che sono anche i campi ricavati con la query) + 
testo libero.
A questo punto non so se lo sbaglio è nel codice o nel documento word.
Io volevo riempire i campi mergefield del doc con i dati ricavati dalla 
query, ma mi sto perdendo nel codice che è questo:
Private Sub letterapre_Click()
On Error GoTo Err_letterapre_Click
    Dim oApp As Object
    Dim oDoc As Object
 
    Set oApp = CreateObject("Word.Application")
    oApp.Visible = True
 
    'variabile contenente il recordset del Dettagglio
    Dim rstDett As DAO.Recordset
    'variabile contenente l'istruzione sql
    Dim stringaSql1 As String, stringaSql2  As String
 
    'mi creo la query che mi restituisce il dettaglio
    stringaSql1 = 1stringa
    stringaSql2 = 2stringa
 
    'mi prendo il recordset
    Set rstDett = CurrentDb.OpenRecordset(stringaSql1 & stringaSql2)
 
    'controllo i dati
    rstDett.MoveLast
    rstDett.MoveFirst
 
    ' apro il documento preimpostato
    oApp.Documents.Open "C:\Documents and Settings\...\lettera2.doc"
 
    'Eseguo il merging dei dati nel documento attivo
    With oApp.ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument '<-qui si blocca il codice 
con l'errore "L'OGGETTO RICHIESTO NON è DISPONIBILE"
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=True
    End With
 
