Usuário com melhor resposta
VB.NET - Usuário fecha Excel mas processo continua aberto

Pergunta
-
Pessoal,
Bom dia!
Estou com o seguinte problema:
Estou usando VB.NET para gerar um relatório em Excel para o usuário. Este arquivo não é salvo no HD, só aberto na tela.
Sub GeraExcel()
Try
' Usando uma instância já aberta do Excel
Excelobj = GetObject(, "Excel.Application")
Catch ex As Exception
'Criando uma nova instância do Excel
Excelobj = CreateObject("Excel.Application")
Finally
Excelobj.Workbooks.Add()
End Try
End SubTanto faz se uso uma instância aberta do Excel ou abro uma nova, quando o usuário fecha o Excel o processo continua rodando.
Alguém tem alguma idéia que possa ajudar?
Desde já grato.
Respostas
-
Tente isto:
Finally For Each process1 As Process In Process.GetProcessesByName("Excel") process1.Kill() Next End Try
No meu aqui vem dando certo, mas lembre-se se houver alguma instância do Excel aberta ele irá fechar todas.
E há nesse caso ele fechará a tela, este é um tipo de código que você usa realmente para não mostrar o Excel, após a conclusão de alguma ação.
Todas as Respostas
-
-
-
-
-
-
-
-
-
Já tentou usar as ferramentas do .net do office?
https://msdn.microsoft.com/pt-br/library/dd264733.aspx
Deve ter alguma classe ou objeto que esta impedindo a aplicação de fechar totalmente...
Pode se que tenha o mesmo problema com os interops, mas só tentando.Desenvolvedor de sistemas VB6, ASP, ASP.NET, C#, VB.NET, SQL Server, Oracle e MySql.
-
-
Já tentou usar as ferramentas do .net do office?
https://msdn.microsoft.com/pt-br/library/dd264733.aspx
Deve ter alguma classe ou objeto que esta impedindo a aplicação de fechar totalmente...
Pode se que tenha o mesmo problema com os interops, mas só tentando.
Desenvolvedor de sistemas VB6, ASP, ASP.NET, C#, VB.NET, SQL Server, Oracle e MySql.
Eric,
Não posso usar o interop. Aqui tem uma salada de versões do Office. Da versão 2000 até 2007.
Triste realidade. :(
-
-
Coloca a parte da declaração do ExcelObj ja que não esta usando interop
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
Segue:
Dim Excelobj As Object = Nothing
Try
Excelobj = GetObject(, "Excel.Application")
Catch ex As Exception
Excelobj = CreateObject("Excel.Application")
FinallyExcelobj.Workbooks.Add()
End Try' Finalizando a variável
Excelobj = Nothing
GC.Collect()Obrigado.
-
Tente isto:
Finally For Each process1 As Process In Process.GetProcessesByName("Excel") process1.Kill() Next End Try
No meu aqui vem dando certo, mas lembre-se se houver alguma instância do Excel aberta ele irá fechar todas.
E há nesse caso ele fechará a tela, este é um tipo de código que você usa realmente para não mostrar o Excel, após a conclusão de alguma ação.
-
Bom dia,
Por falta de retorno do usuário, esta thread será encerrada.
Caso seja necessário, por gentileza, abra uma thread nova.
AtenciosamenteMarcos SJ Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.