Torna al Thread
Public Sub Processo_Elaborazione()
Dim datExcelApplicazione As Object
Dim intIndiceProcesso as Int32
intIndiceProcesso = mdlMain.Crea_Oggetto_Excel_con_Recupero_ID_Processo(datExcelApplicazione)
[...]
Chiudi_Processo(intIndiceProcesso,"EXCEL")
End Sub
' Crea l'oggetto excel.application e restituisce l'indice del processo assegnato
Public Function Crea_Oggetto_Excel_con_Recupero_ID_Processo(ByRef Oggetto_Excel As Object) As Int32
Dim intPreProcessi() As Int32
Dim proProcessi() As Process
Dim proAttuale As Object
Dim intConta As Int32
Dim intIndice As Int32
Try
' Recupera tutti i processi Excel avviati
proProcessi = System.Diagnostics.Process.GetProcessesByName("EXCEL")
' Passsa in rassegna i processi rielvati
For Each proAttuale In proProcessi
' Incrementa il vettore degli indici dei processi
If intPreProcessi Is Nothing Then
ReDim intPreProcessi(0)
Else
ReDim Preserve intPreProcessi(UBound(intPreProcessi) + 1)
End If
' Memorizza l'indice del processo
intPreProcessi(UBound(intPreProcessi)) = proAttuale.Id
Next
' Crea l'oggetto Excel
Oggetto_Excel = CreateObject("Excel.Application")
' Aggiorna l'elenco dei processi Excel avviati
proProcessi = System.Diagnostics.Process.GetProcessesByName("EXCEL")
' Inizializza la variabile/Flag indice
intIndice = -1
' Passa in rassegna i processi rilevati
For Each proAttuale In proProcessi
' Se la vartiabile indice è diversa da 0 o da 1 continua il ciclo
If intIndice <> 0 And intIndice <> 1 Then
' Imposta la variabile a 1
intIndice = 1
' Se il processo attuale è stao rilevato prima della creazione del processo
' Excel, imposta la variabile a 0 per saltare la memorizzazione dell'indice
If Not intPreProcessi Is Nothing Then
For intConta = 0 To UBound(intPreProcessi)
If intPreProcessi(intConta) = proAttuale.Id Then intIndice = 0
Next
End If
' Se l'indice è rimato a 0, vuol dire che non è stato trovato nell'elenco e che
' perciò è il nostro processo e viene memorizzato l'indice
If intIndice = 1 Then
intIndice = proAttuale.Id
End If
End If
Next
' Restituisce l'indice rilevato. Se l'indice è rimasto a 1, vuol dire che ci sono stati problemi
' nella creazione del processo, pertanto restituisce nothing
If intIndice = 1 Then
Return Nothing
Else
Return intIndice
End If
Catch exc As Exception
meErrori.RegistrazioneErrore(Err, exc, True)
Return Nothing
End Try
End Function
' Chiude un oggetto in base al suo indice
Public Sub Chiudi_Processo(ByVal Indice_Processo As Int32, _
Optional ByVal Nome_Processi_Da_Visionare As String = Nothing)
Dim intPreProcessi() As Int32
Dim proProcessi() As Process
Dim proAttuale As Object
Dim intConta As Int32
Dim intIndice As Int32
Try
' Recupera tutti i processi
If Nome_Processi_Da_Visionare Is Nothing Then
proProcessi = System.Diagnostics.Process.GetProcesses
Else
proProcessi = System.Diagnostics.Process.GetProcessesByName(Nome_Processi_Da_Visionare)
End If
' Passsa in rassegna i processi rielvati
For Each proAttuale In proProcessi
' Se l'indice del processo corrisponde all'indice passato come parametro, chiude il processo
If proAttuale.id = Indice_Processo Then
proAttuale.Kill()
Exit For
End If
Next
Catch exc As Exception
meErrori.RegistrazioneErrore(Err, exc, True)
End Try
End Sub