Notifications
Clear all

Excel Aberto em Segundo Plano

9 Posts
3 Usuários
0 Reactions
1,702 Visualizações
(@keelvz)
Posts: 7
Active Member
Topic starter
 

Bom dia colegas,

Estou com um problema que não consigo achar solução.

Utilizo um suplemento no excel, referente a um sistema de geração de relatórios financeiros. Acontece que criei algumas macros para automatizar alguns processos de geração de relatórios, coisa simples do tipo criar uma nova aba e gerar novos filtros de geração.

 

Acontece que depois que o usuário encerra o excel, caso ele tenha usado a macro, o excel fica aberto em segundo plano no gerenciador de tarefas, consumindo memória.

 

Alguem ja se deparou com esse problema? Não tem relação com o suplemento, visto que se utilizar as funções normais dele, esse problema não aparece, só ocorre quando gero a macro.

Alguma sugestão para encerrar a aplicação por completa?

 

Obrigado!

 

Este tópico foi modificado 4 anos atrás by Keelvz
 
Postado : 30/07/2020 8:12 am
carlosrgs
(@carlosrgs)
Posts: 631
Prominent Member
 

Bom dia Keelvz, como está a parte do código que fecha o Excel?

_______________________________________________________________________________________________
Carlos Santos
* Marque o tópico como Resolvido se foi solucionado seu problema.

 
Postado : 30/07/2020 8:32 am
(@keelvz)
Posts: 7
Active Member
Topic starter
 

@carlosrgs o código não fecha o excel, o mesmo deve ser encerrado manualmente pelo usuário.

 
Postado : 30/07/2020 9:01 am
carlosrgs
(@carlosrgs)
Posts: 631
Prominent Member
 

Entendi, nesse caso não sei ajudar rs, vamos aguardar!

_______________________________________________________________________________________________
Carlos Santos
* Marque o tópico como Resolvido se foi solucionado seu problema.

 
Postado : 30/07/2020 9:19 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Uma ideia...

Seu código cria uma instância do Excel nova, tipo CreateObject("Excel.Application") ou Dim x as New Excel.Application? Se sim, considere encerrá-la antes de sair (evento Before_Close, Me.Application.Quit).

Se foi outro Workbook que a criou, Workbooks("Nome").Application.Quit.

Ou pelo menos tornar todas as instâncias visíveis para decidir fechá-las manualmente ao final:

Sub Revela()
Dim wb As Workbook
For Each wb In Excel.Application.Workbooks
wb.Application.Visible = True
wb.Windows(1).Visible = True
Next wb
End Sub

 
Postado : 30/07/2020 10:19 am
(@keelvz)
Posts: 7
Active Member
Topic starter
 

@edsonbr no modulo, eu tenho a seguinte código "Dim BPC As New EPMAddInAutomation"

 

EPMAddInAutomation é para buscar a biblioteca das funções do suplemento, acredito que devo encerra-lo conforme orientação, mas não sei como.

Tentei encerrar no evento Before_Close no Workbook, mas não resolveu, ainda fica pendurado em segundo plano. Não há outro workbook envolvido, apenas o da própria macro, e não há nenhuma linha do código em que eu criei novas workbooks.

 

 

 

 

 
Postado : 30/07/2020 12:27 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 
Postado por: @keelvz

...EPMAddInAutomation é para buscar a biblioteca das funções do suplemento...

Que tipo de suplemento é esse? Um .xlam ou um suplemento COM? Que tipo de objeto é EPMAddInAutomation? É uma classe de um módulo de classes dentro do .xlam?

Teste com Debug.Pring TypeName(BPC) qual retorno.

Geralmente basta criar uma referência para o suplemento para poder usar suas Functions/Subs, sem precisar criar nova instância.

Por exemplo, fiz um suplemento há um tempo atrás para uma empresa que trabalhei em que, uma das Functions era pra identificar o modelo de receptor SKY através do IRD lido pelo cód. de barras (um código alfanumérico de 17 caracteres). Tendo feito referência a ele em Ferramentas > Referências... depois bastava usá-lo em qualquer lugar do código da seguinte forma:

...
Dim Tipo As String
Tipo = EBZetas.ReceptorSKY("010A2300010110905")

  Retorna "SHR23-700"

Em que EBZetas é o nome do VBA Project e ReceptorSKY é uma Function (o nome do arquivo é UtilsZetas.xlam, portanto não tem uso no código).

Depois de referenciado na verdade dá até pra dispensar a qualificação e usar tão somente:

 Tipo = ReceptorSKY("010A2300010110905")

 

Por isso achei estranho vc ter tido que instanciar um novo objeto pra essa finalidade.

 
Postado : 30/07/2020 2:12 pm
(@keelvz)
Posts: 7
Active Member
Topic starter
 

@edsonbr esse é um suplemento COM, sendo que o objeto EPMAddinAutomation é uma classe de uma biblioteca que eu importo em Referencias (a biblioteca é a FPMXLClient)

Testei  Debug.Print e ele me traz o nome do objeto EPMAddinAutomation na janela de verificação imediata.

 

Tentei não instanciar conforme você demonstrou, mas os membros da classe EPMAddInAutomation não funcionam dai

 
Postado : 31/07/2020 7:03 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Seu Excel é 32 bits? Se sim, teste o seguinte código:

Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Sub FindAndTerminate()
Dim objWMIService, objProcess, colProcess
Dim strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" _
& strComputer & "rootcimv2")
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'excel.exe' And ProcessID <> " & GetCurrentProcessId)
If colProcess.Count > 0 Then
For Each objProcess In colProcess
objProcess.Terminate
Next objProcess
End If
End Sub

Créditos: Re: Kill all instances of Excel (except current)

 
Postado : 31/07/2020 9:32 am