Newsgroup: it.comp.appl.access
Titolo: [ExcelAutomation] intercettare la chiusura...!

Saluti a tutti.
Con Word applicavo l'automazione di Word in questo modo in una
Form per intercettare la chiusura di una sessione di Word aperta via
codice, e tutto è OK.....!
'Dichiarazione a livello di Form
Private WithEvents objWordApp As Word.Application
'Evento dell'oggetto dichiarato
Private Sub objWordApp_Quit()
    msgbox "E' stato chiuso Word"
End Sub
Con Excel tutto questo non funziona, ma il problema è che
non trovo l'evento Quit, o altro evento che ne fa le veci.
Non posso ricorrere alle API perchè non devo intercettare
Excel come Applicativo, ma quell'istanza che ho aperto io.
Questo perchè devo leggere le eventuali modifiche fatte
dall'utente ed eseguire dei controlli....!
Grazie.
@Alex.

 ha scritto nel messaggio
news:bvu0mo$9vn$1...@lacerta.tiscalinet.it...

Ciao,
Word può avere una sola istanza, Excel ne può avere più di una, l'evento
Quit in Excel non esiste per il semplice fatto che l'istanza che crei da
codice non può essere chiusa dall'utente, o meglio anche se l'utente chiude
l'istanza da te creata questa rimane sempre nel Task Manager fino a quando
chi la crea non la distrugge.
Potresti ripiegare sull'evento WorkbookBeforeClose.
Ciao Giorgio

 Ciao Giorgio
Ecco appunto.
Scherzi a parte intuitivamente era una cosa comprensibile.
Per l'evento da te riferito, va dichiarato WithEvents non
l'oggetto Excel.Application, ma Excel.WorkBook, di conseguenza
ora ci provo.
Grazie.
@Alex.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:3749f9b2dd3cd3b9b4...@mygate.mailgate.org...

ciao,
a me funziona dichiarando solo Excel.Application e l'oggetto Excel.Workbook
viene passato dall'evento
-----------
Private WithEvents objExcel As Excel.Application
Private Sub objExcel_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel
As Boolean)
    MsgBox "Chiusura "
End Sub
------------
ciao Giorgio

 ciao Giorgio
Anche a me perfettamente bene.....!
Ottimo come sampre.
Ciao Giorgio, per la fattura a chi la intesto....?


Giorgio ora ti metto in difficoltà....!
Ora quello che faccio è questo:
1)Esporto un Blob(file Excel.Xlt)
2)Lo compilo con i dati del DB
3)Lo rendo modificabile dall'utente
4)Su chiusura XLS rileggo i dati modificati e li salvo nel DB(Non ho
alternative, è un'imposizione)
5)ReImporto il File in un Campo BLOB dedicato
6)A questo punto dovrei eliminare il File.Xls, ma essendo all'interno
dell'Evento
xlsApp_WorkbookBeforeClose, ovviamente non me lo concede, ti scrivo i passi
del CODE
 Private Sub xlsApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel
As Boolean)
   xlsActiveWkb.Save
   Call ImportaModifiche
   Set xlsActiveWkb = Nothing
   Set xlsApp = Nothing
   Call ImportaBlob
    ' quì volevo inserire Kill dopo un Doevents
    DoEvents
    Kill NomeFileXLS
 End Sub
L'unico metodo che mi viene in mente è settare un Flag e controllarlo su
evento Timer, all'esterno dell'evento in questione....!
Hai altre opzioni....!
Ciao.
@Alex.

 Hai altre opzioni....!
Ciao,
ovviamente bisogna trovare una strada alternativa, il timer mi sembra una
buona opzione, potresti fare così
' In testa al codice del tuo form aggiungi queste dichiarazioni
-----------------------------
Private Declare Function IsWindow _
    Lib "user32" _
    (ByVal hwnd As Long) _
    As Long
Dim hwndXls As Long ' hwnd dell'applicazione che crei
---------------------------------
'Quando crei l'applicazione ne salvi l'hwnd e avvii il timer
hwndXls = xlsApp.hwnd
Me.TimerInterval=100
'Quando l'utente chiude il WorkBook
----------------------
Private Sub xlsApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As
Boolean)
  If Wb.Name="NomeTuoWorkBook" Then
      xlsActiveWkb.Save
      Call ImportaModifiche
      Set xlsActiveWkb = Nothing
      Call ImportaBlob
      'Chiudi l'applicazione
      'e il timer cancellerà il file
      'solo se l'applicazione è effettivamente chiusa
      Set xlsApp = Nothing
  End if
End Sub
---------------------
---------------------
Private Sub Form_Timer()
   'Se la tua istanza è stata chiusa
   If IsWindow(hwndXls) = 0 Then
       Kill "C:\Documenti\Excel\NomeTuoFileXls.xls"
       Me.TimerInterval = 0
    End If
End Sub
-------------------------

 ha scritto nel messaggio
news:c01fje$sgk$1...@lacerta.tiscalinet.it...

Decisamente bella e professionale, molto meglio della variabile
booleana come Flag, ovviamente funziona alla perfezione.....!
Vabbè non sono riuscito a spaventarti, ma tu si.....! ;-)
GRazie mille.
@Alex.


Sapevo che questo tipo di soluzione sarebbe piaciuta a un API-Cultore.
;-)
Giorgio

 Giorgio
Già, per ora D'Acacia e D'Eucalipto.......!
Buona Domenica.
@Alex.