Oi amigos. Hoje vou disponibilizar para vocês um código que eu desenvolvi visando a criação de um arquivo excel, em tempo de execução, ou seja, criar um novo arquivo através de uma macro personalizada.

Neste exemplo prático, teremos 4 planilhas no arquivo original, sendo que três delas conterão o saldo das vendas de três setores distintos de uma empresa e 1delas exibirá o resumo de todos e o total geral das vendas. Até aqui, nada de mais. Nosso código passa a funcionar a partir daí.

Iremos disponibilizar uma funcionalidade nesta planilha de resumos, que fará o seguinte: criará uma cópia de qualquer uma das planilhas dos setores, individualmente, em um novo arquivo, para ser enviado por email, por exemplo, sem necessidade de informar os demais valores dos outros setores da empresa para quem não seja conveniente informar.

Vamos ao trabalho.

Crie seu arquivo com as 4 planilhas:

  1. Resumo
  2. Setor Alfa
  3. Setor Beta
  4. Setor Gamma

Na planilha Resumo, insira três CommandButton e renomeie-os assim:

  1. cmd_Salvar1
  2. cmd_Salvar2
  3. cmd_Salvar3

Abra o editor do VBA (Alt + F11). Selecione a planilha Resumo na janela do VBAProject e exiba seu código (F7) e digite o seguinte código:

Private Sub cmd_Salvar1_Click()
    Call CriaArquivo(Sheets("Setor Alfa"), ThisWorkbook.Path)
End Sub

Private Sub cmd_Salvar2_Click()
    Call CriaArquivo(Sheets("Setor Beta"), ThisWorkbook.Path)
End Sub

Private Sub cmd_Salvar3_Click()
    Call CriaArquivo(Sheets("Setor Gamma"), ThisWorkbook.Path)
End Sub

Agora crie um módulo e digite:

Sub CriaArquivo(mPlan As Worksheet, mPathSave As String)
Dim NovoArquivoXLS As Workbook
Dim sht As Worksheet

    'Cria um novo arquivo excel
    Set NovoArquivoXLS = Application.Workbooks.Add

    'Copia a planilha para o novo arquivo criado
    mPlan.Copy Before:=NovoArquivoXLS.Sheets(1)

    'Salva o arquivo
    NovoArquivoXLS.SaveAs mPathSave & "\" & mPlan.Name & ".xls"

    MsgBox "Novo arquivo salvo em: " & mPathSave & "\" & mPlan.Name & ".xls", vbInformation

End Sub

Pronto.

Explicando o que fizemos. Ao clicarmos no botão 1, por exemplo, criaremos um novo arquivo com os dados da planilha correspondente ao “Setor Alfa” e salva com o mesmo nome da planilha em questão e na mesma pasta da planilha original. Legal né. Agora é só usar a criatividade e adaptar as suas necessidades.

Um abração a todos. Até a próxima.

>

Alguns termos aprendidos neste artigo.

Application.Workbooks.Add Cria uma nova pasta de trabalho. A nova pasta de trabalho se torna a pasta de trabalho ativa. Retorna um objeto Workbook.
SaveAs Salvas alterações na pasta de trabalho um arquivo diferente.

expressão.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)

expressão necessária. Uma expressão que retorna um dos objetos acima.

Filename Variant opcional. Uma seqüência de caracteres que indique o nome do arquivo a ser salvo. Você pode incluir um caminho completo; se não o fizer, o Microsoft Excel salvará o arquivo na pasta atual.

FileFormat Variant opcional. O formato do arquivo que deve ser usado ao salvá-lo. Para obter uma lista de escolhas válidas, consulte a propriedade FileFormat. Para um arquivo existente, o formato padrão é o último formato de arquivo especificado; para um novo arquivo, o padrão é o formato da versão do Excel usada.

Password Variant opcional. Uma seqüência de caracteres distinguindo maiúsculas de minúsculas (de até 15 caracteres) que indique a senha de proteção a ser dada ao arquivo.

WriteResPassword Variant opcional. Uma seqüência de caracteres que indique a senha de reserva de gravação deste arquivo. Se um arquivo for salvo com a senha e esta não for fornecida quando o arquivo for aberto, o arquivo será aberto como somente leitura.

ReadOnlyRecommended Variant opcional. True para exibir uma mensagem quando o arquivo é aberto, recomendando que o arquivo seja aberto como somente leitura.

CreateBackup Variante opcional. True para criar um arquivo de backup.

AccessMode XlSaveAsAccessMode opcional.

XlSaveAsAccessMode pode ser uma das seguintes constantes:
xlExclusive (modo exclusivo)
xlNoChange padrão (não alterar o modo de acesso)
xlShared (lista compartilhada)
Se este argumento for omitido, o modo de acesso não será alterado. Esse argumento é ignorado quando você salva uma lista compartilhada sem alterar o nome do arquivo. Para alterar o modo de acesso, use o método ExclusiveAccess.

ConflictResolution XlSaveConflictResolution opcional.

XlSaveConflictResolution pode ser uma das seguintes constantes:
xlUserResolution (exibir a caixa de diálogo de solução de conflitos)
xlLocalSessionChanges (aceitar automaticamente as alterações do usuário local)
xlOtherSessionChanges (aceitar outras alterações em vez das alterações do usuário local)
Se este argumento for omitido, a caixa de diálogo de solução de conflitos será exibida.

AddToMru Variant opcional. True para adicionar esta pasta de trabalho à lista de arquivos usados recentemente. O valor padrão é False.

TextCodePage Variant opcional. Não usado no Microsoft Excel em inglês americano.

TextVisualLayout Variant opcional. Não usado no Microsoft Excel em inglês americano.

Local Variant opcional. True salva os arquivos no idioma do Microsoft Excel (incluindo as configurações do Painel de controle). False (padrão) salva os arquivos no idioma do Visual Basic for Applications (VBA), que geralmente é o inglês (E.U.A.), a menos que o projeto VBA em que Workbooks.Open está sendo executado seja um projeto VBA XL5/95 antigo e internacionalizado.

Copy Copia a planilha para outro local da pasta de trabalho.

expressão.Copy(Before, After)

expressão necessária. Uma expressão que retorna um dos objetos acima.

Before Variant opcional. A planilha antes da qual a planilha copiada será inserida. Não é possível especificar Before se After for especificado.

After Variant opcional. A planilha após a qual a planilha copiada será inserida. Não é possível especificar After se Before for especificado.