Newsgroup: it.comp.appl.access
Titolo: Come applicare una query con parametri ad un doc.word senza aprirlo

Io ho questa problematica:
Ho creato una query con dei parametri. l'ho collegata tramite Stampa
Unione ad un documento Word. Devo stampare questo documento senza
aprire Word. Ci riesco ma i parametri della query non vengono
riconosciuti. Qui di seguito vi rappresento il codice VBA assegnato al
pulsante per la Stampa ed il codice SQL della query.Se avete qualche
suggerimento vi ringrazierò infinitamente.
NB: Questo è il codice SQL della query in questione con alcuni
dati(non tutti) ed il parametro fatidico che non riesco a far
riconoscere.
SELECT [Allegato pensione1].Cognome, [Allegato pensione1].Nome FROM
[Allegato pensione1]
WHERE ((([Allegato pensione1].Id_dipendente)=[Forms]![Dichiarazione
servizi e periodi]![Id_dipendente]));
Questo invece è il codice VBA del Pulsante di comando per la stampa.
Private Sub Anteprima_all1_Click()
On Error GoTo Err_Anteprima_all1_Click
If IsNull(Me![Id_dipendente]) Then
        MsgBox "Immettere le informazioni sul Dipendente prima di
proseguire."
    Else
    Dim appword As Word.Application
    Dim strfile As String
    strfile = "C:\Pensioni\all1.doc"
    Set appword = CreateObject("Word.Application")
    appword.Documents.Open(strfile, ReadOnly:=True).PrintOut Copies:=1
    appword.Quit
       End If
Exit_Anteprima_all1_Click:
    Exit Sub
Err_Anteprima_all1_Click:
    MsgBox Err.Description
    Resume Exit_Anteprima_all1_Click
 
End Sub

 ha scritto nel messaggio 
news:1142415033.5...@z34g2000cwc.googlegroups.com...
Io ho questa problematica:
Ho creato una query con dei parametri. l'ho collegata tramite Stampa
Unione ad un documento Word. Devo stampare questo documento senza
aprire Word. Ci riesco ma i parametri della query non vengono
[risposta]
Non puoi. Non puoi stampare un documento se non apri l'applicazione che l'ha 
generato.
riconosciuti. Qui di seguito vi rappresento il codice VBA assegnato al
pulsante per la Stampa ed il codice SQL della query.Se avete qualche
suggerimento vi ringrazierň infinitamente.
NB: Questo č il codice SQL della query in questione con alcuni
dati(non tutti) ed il parametro fatidico che non riesco a far
riconoscere.
SELECT [Allegato pensione1].Cognome, [Allegato pensione1].Nome FROM
[Allegato pensione1]
WHERE ((([Allegato pensione1].Id_dipendente)=[Forms]![Dichiarazione
servizi e periodi]![Id_dipendente]));
Questo invece č il codice VBA del Pulsante di comando per la stampa.
Private Sub Anteprima_all1_Click()
On Error GoTo Err_Anteprima_all1_Click
If IsNull(Me![Id_dipendente]) Then
        MsgBox "Immettere le informazioni sul Dipendente prima di
proseguire."
    Else
    Dim appword As Word.Application
    Dim strfile As String
    strfile = "C:\Pensioni\all1.doc"
    Set appword = CreateObject("Word.Application")
    appword.Documents.Open(strfile, ReadOnly:=True).PrintOut Copies:=1
    appword.Quit
       End If
Exit_Anteprima_all1_Click:
    Exit Sub
Err_Anteprima_all1_Click:
    MsgBox Err.Description
    Resume Exit_Anteprima_all1_Click
End Sub
[risposta]
Sbagli l'approccio.
Un documento di stampa unione non puoi stamparlo col metodo PrintOut; devi 
eseguire il MailMerge e dirgli se il documento creato lo vuoi inviare sulla 
stampante o deve crearti un nuovo documento.
Es.
'---
On Error GoTo mailMerge_err
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open strfile, ReadOnly:=True
With oApp.ActiveDocument.MailMerge
    .Destination = wdSendToNewPrinter
    .Execute
End With
oApp.Quit False
'oApp.Visible = True
Set oApp = Nothing
Exit Sub
mailMerge_err:
    Set oApp = Nothing
    MsgBox Err.Number & " " & Application.AccessError(Err.Number)
'---
Occhio alla gestione degli errori e alla distruzione degli oggetti creati.
Poi; sarebbe meglio che utilizzassi una tabella dove "appoggiare" i dati da 
utilizzare per il documento di stampa unione. La tabella la riempi con la 
stessa query ma trasformandola in query di accodamento (poi farai una query 
di eliminazione da eseguire prima di quella di accodamento).
Ciao.
-- 
Sergio MAZZA 

