+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Come Svuotare Memoria Di Word

  1. #1
    marcospa non è in linea Novello
    Post
    4

    Come Svuotare Memoria Di Word

    Devo utilizzare Word come "stampino" per fare delle stampe (fronte retro) di
    grafici excel. Una macro excel provvede ad aprire in successione i file, a
    copiare i grafici, ad incollarli(formato bitmap) in word ed a stampare,
    dopodochè cancella i grafici da word e ricomincia col successivo file excel.
    PROBLEMA: dopo 2 (a volte 3) operazioni "incolla" su word l'immagine non
    viene + incollata (anche se ogni volta viene cancellata la precedente e anche
    svuotando tutte le volte il contenuto degli appunti). Penso si tratti di un
    problema di memoria...come posso risolverlo?? (ho provato anche a chiudere e
    riaprire word ma la chiusura blocca il processo di stampa in corso). Grazie

  2. #2
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,179
    Blogs
    3
    con che sistema accedi a Word?
    mostra il codice con il quale apri l'applicazione Word.

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




  3. #3
    marcospa non è in linea Novello
    Post
    4
    Set w = New Word.Application
    w.Visible = True
    w.Documents.Open "C:\modulofronteretro.doc"

    w.Selection.PasteSpecial Link:=False, DataType:=wdPasteBitmap, Placement:=_
    wdFloatOverText, DisplayAsIcon:=False


    queste sono le principali istruzioni...dopodichè cancello con
    w.shape(1).delete

    ma funziona solo 2 o 3 volte

  4. #4
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,179
    Blogs
    3
    il problema sta in come gestisci le istanze di Word.

    in particolare, quando apri un'istanza di word, devi utilizzare delle variabili oggetto opportunamente predisposte per l'applicazione e per il documento.

    una volta terminate le operazioni con Word, devi chiudere il documento (metodo .Close), chiudere l'applicazione Word (metodo .Quit) e annientare le relative variabili oggetto (in pratica = Nothing)

    non ha senso cancellare solo la Shape, poichè il documento resterebbe comunque aperto, e l'applicazione in memoria. In più, non annientando le variabili, il sistema continuerà a mantenere allocata la memoria dedicata all'istanza di word aperta, e il processo non verrà rilasciato.

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




  5. #5
    marcospa non è in linea Novello
    Post
    4
    ti ringrazio per l'aiuto,
    purtroppo però non sono molto tecnico...diciamo che programmo a tentativi

    provo a riassumerti le varie prove che ho fatto:

    - se ogni volta chiudo word (close e quit) la macro funziona in debug ma quando poi la eseguo mi appare un messaggio che mi dice che non si può chiudere word perchè è in corso la stampa (mi chiede se voglio annullare la stampa). evidentemente chiude l'applicazione troppo presto e non ha il tempo di rilasciare la stampa (ho provato anche a spostare l'istruzione di chiusura dalla fine del ciclo alla metà del ciclo successivo ma non ce la fa lo stesso)

    - se anzichè chiudere word cancello di volta in volta i grafici sembra funzionare tutto ma dopo 3 cicli non incolla + nulla pur continuando fino alla fine come se niente fosse (ho inserito come mi hai suggerito l'istruzione word.application.ActiveDocument.Shapes(1).Delete e word.application.ActiveDocument.Shapes(1) = Nothing (anche se non ho ben capito il significato di quest'ultima istruzione) ). In particolare da quando ho inserito .shapes = nothing, monitorando l'utilizzo memoria da task manager, si nota che effettivamente varia (aumenta e poi diminuisce) durante il ciclo...tuttavia il problema persiste.

    Altre idee, suggerimenti?
    grazie mille
    ciao

  6. #6
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,179
    Blogs
    3
    l'unica idea che mi viene in mente è quella di impiantare un ciclo di ritardo, per il tempo necessario a word per trasferire i dati da stampare allo spooler... penso che possano bastare 3 o 4 secondi...

    quindi prima della chiusura dell'applicazione word tra una iterazione del ciclo e un'altra puoi inserire una chiamata ad una routine apposita, ad esempio:

    codice:
    ' In un Modulo:
    
    Sub Aspetta(secs As Integer)
    Dim t As Long
    t = Timer
    Do While Timer < t + secs
        DoEvents
    Loop
    End Sub
    e nel ciclo:

    codice:
    Aspetta 4
    per indicare al programma di attendere 4 secondi.

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




  7. #7
    marcospa non è in linea Novello
    Post
    4
    GRAZIE TANTISSIMO!!!
    Sono dovuto arrivare a 15 sec perchè non si bloccasse mai, ma alla fine funziona.
    Certo dovendo fare + di 400 files si rallenterà il tutto di qualche ora...ma per il momento va bene così.
    Grazie ancora
    ciao

+ Rispondi al Thread

Discussioni simili

  1. Stampare da Access a Word
    Da fabium75q nel forum Access
    Risposte: 5
    Ultimo Post: 03-10-2006, 16:44
  2. Riallocare memoria per le variabili
    Da chico_ nel forum Visual Basic 6
    Risposte: 11
    Ultimo Post: 25-05-2006, 23:28
  3. Copia/incolla in background da word a word
    Da emoj nel forum Microsoft Office, Access, VBA
    Risposte: 1
    Ultimo Post: 19-04-2006, 17:31
  4. Evento change in Word
    Da Orso 33 nel forum Microsoft Office, Access, VBA
    Risposte: 3
    Ultimo Post: 23-01-2006, 19:30

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi