
Originariamente inviato da
Caiannow
Scusa la mia ignoranza ma è come se mi avessi parlato in cirillico! Riusciresti a spiegarti meglio?
Credo che questo argomento possa essere un pò fuori dagli standard del VBA di Excel, e per questo forse fuori anche dalla portata di molti...
In sostanza se hai un'istanza separata di EXCEL non puoi usare l'automazione di EXCEL interna per provare a discriminarne l'esistenza... quindi hai 2 MODI:
1) API, sono Funzioni del S.O. ma sono più complesse da usare e meno gestibili, oltre che richiedere una formazione più approfondita...
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Dim hWndParent As Long
Dim sParentClassName As String
Dim sWindowName As String
sParentClassName = "XLMAIN"
sWindowName="Caption Name dell'Istanza..."
hWndParent = FindWindow(sParentClassName, sWindowName)
' se il valore di hWndParent = 0 significa che non ha trovato un'istanza...
Non sono certo tuttavia che sia corretto, probabilmente potrebbe richiedere l'uso di FindWindowEX, anche in merito al Fatto che EXCEL suppota più Document... quindi potrebbe essere necessario ITERARE i ChildWindows e cercare quello specifico all'interno dell'istanza... il tutto molto più complesso...!
2)Puoi usare GETOBJECT per cercare di RECUPERARE l'istanza del Server di Automazione assegnandola così ad un'Oggetto EXCEL, se non ricevi errore significa che è aperta, altrimenti no...
Const ERR_APP_NOTRUNNING As Long = 429
Dim xlsAPP as Object
Set xlsApp = GetObject("C:\NomeFile.xls")
If Err = ERR_APP_NOTRUNNING Then
MsgBox "L'ISTANZA NON ESISTE"
' Esci o fai quello che serve...
End If
Ora comprendo che di tutto questo ti sarà difficile apprezzarne i contenuti... ma un pò di sofferenza ci deve pur essere...