Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VBA] Chiusura applicazione Word lenta

    Ho il seguente codice VBA che lancio da Microsoft Access:
    codice:
    Function WordConv(fileInput As String, fileOutput As String, tipo_oggetto As Long)
        Dim wrd As Word.Application
        Dim wrd_doc As Word.Document
        
        Set wrd = CreateObject("word.application")
        Set wrd_doc = wrd.Documents.Open(fileInput)
        wrd_doc.SaveAs fileOutput, tipo_oggetto
        
        wrd_doc.Close
        wrd.Quit
        Set wrd = Nothing
    
    End Function
    L'esecuzione è lentissima, in modalità step by step il codice si ferma per circa 10 secondi su "wrd.Quit".
    Idee in merito? Grazie.

  2. #2
    A scopo informativo: l'elaborazione è terminata in una 20ina di ore. Il lavoro consisteva nel leggere 7 tabelle Access (con più o meno lo stesso numero di record) e per ogni singolo record veniva richiamata la funzione WordConv; non so per quali motivi ma l'esecuzione era lentissima solo nella prima delle sette tabelle (almeno il 90% delle 20 ore), dalla seconda tabella in poi esecuzione a tempo macchina.

  3. #3
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Non ho mai usato word da programma quindi non conosco i limiti.

    Ma dallo script vedo che ogni volta apri un istanza di Word, apri un file, lo saldi e poi butti l'istanza.
    Non potresti tenere su l'istanza di word e limitarti ad aprire e chiudere i file?

  4. #4
    Sì giusto grazie! Sicuramente è una pratica migliore e più performante. Quindi dovrei dividere in 3 funzioni WordConv, una funzione che crea l'oggetto applicazione Word, una seconda funzione che apre il file Word ci lavora e lo chiude ed una terza che chiude l'applicazione Word.

  5. #5
    Quindi la soluzione:
    codice:
    Function WordConv(wrd As Word.Application, fileInput As String, fileOutput As String, tipo_oggetto As Long)
        Dim wrd_doc As Word.Document
        Set wrd_doc = wrd.Documents.Open(fileInput)
        wrd_doc.SaveAs fileOutput, tipo_oggetto
        wrd_doc.Close
    End Function
    
    Function ApriWordApp() As Word.Application
        Dim wrd As Word.Application
        Set wrd = CreateObject("word.application")
        Set ApriWordApp = wrd
    End Function
    
    Function ChiudiWordApp(wrd As Word.Application)
        wrd.Quit
        Set wrd = Nothing
    End Function
    ...Elaborazione terminata in 2 minuti, grazie mille ancora.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.