Usuário com melhor resposta
Erro no comando ThisWorkbook.close

Pergunta
-
Meu objetivo e fechar a planilha que estou trabalhando no momento, ocorre que se tenho mais de uma planilha aberta e utilizo o comando Application.Quit todas fecham.Se apenas a que estou utilizando está aberta e utilizo o comando ThisWorkbook.close o aplicativo não é fechado (tela cinza).Assim, tentei verificar quantas planilhas estão abertas e utilizar o comando apropriado.Se apenas uma planilha está aberta o aplicativo e fechado e tudo bem. Mas, se outra planilha estiver aberta o excel apresenta a mensagem "Erro de definição de aplicativo ou de definição de objeto", aperto ok e a planilha e fechada.Obs: utilizo o excel 2010O que estou fazendo de errado? Agradeço desde já.Set wrkb = Application.Workbooks
If wrkb.Count > 1 Then
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
ThisWorkbook.Close
Else
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
Application.Quit
End If
Respostas
-
Após diversas tentativas a seguinte alteração deu certo.
Retirei o comando save da condição e inclui no beforeclose.
Set wrkb = Application.WorkbooksApplication.DisplayAlerts = False
If wrkb.Count > 1 Then
ActiveWorkbook.Close
Else
Application.Quit
End IfPrivate Sub Workbook_BeforeClose(Cancel As Boolean)
With Application
.DisplayFormulaBar = True
End With
With ActiveWindow
.DisplayWorkbookTabs = True
.DisplayGridlines = True
.DisplayHeadings = True
End With
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
Obrigada Felipe, seu alerta me fez analisar o beforeclose. Valeu!
- Marcado como Resposta Mbarros segunda-feira, 2 de junho de 2014 14:41
Todas as Respostas
-
ThisWorkbook se refere à pasta de trabalho que contém o código que está em execução.
ActiveWorkbook se refere à pasta de trabalho que está ativa no Excel.
Experimente trocar ThisWorkbook.Close por ActiveWorkbook.Close
---
Outra dica: você pode, em uma linha, salvar e fechar uma pasta de trabalho usando o comando:
ThisWorkbook.Close SaveChanges:=True
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
-
Em primeiro lugar, é bom referirmos à terminologia técnica correta:
Planilha = Aba de uma pasta de trabalho
Pasta de Trabalho = Arquivo do Excel
---
Ainda acho que a resolução do problema está em usar ActiveWorkbook ao invés de ThisWorkbook.
Há algum código no evento BeforeClose dessas pastas de trabalho que está tentando fechar?
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Comandos utilizados ao fechar opostos aos utilizados no open.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Application
.DisplayFormulaBar = True
End With
With ActiveWindow
.DisplayWorkbookTabs = True
.DisplayGridlines = True
.DisplayHeadings = True
End With
End SubPrivate Sub Workbook_Open()
With Application
.DisplayFormulaBar = False
End With
With ActiveWindow
.DisplayWorkbookTabs = False
.DisplayGridlines = False
.DisplayHeadings = False
End With
End Sub -
Após diversas tentativas a seguinte alteração deu certo.
Retirei o comando save da condição e inclui no beforeclose.
Set wrkb = Application.WorkbooksApplication.DisplayAlerts = False
If wrkb.Count > 1 Then
ActiveWorkbook.Close
Else
Application.Quit
End IfPrivate Sub Workbook_BeforeClose(Cancel As Boolean)
With Application
.DisplayFormulaBar = True
End With
With ActiveWindow
.DisplayWorkbookTabs = True
.DisplayGridlines = True
.DisplayHeadings = True
End With
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
Obrigada Felipe, seu alerta me fez analisar o beforeclose. Valeu!
- Marcado como Resposta Mbarros segunda-feira, 2 de junho de 2014 14:41
-
Ao inserir um código no fórum, utilize blocos de código. Para utilizar essa ferramenta, clique no botão cuja legenda é “Inserir bloco de código” na barra do editor de mensagens do fórum. Uma janela aparecerá onde você deverá colar seu código cru na caixa de texto à esquerda. Então, selecione a opção Vb.Net na caixa de combinação que você verá em cima à esquerda e depois clique no botão Inserir.
---
Você pode trocar:
Set wrkb = Application.Workbooks Application.DisplayAlerts = False If wrkb.Count > 1 Then ActiveWorkbook.Close Else Application.Quit End If
por:
If ActiveWorkbook Is Nothing Then Application.Quit Else ActiveWorkbook.Close SaveChanges:=False End If
Felipe Costa Gualberto - http://www.ambienteoffice.com.br