Ti ringrazio dlla risposta sei stato veramente molto gentile.
Ho eseguito le migliorie che mi hai suggerito. Ovviamente non sono
pratico perciò ti mando la sintassi del codice così come l'ho scritto
che ovviamente mi dà un errore. La problematica della query di
accodamento non l'ho proprio capita. Scusa ancora per la mia ignoranza.
Il mailmerge non lo conoscevo per niente.
Private Sub Anteprima_all1_Click()
On Error GoTo mailMerge_err
If IsNull(Me![Id_dipendente]) Then
        MsgBox "Immettere le informazioni sul Dipendente prima di
proseguire."
    Else
    Dim oApp As Word.Application
        Dim strfile As String
    strfile = "C:\Pensioni\all1.doc"
    Set oApp = CreateObject("Word.Application")
        oApp.Documents.Open strfile, ReadOnly:=True
    With oApp.ActiveDocument.MailMerge
    .Destination = wdSendToNewPrinter
    .Execute
End With
oApp.Quit False
'oApp.Visible = True
Set oApp = Nothing
                End If
Exit_Anteprima_all1_Click:
    Exit Sub
mailMerge_err:
    Set oApp = Nothing
    MsgBox Err.Number & " " & Application.AccessError(Err.Number)
 
End Sub

 ha scritto nel messaggio 
news:1142512555.0...@v46g2000cwv.googlegroups.com...

On Error GoTo mailMerge_err



End Sub
[risposta]
Il Mailmerge è la stampa unione di word.
Solo che tu invece di farla a mano da word la vuoi fare automaticamente da 
access.
1 - Dovresti indicare che tipo di errore ti presenta ed indicare anche la 
riga dove si ferma il debug mettendo un commento (apice o Rem) d'avanti 
all'On Error Goto.
2 - Visualizzando il codice VBA, inserisci i riferimenti alla libreria 
Microsoft Word (menù: Strumenti - Riferimenti).
3 - La tabella di appoggio. La tua query di selezione visualizzala in 
struttura, menù: Query - Query di creazione tabella, inserisci un nome della 
tabella di appoggio (es. tabAppoggio) e premi OK, eseguila. Verrà creata la 
tabella che conterrà il tuo record; ora apri il documento word e indica la 
tabella come origine della stampa unione, chiudi e salva.
La query di creazione tabella ora deve diventare una query di accodamento 
(menù: Query - Query di accodamento) la chiudi e la salvi, ne crei un'altra 
di eliminazione (indicando la tabella di appoggio) che eseguirai prima di 
quella di accodamento:
es.
DoCmd.OpenQuery "q_svuota_tabAppoggio"
DoCmd.OpenQuery "q_riempi_tabAppoggio"
4 - esegui il codice VBA che effettua il mailmerge.
Ciao.
-- 
Sergio MAZZA 

Ti volevo ringraziare per la tua risposta ma soprattutto per la tua
pazienza.
adesso provo a fare quello che mi hai consigliato. Volevo però
chiederti ancora una cosa a riguardo.
Nel programma iniziale la stampa unione tra la query di Access ed il
documento di Word l'avevo già fatta da Word e con il seguente comando
aprivo word e la query con il criterio e veniva eseguita a dovere:
Private Sub Anteprima_all1_Click()
On Error GoTo Err_Anteprima_all1_Click
If IsNull(Me![Id_dipendente]) Then
        MsgBox "Immettere le informazioni sul Dipendente prima di
proseguire."
    Else
    Dim stAppName As String
    stAppName = "Winword.exe c:\Pensioni\all1.doc"
    Call Shell(stAppName, 1)
     End If
Exit_Anteprima_all1_Click:
    Exit Sub
Err_Anteprima_all1_Click:
    MsgBox Err.Description
    Resume Exit_Anteprima_all1_Click
End Sub
Quindi una volta aperto il documento da word potevo fare la stampa.
Il problema si è presentato quando mi è stato chiesto di eseguire la
stessa stampa con gli stessi criteri ma senza aprire Word e lì sono
andato in panne. Ho cercato di porre rimedio ma come hai ben visto non
sono riuscito a concludere nulla.Puoi mica aiutarmi???
Spero di si. Grazie ancora per il tuo tempo.

 ha scritto nel messaggio 
news:1142591227.0...@j52g2000cwj.googlegroups.com...




End Sub

