Newsgroup: it.comp.lang.visual-basic
Titolo: Sto impazzendo con WORD!!!

Si avete capito bene.. sto impazzendo perchè non riesco a capire cosa sia
che blocca la mia applicazione
anche se sono sicuro che si tratta di una cosa talmente stupida che non
riesco a "vederla"
Spiego subito il problema:
Nel mio programma vb ho inserito come riferimento anche l'oggetto
msword9.olb
nelle dichiarazioni ho scritto
Public mydoc As Word.Document
Public wordptr As Word.Application
al Load del MainForm  dichiaro
Set wordptr = New Word.Application
Lancio una procedura di stampa in cui faccio:
        On Error Resume Next
        Set mydoc = wordptr.Documents.Add(App.Path & "\documento.doc")
       If Err.Number = 462 Then
            wordptr.Quit
            Set wordptr = New Word.Application
            Set mydoc = Nothing
            Set mydoc = wordptr.Documents.Add(App.Path & "\documento.doc")
            Err.Clear
        End If
        On Error GoTo 0
Fin qui tutto ok. Trovo alcune stringhe nel documento, le sostiuisco con
altre.
Poi devo inserire una immagine in una cella di una tabella e faccio
        Set mycell = Application.ActiveDocument.Tables(2).Cell(Row:=1,
Column:=2)
        Clipboard.Clear
        Clipboard.SetData LoadPicture(App.Path + "\temp.bmp")
        mycell.Range.Paste
alla fine faccio
mydoc.printout
mydoc.close
Tutta questa cosa funziona alla perfezione ma ***SOLO LA PRIMA VOLTA CHE LA
ESEGUO***
Se nel corso della stessa sessione di funzionamento del programma, anche
dopo 1 ora, provo a rifarla, mi fa tutte le sostituzioni delle stringhe ecc
ma si blocca sul Set MyCell con errore 462 : "Il computer server remoto non
esiste o non è disponibile" in poche parole l'errore che dovrebbe dare
quando non c'e' nessun documento aperto... invece c'è! Perchè se faccio
sostituzioni di stringhe me le fa!
Se chiudo il programma e ritento funziona tutto
ho provato anche ad inserire
wordptr.Quit  (per chiudere word e poi riaprirlo), come se fosse la prima
esecuzione del programma. ma il discorso non cambia
Vi prego, aiutatemi! sto veramente impazzendo!!!!!! :-)()()()

 mydoc.close
Giustamente, in caso di errore distruggi il puntatore.
Ma alla fine non distruggi nessun puntatore.
Di fatto, Word non può chiudersi, perchè una applicazione esterna sta
tenendo referenziato un suo oggetto.
Devi mettere un Set Mydoc=nothing subito dopo il close.
Dopo, puoi dare il quit e poi fai anche il Set Nothing dell'oggetto
Application.
Ciao
Alberto

 ha scritto nel messaggio
news:5fEH9.59380$2B1.1...@twister2.libero.it...

Ho fatto come dicevi ma non cambia:
Ho messo all'inzio della procedura:
        On Error Resume Next
        Set wordptr = New Word.Application
        Set mydoc = wordptr.Documents.Add(App.Path + "\" + MODORDINE)
       If Err.Number = 462 Or Err.Number = 91 Then
            wordptr.Quit
            Set wordptr = New Word.Application
            Set mydoc = Nothing
            Set mydoc = wordptr.Documents.Add(App.Path + "\" + MODORDINE)
            Err.Clear
        End If
[-------------------Qui tutta la procedura di trova e sostituisce stringhe e
incolla foto in tabella. La prima volta funziona-----------------]
Alla fine ho messo di tutto:
        On Error Resume Next
        mydoc.SaveAs App.Path + "\tempordine.doc"
        mydoc.Close
        Set mydoc = Nothing
        wordptr.Quit
        Set wordptr = Nothing
        Application.Quit
        Application.ActiveDocument.Close
        On Error GoTo 0
        wordptr.Quit
        Word.Application.Quit
        Set wordptr = Nothing
Così non rischio di aver dimenticato qualcosa :-D
Ma non va.... la seconda volta mi fa le sostituzioni delle stringhe (quelle
si) ma quando gli dico
        Set mycell = Application.ActiveDocument.Tables(2).Cell(Row:=j,
Column:=2)
da l'errore 462..... :-/(((((( ti giuro sto piangendo quasi... sono 3 giorni
che ci sbatto la testa!!!
Durante l'esecuzione ho tenuto sottocchio il task manager....
Alla prima esecuzione si apre WINWORD.EXE e QSERVER.EXE .
Dato il comando wordptr.quit scompaiono entrambi (quindi word si chiude!)
Dalla seconda volta in poi si apre solo WINWORD.EXE
Ma il fatto che io non riesco a capire è questo: se il documento "non è
attivo"... perchè mi fa le sostituzioni ma quando gli vado a dire di
selezionarmi la tabella mi si blocca??????
Per fare le sostiuzioni faccio
                If Not TrovaeSostituisci("@prezzotot@", rs!prezzo_ordine)
Then
                    MsgBox ("Errore di SOSTITUZIONE ")
                    mydoc.Close
                    Exit Sub
                End If
dove
Function TrovaeSostituisci(TrovaStringa As String, SostituisciStringa As
String) As Boolean
   Dim trova As Word.Find
On Error Resume Next
   Set trova = mydoc.Range.Find
   TrovaSostituisci = trova.Execute(TrovaStringa, , , , , , , , ,
SostituisciStringa)
End Function
Spero potrai aiutarmi!

Ho risolto!!!!
L'avevo detto io che era una c@@@ata talmente stupida che era
"invisibile"......
Se io all'inizio ho fatto
Set mydoc = wordptr.Documents.Add(App.Path + "\" + MODORDINE)
non posso fare
Set mycell = Application.ActiveDocument.Tables(2).Cell(Row:=j,Column:=2)
ma devo fare
Set mycell = mydoc.Tables(2).Cell(Row:=j,Column:=2)
Anche se non ho capito perchč la prima volta funziona e dalla seconda in poi
no... a me interessa che funzioni... e cosi č!
Anche se il perchč funzioni solo la prima volta resta per me un grosso
mistero visto che se non posso farlo la seconda volta non dovrei poterlo
fare neanche la prima no????
Ok.. ora offro da bere a TUTTI!!!!!!!!
Grazie per l'aiuto!

 fare neanche la prima no????
Te l'ho già spiegato nel post precedente.
Tu avevi postato solo la definizione di due oggetti, e io ti avevo detto di
distruggerli prima di chiudere.
Adesso, hai postato un terzo oggetto (mycell), che quindi teneva
referenziato qualcosa in word. Se non lo distruggi, rischi che agisca come
prima ti avevo detto che agiva MyDoc.
Come troppe volte, l'errore sta proprio nelle righe "qui faccio altre cose
che non importano...".
Ciao
Alberto

 che non importano...".
Hai ragione :-((
Perdonato????
Anche perchč se vai a leggere il primo post anche lě avevo inserito il
mycell
eh!
Ti servono un paio di occhiali !! :-D
Scherzo!
Grazie comunque per il preziosissimo aiuto!

 Ti servono un paio di occhiali !! :-D
Giusto.
Il post era talmente lungo che su alcune cose ho sorvolato, e mi ero perso
proprio il mycell.
Comunque adesso il concetto l'hai capito, e questo č l'importante.
Ciao
Alberto