COMO FINALIZAR PROCESSO EXCEL QUE FUNCIONE

JCM0867 14/05/2015 11:35:22
#446632
Olá pessoal
Novamente a porcaria do processo excel que não fecha

Imports Excel = Microsoft.Office.Interop.Excel
------------------------------------
Dim appXL As Excel.Application
Dim wbXl As Excel.Workbook
Dim shXL As Excel.Worksheet
Dim raXL As Excel.Range

appXL = CreateObject([Ô]Excel.Application[Ô])
wbXl = appXL.Workbooks.Add
shXL = wbXl.ActiveSheet

[txt-color=#0000f0]... Codigos funcionando 100%...[/txt-color]

[txt-color=#0000f0]Fechando:[/txt-color]
raXL = Nothing
shXL = Nothing
wbXl.Close()
wbXl = Nothing
appXL.Quit()
appXL = Nothing

Aí eu entro lá nos processos o excel está lá pendurado
já fucei na internet dão dicas mas nenhuma funciona

Detalhe, não quero visualizar o excel, ele será montado e guardado em uma pasta

Se alguém puder ajudar, agradeço
JCM0867 14/05/2015 17:26:54
#446644
Nem uma dica?
WEVERSON 14/05/2015 21:50:09
#446651
Tente esta....

https://social.msdn.microsoft.com/Forums/pt-BR/21902c5c-8e87-40cb-9468-2fd6e4ae86bd/vba-advanced-excel-evitando-que-aplicaes-excel-fiquem-carregados-no-memria?forum=vbapt
JCM0867 15/05/2015 10:26:30
#446663
Citação:

:
Tente esta....

https://social.msdn.microsoft.com/Forums/pt-BR/21902c5c-8e87-40cb-9468-2fd6e4ae86bd/vba-advanced-excel-evitando-que-aplicaes-excel-fiquem-carregados-no-memria?forum=vbapt



Eu usei assim:

Private Sub LimpaExcel()
Dim s() As Process
Try
s = Process.GetProcessesByName([Ô]excel[Ô])
s(0).Kill()
Catch
MessageBox.Show([Ô]Não foi possivel finalizar o processo.[Ô], [Ô]DownloadsGratix Erro![Ô])
End Try
End Sub

O problema é que ele apaga todas as planilhas que por ventura possam estar abertas e não só aquelas criadas pelo programa
Interessante que os [Ô]Excel.exe[Ô] nos processos não tem ou não achei onde mostra a qual Planilha ele pertence.

Notei que se estiver uma planilha aberta antes, ela está em primeiro plano e as que dei [Ô]appExcel.Quit[Ô] ficaram em segundo plano, consequentemente devo apagar a do segundo plano assim não apaga alguma planilha aberta

Vou dar uma olhada no teu link para ver se tem algo sobre isso.

Valeu
JCM0867 16/05/2015 10:27:21
#446687
se eu usar assim:
Private Sub LimpaExcel()
Dim s() As Process
Try
s = Process.GetProcessesByName([Ô]excel[Ô])
s(0).Kill()
Catch
MessageBox.Show([Ô]Não foi possivel finalizar o processo.[Ô], [Ô]DownloadsGratix Erro![Ô])
End Try
End Sub

ele apaga todos os exacel, gostaria de apagar só que está em segundo plano, tem como?
WILSONJOSE 16/05/2015 12:17:32
#446690
Tenho em vb e funciona certinho

Dim exclApp As Object
Dim exclBook As Object
Dim excSheet As Object

[ô]Carregar o Excel:
Set exclApp = CreateObject([Ô]Excel.Application[Ô])
[ô]Crie um WorkBook:
Set exclBook = exclApp.Workbooks.Add
[ô]Defina a planilha ativa p/ facilitar o trabalho:
Set exclSheet = exclApp.ActiveWorkbook.ActiveSheet

............. código

[ô]Fecha o excel
exclApp.Quit

[ô]Limpe as variáveis de Objeto:
Set exclSheet = Nothing
Set exclBook = Nothing
Set exclApp = Nothing
JCM0867 16/05/2015 13:06:59
#446694
Descrevi como fiz acima, quase idêntico ao seu.
o uso do [Ô]set[Ô] deve ser em VB6
no meu VB6 tb funciona

mas no VB.NET (não se usa [Ô]set[Ô] na frente das variáveis) ele não fecha totalmente o excel, fica lá aberto em segundo plano, na internet tem um milhares com o mesmo problema.

me obrigo usar após a limpeza dos objetos
Dim s() As Process
Try
s = Process.GetProcessesByName([Ô]excel[Ô])
s(0).Kill()
Catch
MessageBox.Show([Ô]Não foi possivel finalizar o processo.[Ô], [Ô]DownloadsGratix Erro![Ô])
End Try

só que lipa qualquer excel aberto e não só os do segundo plano

PEGUDO 18/05/2015 20:17:03
#446747
Resposta escolhida
Cara,
Seguinte... O processo não fecha mesmo. O que acontece é que o processo fica aberto mas com o título em branco.

Tente fazer o loop novamente mas faz um If para dectar se o processo tem o título da janela em branco.
Estou fora de casa e tem um tempo que não programo para VB, mas é algo assim:

For Each processo In Process
If processo.ProcessName = [Ô]Excel[Ô] Then
If processo.MainTitle = [Ô][Ô] Then
processo.Kill()
End If
End If
Next

Assim, o programa vai fechar só os processos referentes ao seu programa.
REPITO: Estou longe de casa e estou mudando meu ramo para php e tem muito tempo que não programo em VB, mas veja quais comandos se parecem com os que eu escrevi e mande ver.
JCM0867 19/05/2015 10:27:13
#446761
Ok, entendi a logica, vou ver se consigo fazer aqui,
esse MainTitle parece que não tem, vou ver qual faz a mesma coisa.

Valeu
PEGUDO 19/05/2015 13:58:51
#446769
O processo é este.... Fiz aqui na minha casa...
        For Each processo In Process.GetProcesses
If processo.ProcessName = [Ô]Excel[Ô] Then
If processo.MainWindowTitle = [Ô][Ô] Then
processo.Kill()
End If
End If
Next
JCM0867 19/05/2015 15:29:30
#446776
Ok, deu certo
Apagou só as planilhas criadas, Deixei uma outra aberta e não apagou
como o loop é muito rápido acaba deixando planilhas pra trás sem apagar.
Bastou colocar um sleep de 1 segundo

finalizando ficou assim:

For Each processo As Process In Process.GetProcesses()
If UCase(processo.ProcessName) = [Ô]EXCEL[Ô] Then
If processo.MainWindowTitle = [Ô][Ô] Then
Try
processo.Kill()
System.Threading.Thread.Sleep(1000)
Catch
MessageBox.Show([Ô]Não foi possivel finalizar o processo.[Ô], [Ô]DownloadsGratix Erro![Ô])
End Try
End If
End If
Next


ps. Como tu colocou as linhas de códigos endentados com outra fonte na tua resposta?

Grato
Tópico encerrado , respostas não são mais permitidas