[risposta]
Segui le istruzioni che ti ho suggerito; se trovi problemi li comunichi qui 
seguendo il discorso...
Ciao.
-- 
Sergio MAZZA 

Ciao Sergio. Ho seguito alla lettera le tue istruzioni ma ho ancora dei
problemi. Se hai ancora un poco di pazienza te lo espongo.
Ho creato la query di creazione tabella e poi modificato in accodamento
Ho creato la query di eliminazione ed inserito i comandi sul codice VBA
Quando eseguo il comando oltre a visualizzare le fastidiose finestre di
messaggio di eliminazione, creazione tabella mi compare il messaggio
finale di errore"5852" senza ottenere quindi la stampa. Sbaglio forse
la compilazione del codice? Questo è quello che ho digitato:
Private Sub Anteprima_all1_Click()
On Error GoTo mailMerge_err
If IsNull(Me![Id_dipendente]) Then
        MsgBox "Immettere le informazioni sul Dipendente prima di
proseguire."
    Else
    Dim oApp As Word.Application
        Dim strfile As String
    strfile = "C:\Pensioni\all1.doc"
DoCmd.OpenQuery "Q_tabAppoggio"
DoCmd.OpenQuery "allegato pensione1 Query1"
    Set oApp = CreateObject("Word.Application")
        oApp.Documents.Open strfile, ReadOnly:=True
    With oApp.ActiveDocument.MailMerge
    .Destination = wdSendToNewPrinter
    .Execute
End With
oApp.Quit False
'oApp.Visible = True
Set oApp = Nothing
                End If
Exit_Anteprima_all1_Click:
    Exit Sub
mailMerge_err:
    Set oApp = Nothing
    MsgBox Err.Number & " " & Application.AccessError(Err.Number)
End Sub
Se puoi perdere un poco del tuo tempo ti sarei veramente grato. Grazie
ancora in anticipo.

 ha scritto nel messaggio 
news:1142929000....@v46g2000cwv.googlegroups.com...
Ciao Sergio. Ho seguito alla lettera le tue istruzioni ma ho ancora dei
problemi. Se hai ancora un poco di pazienza te lo espongo.
Ho creato la query di creazione tabella e poi modificato in accodamento
Ho creato la query di eliminazione ed inserito i comandi sul codice VBA
Quando eseguo il comando oltre a visualizzare le fastidiose finestre di
messaggio di eliminazione, creazione tabella mi compare il messaggio
finale di errore"5852" senza ottenere quindi la stampa. Sbaglio forse
la compilazione del codice? Questo è quello che ho digitato:
Private Sub Anteprima_all1_Click()
On Error GoTo mailMerge_err
If IsNull(Me![Id_dipendente]) Then
        MsgBox "Immettere le informazioni sul Dipendente prima di
proseguire."
    Else
    Dim oApp As Word.Application
        Dim strfile As String
    strfile = "C:\Pensioni\all1.doc"
DoCmd.OpenQuery "Q_tabAppoggio"
DoCmd.OpenQuery "allegato pensione1 Query1"
[risposta]
Ti consiglio di visualizzare il codice sql (di entrambe le query), 
copiarlo/incollarlo in una stringa e utilizzare il metodo RunSQL. In alcuni 
casi avevo notato che il metodo OpenQuery apre la query ma non la chiude 
(anche se non la vedi) e dovresti quindi utilizzare il metodo Close.
Es.
dim strSQL as string
strSQL = "Delete * tabAppoggi..." '<-- sql query di eliminazione
Docmd.Setwarnings false '<-- no messaggi di avviso
docmd.Runsql strSQL
strSQL = "Insert into tabAppoggi..." '<-- sql query di accodamento
docmd.Runsql strSQL
Docmd.Setwarnings true '<-- sì messaggi di avviso
    Set oApp = CreateObject("Word.Application")
        oApp.Documents.Open strfile, ReadOnly:=True
    With oApp.ActiveDocument.MailMerge
    .Destination = wdSendToNewPrinter
    .Execute
End With
oApp.Quit False
'oApp.Visible = True
Set oApp = Nothing
                End If
Exit_Anteprima_all1_Click:
    Exit Sub
mailMerge_err:
[risposta]
    docmd.setwarnigns true
    Set oApp = Nothing
    MsgBox Err.Number & " " & Application.AccessError(Err.Number)
End Sub
Se puoi perdere un poco del tuo tempo ti sarei veramente grato. Grazie
ancora in anticipo.
[risposta]
Hai indicato come origine dati della stampa unione la tabella di appoggio?
Ciao.
-- 
Sergio MAZZA