Newsgroup: it.comp.appl.access
Titolo: Una volta si' e una no

Scusate (comincio a vergognarmi di come sto approffittando
spudoratamente), me ne succede un'altra bellina:
Ho messo insieme un accrocchio cosi': c'e' una maschera singola che
visualizza dati da passare alla stampa-unione con word, c'e' una
sottomaschera dove scelgo una lettera-tipo da usare e una query
(l'origine dati delle lettere-tipo) con un "criterio" che fa
riferimento ad un controllo nella maschera in modo da unire solo un
record per volta. Un bottone nella sottomaschera (elenco delle
lettere-tipo) dovrebbe eseguire la stampa-unione e salvare la lettera
creata col nome giusto nel posto giusto.
Funziona quasi. Purtroppo funziona una esattamente una volta si' e una
volta no.
Se provo a aprire/salvare piu' documenti uno dopo l'altro, una volta
funziona, la volta dopo si blocca dove compare "documents" (vedi
sotto). Dopo aver chiuso word a mano, al tentativo successivo funziona
di nuovo e cosi' via.
Private Sub Comando4_Click()
 
    Dim Stampa As Word.Application
    Dim lettera As String
    Dim letterafatta As String
    Dim unisci As Object
 
    lettera = "e:\corrispondenza\modelli\" & [Documento] & ".doc"
    letterafatta = "e:\corrispondenza\cj" & Forms![Scadenziario
gare]![Numero] & "prova" & [cod]
 
    Set Stampa = CreateObject("Word.Application")
 
    Stampa.Visible = True
    Stampa.Application.Documents.Open lettera
 
    Set unisci = Stampa.ActiveDocument.MailMerge
        With unisci
            .Execute
        End With
    Set unisci = Nothing
 
    Documents(1).Activate  ****** QUI SI BLOCCA UNA VOLTA SI' E UNA NO
    ActiveDocument.SaveAs FileName:=letterafatta
    Documents.Close SaveChanges:=wdDoNotSaveChanges
    Stampa.Quit
 
    Set Stampa = Nothing
 
End Sub

La sparo:
Prima di 
Set unisci = nothing
prova un 
unisci.close (oppure unisci.quit non so)
Guarda che l'ho davvero sparata. 
Nella mia esperienza errori simili sono dovuti al non corretto rilascio
degli oggetti OLE istanziati.
Impostare la variabile a nothing puo' non essere sufficiente.
Ciao
Marco
---
il mio vero indirizzo e-mail e' senza la "y"
---
-- 
Posted from 
smtp4.libero.it
 [193.70.192.54] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Impostare la variabile a nothing puo' non essere sufficiente.
Questo l'ho pensato anch'io, ma l'errore non viene dall'operazione di
stampa unione (a parte che un close o quit del mailmerge secondo
l'help non esiste).
Ho provato a ridurre tutto ad aprire-salvare-uscire e l'errore e' il
medesimo:
Private Sub Comando4_Click()
 
    Dim Stampa As Word.Application
    Dim lettera As String
    Dim letterafatta As String
 
    lettera = "e:\corrispondenza\modelli\" & [Documento] & ".doc"
    letterafatta = "e:\corrispondenza\prova.doc"
 
    Set Stampa = CreateObject("Word.Application")
 
    Stampa.Visible = True
    Stampa.Application.Documents.Open lettera
 
    MsgBox (Documents.Count) **** AL SECONDO PASSAGGIO SI BLOCCA QUI
    MsgBox (ActiveDocument.Name)


 ha scritto nel messaggio
news:qnfdusomjb8kdkjq2...@4ax.com...

Mi sono permesso di modificarti la sub così:
 Private Sub Comando4_Click()
     Dim Stampa As Word.Application
     Dim lettera As String
     Dim letterafatta As String
     lettera = "e:\corrispondenza\modelli\" & [Documento] & ".doc"
     letterafatta = "e:\corrispondenza\prova.doc"
     Set Stampa = CreateObject("Word.Application")
     Stampa.Visible = True
     Stampa.Documents.Open lettera
     MsgBox Stampa.Documents.Count' **** AL SECONDO PASSAGGIO SI BLOCCA QUI
     MsgBox 
Stampa.ActiveDocument.Name
     Stampa.ActiveDocument.SaveAs FileName:=letterafatta
     Stampa.Documents.Close SaveChanges:=wdDoNotSaveChanges
     Stampa.Quit
     Set Stampa = Nothing
 End Sub
Dovrebbe andare...
Ciao.

Dovrebbe andare...
Fai gli indovinelli? OK, lunedi' provo a capire. Dagli errori si
impara.


Terrň incrociate le dita sperando che sia... la volta sě.
Ciao.


Funziona! :))))
Ma, dimmi, tu hai capito perche' prima funzionava una volta si' e una
no?
Alla fine questo e' l'accrocchio che fa la stampa unione tra un
documento word scelto in una maschera con un record scelto nella
stessa maschera:
Private Sub Comando4_Click()
 
    Dim Stampa As New Word.Application
    Dim lettera As String
    Dim letterafatta As String
    Dim unisci As Object
 
    lettera = "e:\corrispondenza\modelli\" & [Documento] & ".doc"
    letterafatta = "e:\corrispondenza\cj" & Forms![Scadenziario
gare]![Numero] & "prova" & [cod]
 
    Set Stampa = CreateObject("Word.Application")
 
    Stampa.Application.Documents.Open lettera
 
    Set unisci = Stampa.ActiveDocument.MailMerge
        With unisci
            .Execute
        End With
    Set unisci = Nothing
 
    Stampa.ActiveDocument.SaveAs FileName:=letterafatta
    Stampa.Documents.Close savechanges:=wdDoNotSaveChanges



