Stampa word e processi attivi

di
Anonimizzato12131
il
7 risposte

Stampa word e processi attivi

Dopo la prima stampa di un report complesso con word, le stampe successive non riescono a chiudere le finestre word utilizzate per la compilazione del documento finale. (due doc: A copiato e incollato a B, la finestra di A che si deve chiudere per lasciare posto solo al doc B). Se utilizzo il tasto "compatta e ripristina" di access tutto ritorna a funzionare regolarmente.
Ora qualcuno sa dirmi come chiudere i processi memorizzati oppure qualcuno ha il codice VB per eseguire l'operazione di compatta e ripristina del db aperto?
Grazie

7 Risposte

  • Re: Stampa word e processi attivi

    Non dai spiegazioni sufficienti per capire...
    Come apri i DOC...?
    Via AUTOMAZIONE...? a MANO...?

    Se via Automazione evidentemente non gestisci correttamente il RILASCIO degli OGGETTI... perchè quello che dici non è ammissibile, quando l'Oggetto DOC(di Word.Automation) viene istanziato deve essere CHIUSO e DISTRUTTO... tu fai così...?
    Hai eventuali gestione ERRORI che prevengono la possibilità di lasciare l'istanza APERTA...?

    Il Fatto che il COMPATTA rimetta a posto il tutto(probabilmente anche il CHIUDI sarebbe sufficiente) rafforza la mia ipotesi che non gestisci correttamente le istanze degli OGGETTI di AUTOMAZIONE.

    Quindi inizia a darci dettagli TECNICI AVANZATI su come operi.
  • Re: Stampa word e processi attivi

    Credo che tu abbia ragione sul rilascio degli oggetti, non sono programmatore e ho ostruito la routine di copia incolla prendendo spunto da alcuni codici, ti posto il codice che ho scritto, così lo valuti.
    sto facendo un d per il parroco e ho bisogno delle stampe da word perchè deve essere possibile apportare modifiche. Con modelli con meno di 20 bookmarks non ho avuto problemi, con oltre ho deciso di dividere il modello in più parti e di utilizzare il copia e incolla.
    Ecco il codice che funziona solo la prima volta, ho tolto i punti di rilascio perchè non ero sicuro di dove metterli, mi si interrompeva la routine.

    Private Sub m02_batt_Click()
    'dichiaro le variabili
    Dim objWord As Word.Application
    Dim xRange As Selection
    Dim xDoc As Word.Document
    Dim yDoc As Word.Document
    Dim i As Integer
    ' imposto il percorso del docA (copia) e del docB (incolla)
    aDoc = "C:\parrocchia\moduli\generali\M02_certificato_battesimo_1.doc"
    bDoc = "C:\parrocchia\moduli\generali\M02_certificato_battesimo_2.doc"
    On Error Resume Next
    Set objWord = GetObject(, "Word.Application")
    If Err.Number = 429 Then
    Set objWord = CreateObject("Word.Application")
    End If
    'compilo modulo A e preparo copia in clipboard
    With objWord
    .Visible = False
    'objWord.Activate
    .Documents.Open ("C:\parrocchia\moduli\generali\M02_certificato_battesimo_1.doc")
    'objWord.Activate
    On Error GoTo M02_batt_Err
    If Forms!M_BB_ANAVIEW!SESSO = "M" Then
    .ActiveDocument.Bookmarks("ao1").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "F" Then
    .ActiveDocument.Bookmarks("ao1").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "M" Then
    .ActiveDocument.Bookmarks("ao2").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "F" Then
    .ActiveDocument.Bookmarks("ao2").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "M" Then
    .ActiveDocument.Bookmarks("ao3").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "F" Then
    .ActiveDocument.Bookmarks("ao3").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "m" Then
    .ActiveDocument.Bookmarks("ao1").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "f" Then
    .ActiveDocument.Bookmarks("ao1").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "m" Then
    .ActiveDocument.Bookmarks("ao2").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "f" Then
    .ActiveDocument.Bookmarks("ao2").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "m" Then
    .ActiveDocument.Bookmarks("ao3").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "f" Then
    .ActiveDocument.Bookmarks("ao3").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    .ActiveDocument.Bookmarks("vreg").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!VOLUMEREGBATTESIMO))
    .ActiveDocument.Bookmarks("preg").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!PAGINAREGBATTESIMO))
    .ActiveDocument.Bookmarks("nreg").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!NUMEROREGBATTESIMO))
    .ActiveDocument.Bookmarks("cognome").Select
    objWord.Selection.Font.AllCaps = True
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!COGNOME))
    .ActiveDocument.Bookmarks("nome").Select
    objWord.Selection.Font.AllCaps = True
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!NOME))
    .ActiveDocument.Bookmarks("lnascita").Select
    objWord.Selection.Font.AllCaps = True
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!LUOGODINASCITA))
    .ActiveDocument.Bookmarks("dnascita").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!DATADINASCITA))
    .ActiveDocument.Bookmarks("gbatt").Select
    .Selection.Text = (Day(Forms!M_BB_ANAVIEW!DATADIBATTESIMO))
    .ActiveDocument.Bookmarks("mbatt").Select
    .Selection.Text = (MonthName(Month(Forms!M_BB_ANAVIEW!DATADIBATTESIMO)))
    .ActiveDocument.Bookmarks("abatt").Select
    .Selection.Text = (Year(Forms!M_BB_ANAVIEW!DATADIBATTESIMO))
    Set xDoc = objWord.Documents.Open(aDoc)
    xDoc.Select
    Set xRange = objWord.Selection
    xRange.Copy
    'riempio seconda parte modulo e incollo selezione
    .Documents.Open ("C:\parrocchia\moduli\generali\M02_certificato_battesimo_2.doc")
    objWord.Visible = True
    'objWord.Activate
    On Error GoTo M02_batt_Err
    If Forms!M_BB_ANAVIEW!SESSO = "M" Then
    .ActiveDocument.Bookmarks("ao4").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "F" Then
    .ActiveDocument.Bookmarks("ao4").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "M" Then
    .ActiveDocument.Bookmarks("ao5").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "F" Then
    .ActiveDocument.Bookmarks("ao5").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "m" Then
    .ActiveDocument.Bookmarks("ao4").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "f" Then
    .ActiveDocument.Bookmarks("ao4").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "m" Then
    .ActiveDocument.Bookmarks("ao5").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!mas))
    End If
    If Forms!M_BB_ANAVIEW!SESSO = "f" Then
    .ActiveDocument.Bookmarks("ao5").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!fem))
    End If
    .ActiveDocument.Bookmarks("dcresima").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!DATADICRESIMA))
    .ActiveDocument.Bookmarks("parcresima").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!LUOGODICRESIMA))
    .ActiveDocument.Bookmarks("diocesicresima").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!DIOCESIDICRESIMA))
    .ActiveDocument.Bookmarks("cogconiuge").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!sposconcognome))
    .ActiveDocument.Bookmarks("nomconiuge").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!sposconnome))
    .ActiveDocument.Bookmarks("dmatr").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!DATADIMATRIMONIO))
    .ActiveDocument.Bookmarks("parmatr").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!PARROCCHIADIMATRIMONIO))
    .ActiveDocument.Bookmarks("diocesimatr").Select
    .Selection.Text = (CStr(Forms!M_BB_ANAVIEW!DIOCESIDIMATRIMONIO))
    .ActiveDocument.Bookmarks("start").Select
    Set yDoc = objWord.Documents.Open(bDoc)
    Set xRange = objWord.Selection
    xRange.Paste
    For i = 1 To 1
    Next i
    objWord.Activate
    'chiudo doc A
    'aDoc.Close False
    Documents("C:\parrocchia\moduli\generali\M02_certificato_battesimo_1.doc").Close False
    End With
    objWord.Application.WordBasic.MsgBox "Verificare che nel certificato ci siano tutti i dati.", "ATTENZIONE!" '
    'Set objWord = Nothing
    M02_batt_Err:
    If Err.Number = 94 Then
    objWord.Selection.Text = ""
    Resume Next
    End If
    End Sub
  • Re: Stampa word e processi attivi

    Ora siccome ti ho già risposto anche come OTTIMIZZARE l'uso dei BOOKMARK e non hai minimamente recepito il suggerimento lasciando pur cadere il 3D... direi che prima di tutto ora tu debba andarti a rileggere quello...

    Nel Link suggerito quello che accade a te non accade, li c'è la corretta gestione degli Oggetti.

    Nel tuo codice, inutilmente dispersivo per l'errato uso dei Bookmark non chiudi ASSOLUTAMENTE NULLA, nè hai previsto una gestione errori che possa forzare la chiusura... cosa prevista sempre nel demo proposto.

    Ricapitolando, ora non hai che da STUDIARE come agire, gli elementi li hai tutti ed il FORUM non eroga codice da COPIA/INCOLLARE.

    P.S. L'uso del TAG per il codice... non è OPTIONAL, anche questo serve come carta d'identità...
  • Re: Stampa word e processi attivi

    Non ho nessuna intenzione di spacciarmi per programmatore e non è il mio lavoro. Sto facendo un db gratuito per la parrocchia e la programmazione mi fa perdere un sacco di tempo e notti insonni. Ho letto il tuo metodo, ne ho compresa la brevità, ma mi sono posto il dubbio se mi permetteva di formattare specifici campi con tutto maiuscolo come ho fatto. Credo che anche se in forma gentile, farsi dare del c...... non sia entusiasmante Lascio il forum solo ai professionisti.
    PS: il tuo metodo l'avevo già scaricato da tempo, ma ti o detto che non programmo e ho proseguito per la strada lunga dalla quale avevo già risultati.Ho solo tre modelli con oltre 20 indici.
    Cmq Grazie.
  • Re: Stampa word e processi attivi

    Non ti ho offeso in alcun modo, se non chè, ti ho fatto notare che il 3D precedente lo hai lasciato in SOSPESO senza nemmeno dare un commento di chiusura, e questo a prescindere dal tuo pensiero può essere valutato poco costruttivo.

    La programmazione è così, difficile, il tuo problema si risolve in modo più strutturato definando una tabella di Formattazione.

    Giusto per ribadire il concetto, essendo un'amatore e non un professionista, anch'io mi dedico a STUDIARE molto e fare molte prove..., esattamente quello che ho sonsigliato a te.

    A prescindere da questo, ora vedi tu...
  • Re: Stampa word e processi attivi

    Scusa se non ho risposto al post precedente, ma il tuo codice per automazione l'avevo già scaricato, ho difficoltà con tutte le dichiarazioni che metti nel form, sicuramente agevolano poi la compilazione dei modelli, ma io devo anche formattare alcuni campi sul documento word con tutto maiuscolo, solo giorno data, solo mese data, ecc.
    Per cui la soluzione che ho impostato mi andava bene, il problema mi è nato con il documento in questione.
    ho perso notti a leggere vari post, compresi i tuoi, ho utilizzato i consigli che "mi sembravano più semplici" (considerazione soggettiva). ma te l'ho detto probabilmente terminato il progetto, rimetto da parte il VB per lungo tempo.
    Sono un semplice appassionato di informatica.
  • Re: Stampa word e processi attivi

    Ho risolto mettendo un controllo al doc A dopo l'istruzione di copia

    Set xDoc = objWord.Documents.Open(aDoc)
    xDoc.Select
    Set xRange = objWord.Selection
    xRange.Copy
    xDoc.Close wdDoNotSaveChanges
    Set xdocDoc = Nothing

    Grazie per le indicazioni, cerco di studiare anche se poi le soluzioni spesso sono soggettive.Con access ho creato il db e le varie maschere velocemente, non pensavo di sbattere la testa sui report.
Devi accedere o registrarti per scrivere nel forum
7 risposte