none
Erro no comando ThisWorkbook.close RRS feed

  • 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 2010
     
    O 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
    sexta-feira, 30 de maio de 2014 21:17

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.Workbooks

          Application.DisplayAlerts = False
             If wrkb.Count > 1 Then
                ActiveWorkbook.Close
             Else
                Application.Quit
             End If

    Private 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
    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

    sábado, 31 de maio de 2014 02:28
    Moderador
  • Já havia tentado e também não deu certo, inclusive com a dica. Obrigada pela atenção.
    sábado, 31 de maio de 2014 05:37
  • 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

    sábado, 31 de maio de 2014 12:16
    Moderador
  • 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 Sub

    Private Sub Workbook_Open()
    With Application
            .DisplayFormulaBar = False      
        End With
        With ActiveWindow
            .DisplayWorkbookTabs = False    
            .DisplayGridlines = False       
            .DisplayHeadings = False
        End With
     End Sub

    segunda-feira, 2 de junho de 2014 13:41
  • Após diversas tentativas a seguinte alteração deu certo.

    Retirei o comando save da condição e inclui no beforeclose.

           Set wrkb = Application.Workbooks

          Application.DisplayAlerts = False
             If wrkb.Count > 1 Then
                ActiveWorkbook.Close
             Else
                Application.Quit
             End If

    Private 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
    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

    terça-feira, 3 de junho de 2014 00:19
    Moderador