Notifications
Clear all

Ajuda com Private Sub CommandButton1_Click()

3 Posts
2 Usuários
0 Reactions
1,328 Visualizações
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Boa tarde!

Pessoal, por favor, será que alguém poderia me ajudar com o seguinte código?

Private Sub CommandButton1_Click()
    On Error GoTo TrataErro
 
    'variáveis
    Dim newBook As Workbook
    Dim sheet As Worksheet
    Dim i As Byte
 
    'Desativa os avisos e atualiação da tela
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
 
    For Each sheet In ThisWorkbook.Worksheets
        'cria uma nova pasta de trabalho:
        Set newBook = Application.Workbooks.Add
        'copia a planilha
        sheet.Copy Before:=newBook.Sheets(1)
        'remove as outras
        For i = 2 To newBook.Worksheets.Count
            newBook.Worksheets(2).Delete
        Next i
        'salva o arquivo
        newBook.SaveAs Replace(ThisWorkbook.FullName, ThisWorkbook.Name, vbNullString) & sheet.Name & ".xlsx"
        newBook.Close
    Next sheet
 
TrataSaida:
    'Reativa os avisos e atualiação da tela
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
 
    'zera as variáveis
    Set newBook = Nothing
    Set sheet = Nothing
 
    MsgBox "Feito!"
    Exit Sub
 
TrataErro:
    MsgBox Err.Description, vbCritical, "Erro"
 
    GoTo TrataSaida
End Sub

mas ele está com erros ao ser executado, ele exporta todas as planilhas ativa na minha pasta de trabalho.

preciso exportar uma planilha especifica.

em anexo, segue o arquivo excel contendo todos os detalhes.

 
Postado : 28/02/2018 2:33 pm
selmo
(@selmo)
Posts: 236
Estimable Member
 

Olá Jnexcel, bom dia.

A resolução para seu problema na verdade é bem simplês, basta realizar uma validação antes de exportar os dados, acrescente um if após o For each verificando o nome da guia atual, segue o código:

Option Explicit

Private Sub CommandButton1_Click()
    On Error GoTo TrataErro

    'variáveis
    Dim newBook As Workbook
    Dim sheet As Worksheet
    Dim i As Byte

    'Desativa os avisos e atualiação da tela
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For Each sheet In ThisWorkbook.Worksheets
        'realiza uma validação com o nome da guia
        If sheet.Name = "Plan2" Then 'lembrando que na validação é case sensitive
                'cria uma nova pasta de trabalho:
                Set newBook = Application.Workbooks.Add
                'copia a planilha
                sheet.Copy Before:=newBook.Sheets(1)
                'remove as outras
                For i = 2 To newBook.Worksheets.Count
                    newBook.Worksheets(2).Delete
                Next i
                'salva o arquivo
                newBook.SaveAs Replace(ThisWorkbook.FullName, ThisWorkbook.Name, vbNullString) & sheet.Name & ".xlsx"
                newBook.Close
                
                'sai do loop
                Exit For
        End If
    Next sheet

TrataSaida:
    'Reativa os avisos e atualiação da tela
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

    'zera as variáveis
    Set newBook = Nothing
    Set sheet = Nothing

    MsgBox "Feito!"
    Exit Sub

TrataErro:
    MsgBox Err.Description, vbCritical, "Erro"

    GoTo TrataSaida
End Sub


Na duvida brother, estamos ae pra ajudar

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 01/03/2018 5:43 am
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Selmo, bom dia!

Agradeço pela atenção quanto a minha dúvida.

Muito obrigado!

 
Postado : 01/03/2018 8:51 am