Nessa publicação vou te mostrar como alterar, modificar, selecionar e trabalhar com abas no Excel utilizando o Método Sheets no VBA.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber a planilha que usamos na aula no seu e-mail, preencha:
Hoje vamos para a nona aula da nossa Série Formulário de Vendas, onde vamos aprender a trabalhar com abas no VBA para cadastrar nossas vendas não só na aba principal, mas também em outra abas específicas da planilha.
Para selecionarmos, editarmos ou até criarmos abas no VBA vamos precisar utilizar o Método Sheets no VBA. Esse método é a forma que temos para trabalhar com as abas de uma planilha no Excel. Toda vez que precisarmos indicar ao VBA que estamos nos referindo a uma certa aba, vamos precisar utilizar o Sheets ou o WorkSheets.
No exemplo do vídeo, temos diversas lojas da nossa empresa, representadas pelas abas e queremos, ao cadastrar uma nova venda, que, além de cadastrar a venda na aba “Vendas”, ela também seja registrada na aba de dados de vendas da respectiva loja que realizou a venda.
Ao cadastrar uma venda, nós teremos a loja selecionada na “caixa_loja”, e será esse valor que iremos usar para saber em qual aba devemos registrar a venda. Iremos armazenar na variável “loja” esse texto, que será exatamente igual ao nome da aba da loja respectiva. Com essa informação, e usando o método Sheets, podemos atrelar a variável loja para dizer em que aba vamos mexer pelo VBA. Com isso, acessamos a aba escolhida pela “caixa_loja”.
A partir daí, vamos repetir o mesmo procedimento e código que foi usado para cadastrar a venda na aba Vendas. Só que agora teremos que substituir a aba de “Vendas” pela variável “loja”. E o processo será praticamente o mesmo, descobriremos a primeira linha vazia da aba da respectiva loja, e cadastraremos os valores respectivos de Data, Nota Fiscal, Vendedor, Loja, ID, Quantidade, Preço e Valor Total.
Após realizar esse cadastro, iremos zerar os valores das caixas presentes no nosso formulário, ou seja, atribuiremos “vazio” aos valores de cada caixa, para que o formulário seja limpo e que o usuário possa cadastrar uma outra venda, caso queira.
Observe o código abaixo completo:
Private Sub CommandButton1_Click() linha = Sheets("Vendas").Range("A1048576").End(xlUp).Row + 1 Sheets("Vendas").Cells(linha, 1).Value = CDate(caixa_data.Value) Sheets("Vendas").Cells(linha, 2).Value = caixa_nf.Value Sheets("Vendas").Cells(linha, 3).Value = caixa_vendedor.Value Sheets("Vendas").Cells(linha, 4).Value = caixa_loja.Value Sheets("Vendas").Cells(linha, 5).Value = caixa_id.Value Sheets("Vendas").Cells(linha, 6).Value = caixa_quantidade.Value Sheets("Vendas").Cells(linha, 7).Value = caixa_preco.Value Sheets("Vendas").Cells(linha, 8).Value = caixa_quantidade.Value * caixa_preco.Value loja = caixa_loja.Value linha = Sheets(loja).Range("A1048576").End(xlUp).Row + 1 Sheets(loja).Cells(linha, 1).Value = CDate(caixa_data.Value) Sheets(loja).Cells(linha, 2).Value = caixa_nf.Value Sheets(loja).Cells(linha, 3).Value = caixa_vendedor.Value Sheets(loja).Cells(linha, 4).Value = caixa_loja.Value Sheets(loja).Cells(linha, 5).Value = caixa_id.Value Sheets(loja).Cells(linha, 6).Value = caixa_quantidade.Value Sheets(loja).Cells(linha, 7).Value = caixa_preco.Value Sheets(loja).Cells(linha, 8).Value = caixa_quantidade.Value * caixa_preco.Value caixa_data.Value = "" caixa_nf.Value = "" caixa_vendedor.Value = "" caixa_loja.Value = "" caixa_id.Value = "" caixa_quantidade.Value = "" caixa_preco.Value = "" ActiveWorkbook.Worksheets("Vendas").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Vendas").Sort.SortFields.Add2 Key:=Range("A1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Vendas").Sort .SetRange Range("A:H") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveWorkbook.Worksheets(loja).Sort.SortFields.Clear ActiveWorkbook.Worksheets(loja).Sort.SortFields.Add2 Key:=Range("A1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(loja).Sort .SetRange Range("A:H") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Além de fazer esse registro na aba de Vendas e na aba da Loja que fez a venda e descarregar as informações do formulário, nós queremos classificar os dados de registro de acordo com a data. Nós iremos gravar uma macro específica que irá nos auxiliar (no vídeo mostramos como fazer essa gravação e acessar essa macro).
Ela escreverá o código de selecionar os dados das colunas de dados da nossa aba de Vendas, e da nossa aba da Loja, e classifique do mais antigo para o mais novo. Adicionaremos esse código ao final do nosso registro, para que essa classificação seja feita após o registro da venda.
Iremos classificar os dados do mais antigo para o mais novo (em relação à data de registro) das colunas A até a coluna H da aba de Vendas e da aba da loja de interesse, e pronto, terminamos nossa macro.
OBS: Adicionamos a função CDate ao valor que é registrado nas abas a partir da “caixa_data”, porque inicialmente ele seria um texto, e ao tentar classificar, iria ser ruim porque a nossa classificação não iria sair da forma ideal. Para solucionar essa questão, conseguimos converter o texto que vem da caixa_data para uma data com a função CDate, e fazemos com que todas as informações da coluna A das abas sejam datas, e a classificação funcione corretamente. Então repare que essa função foi adicionada ao nosso código e pontuada no vídeo.
Vimos que, quando estivermos trabalhando com abas e utilizando o Sheets VBA, precisamos fazer o mesmo passo a passo que fizemos no registro de informações para a aba principal (de Vendas). Ficaremos por aqui, pessoal. Até o próximo conteúdo de VBA! Siga nossas redes sociais e nosso canal do Youtube!
Para acessar outras publicações de VBA, clique aqui!
Quer aprender mais sobre VBA com um Minicurso Gratuito?
Expert em VBA e Power BI da Hashtag Treinamentos. Auxilia no suporte aos alunos da Hashtag Treinamentos e na criação de conteúdos para os que acompanham nossos canais.