Newsgroup: it.comp.lang.visual-basic
Titolo: Istanze di Excel95 che non vogliono morire...

Problemino :
Ho un' applicazione che sfrutta l'automazione ole da VB 4.0 verso excel per
la creazione di grafici.
Il problema e' che deve essere duale e gestire sia il modello ad oggetti di
excel97 che  quello di excel95 (diversi in parecchie cose).
Per testare la versione di excel usiamo una createobject
("Excel.Application") e poi andiamo a controllare cosa restituisce la
proprieta' version.
Fatto questo ci basta rilasciare l'oggetto creato settandolo a nothing e con
excel97 funziona tutto mentre sotto excel95 l'oggetto non viene rilasciato e
dopo un po' rimangono varie istanze di excel "appese" in  windows che alla
lunga inchiodano la macchina.
Qualcuno ha avuto problemi del genere ?
E' riuscito a risolverli ?
grazie

la creazione di grafici.
......

 CreateObject?
mmm aspetta che ci provo , non  mi sembra di averlo visto .........
grazie

Ho avuto lo stesso problema ti mando cosa ho trovato::::
Esempio di funzione GetObject
In questo esempio la funzione GetObject viene utilizzata per ottenere un
riferimento a un foglio di lavoro specifico di Microsoft Excel (MyXL). La
proprietà Application del foglio di lavoro viene utilizzata per rendere
visibile Microsoft Excel, per chiuderlo e così via. Utilizzando due chiamate
API, la routine Sub DetectExcel ricerca Microsoft Excel e se è già in
esecuzione lo immette nella tabella Running Object. La prima chiamata a
GetObject genera un errore se Microsoft Excel non è già in esecuzione. In
questo esempio, l'errore comporta l'impostazione del flag ExcelWasNotRunning
su True. La seconda chiamata a GetObject specifica un file da aprire. Se
Microsoft Excel non è già in esecuzione, la seconda chiamata lo avvia e
restituisce un riferimento al foglio di lavoro rappresentato dal file
specificato, prova.xls. Tale file deve esistere nella posizione specificata.
In caso contrario verrà generato un errore di automazione Visual Basic. Il
codice di esempio imposta quindi come visibili sia Microsoft Excel che la
finestra che contiene il foglio di lavoro specificato. Infine, se non era in
esecuzione una versione precedente di Microsoft Excel, il codice utilizza il
metodo Quit dell'oggetto Application per chiudere Microsoft Excel. Se
l'applicazione era già in esecuzione, non si tenta di chiuderla. Il
riferimento viene rilasciato impostando l'oggetto su Nothing.
' Dichiara le routine API necessarie:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
               ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
               ByVal wParam as Long, _
               ByVal lParam As Long) As Long
Sub GetExcel()
   Dim MyXL As Object   ' Variabile in cui viene
                        ' memorizzato il riferimento a Microsoft Excel.
   Dim ExcelWasNotRunning As Boolean   ' Flag per il rilascio finale.
' Prova per verificare se vi è già una copia di
' Microsoft Excel in esecuzione.
   On Error Resume Next   ' Rimanda l'intercettazione degli errori.
' La funzione Getobject chiamata senza il primo
' argomento restituisce un riferimento a un'istanza
' dell'applicazione. Se l'applicazione non è in
' esecuzione viene generato un errore.
   Set MyXL = Getobject(, "Excel.Application")
   If Err.Number <> 0 Then ExcelWasNotRunning = True
   Err.Clear   ' Cancella l'oggetto Err in presenza di errori.
' Ricerca Microsoft Excel. Se Microsoft Excel è in
' esecuzione, lo inserisce nella tabella Running
' Object.
   DetectExcel
' Imposta la variabile oggetto in modo che faccia
' riferimento al file che si desidera visualizzare.
   Set MyXL = Getobject("c:\vb4\MYTEST.XLS")
' Visualizza Microsoft Excel tramite la proprietà
' Application, quindi visualizza la finestra effettiva
' che contiene il file utilizzando l'insieme Windows
' del riferimento all'oggetto MyXL.
   MyXL.Application.Visible = True
   MyXL.Parent.Windows(1).Visible = True
   ' Posizione per operazioni di modifica
   ' del file.
   ' ...
' Se questa copia di Microsoft Excel non era già in
' esecuzione dall'inizio, la chiude utilizzando il
' metodo Quit della proprietà Application.
' Si noti che quando si cerca di uscire da Microsoft
' Excel, la barra del titolo
' lampeggia e viene visualizzato un messaggio
' per richiedere se si desidera salvare i file
' caricati.
   If ExcelWasNotRunning = True Then
      MyXL.Application.Quit
   End IF
   Set MyXL = Nothing   ' Rilascia il riferimento alla
                        ' applicazione e al foglio di lavoro.
End Sub
Sub DetectExcel()
' La routine individua un'istanza di Excel in
' esecuzione e la registra.
   Const WM_USER = 1024
   Dim hWnd As Long
' Se Excel è in esecuzione questa chiamata API
' restituisce l'handle corrispondente.
   hWnd = FindWindow("XLMAIN", 0)
   If hWnd = 0 Then   ' 0 significa che Excel non
                     ' è in esecuzione.
      Exit Sub
   Else
   ' Poiché Excel è in esecuzione è necessario
   ' utilizzare la funzione API SendMessage per
   ' inserirlo nella tabella Running Object.
      SendMessage hWnd, WM_USER + 18, 0, 0
   End If
End Sub
Utilizza questa modificandola a tuo piacimento vedrai che funziona!
Ciao!!!!! cicoria!
--
http://web.tiscalinet.it/minorchio