C'è un'altra "stranezza" nel tuo codice:
 Private Sub Comando4_Click()
'con la voce new già crei un'istanza di word.application
'microsoft consiglia di non utilizzare new ma createobject() per istanziare
un oggetto
     Dim Stampa As New Word.Application
'cambiala in: Dim Stampa as Word.Application
     Dim lettera As String
     Dim letterafatta As String
     Dim unisci As Object
     lettera = "e:\corrispondenza\modelli\" & [Documento] & ".doc"
     letterafatta = "e:\corrispondenza\cj" & Forms![Scadenziario
gare]![Numero] & "prova" & [cod]
     Set Stampa = CreateObject("Word.Application")'<-- questa istruzione è
superflua se nella dichiarazione hai inserito la parola chiave new
     Stampa.Application.Documents.Open lettera
     Set unisci = Stampa.ActiveDocument.MailMerge
         With unisci
             .Execute
         End With
     Set unisci = Nothing
     Stampa.ActiveDocument.SaveAs FileName:=letterafatta
     Stampa.Documents.Close savechanges:=wdDoNotSaveChanges
     Stampa.Quit
     Set Stampa = Nothing
 End Sub
Se vuoi puoi fare riferimento direttamente al documento word così:
 Private Sub Comando4_Click()
     Dim Stampa As New Word.Document
     Dim lettera As String
     Dim letterafatta As String
     lettera = "e:\corrispondenza\modelli\" & [Documento] & ".doc"
     letterafatta = "e:\corrispondenza\cj" & Forms![Scadenziario
gare]![Numero] & "prova" & [cod]
     Set Stampa = CreateObject("Word.Document")
     Stampa.Application.Documents.Open lettera
     Stampa.Mailmerge.Execute
     Stampa.SaveAs FileName:=letterafatta
     Stampa.Close savechanges:=wdDoNotSaveChanges
     Set Stampa = Nothing
 End Sub
Risparmi l'utilizzo di una variabile oggetto (Unisci).
Ciao.

Risparmi l'utilizzo di una variabile oggetto (Unisci).
senti, hai visto che qualche mex prima cercavano un buon programmatore
genovese?  :-)))
--
non studio non lavoro non guardo la tv
non vado al cinema non faccio sport
----------------------------------------
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access

 
http://members.xoom.it/it_db_access
AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH!
AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH!
AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH!
AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH!
AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!AH! AH!
AHIO! Me 'se 'ngrippata 'na mandibola..