Blog

Postado em em 25 de julho de 2020

InputBox no VBA para Cadastro de Funcionários

Usando o InputBox no VBA

Você sabe como utilizar o InputBox no VBA? Nessa publicação, vamos falar um pouco mais sobre essa ferramenta que nos possibilita interagir com o usuário!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Clique aqui para baixar a planilha utilizada nessa publicação!

 

O que é um InputBox no VBA?

O InputBox é uma ferramenta que permite que o usuário insira uma informação e esta informação seja automaticamente registrada na planilha.

Quando utilizar um InputBox?

Podemos utilizar o inputbox para facilitar o registro de dados em uma planilha, tornando-o mais eficiente e menos suscetível a erros. O inputbox permite, por exemplo, o cadastro de funcionários em uma planilha, já organizando-os em ordem alfabética.

Como utilizar o Inputbox no VBA?

Em nosso exemplo, vamos considerar o caso citado, no qual queremos um inputbox para fazer o cadastro de funcionários em uma planilha.

Planilha Base - InputBox no VBA

Planilha Base

 

Para fazer este cadastro, vamos utilizar o VBA para automatizar este processo que consiste em: ir até a última linha da planilha, acrescentar o novo funcionário, copiar a formatação para esta nova linha e, por fim, colocar a base de dados em ordem alfabética.

Para criarmos nosso código, abrimos o ambiente do VBA selecionando alt+F11 ou, caso não funcione, alt+fn+F11.

Vamos então criar nosso código, que neste exemplo chamamos de “cadastrar_funcionario”, digitando sub cadastrar_funcionario ()

Então, acrescentamos a seguinte linha ao código:

nome = InputBox(“Digite o nome do funcionário”)

Esta linha cria uma variável “nome”, que será o nome do funcionário a ser acrescentado. O texto “Digite o nome do funcionário” será exibido na tela por uma inputbox para que o usuário insira os dados.

A próxima linha do nosso código será a seguinte:

linha = Range(“A1”).End(xlDown).Row + 1

Com isso, criamos a variável linha, que seleciona a primeira linha da coluna A (Range(“A1”)), e faz o equivalente ao pressionar ctrl+seta para baixo no Excel. O comando End neste código é o equivalente ao ctrl e xlDown é a seta para baixo do teclado. Acrescentamos o .Row para que seja retomada a linha referente à célula que estamos. Assim, acessamos a linha da última célula preenchida da planilha. Para acrescentarmos a informação de nome inserida pelo usuário, vamos somar 1 a essa linha para termos a primeira linha vazia da planilha (+ 1).

Agora, vamos acrescentar o seguinte ao nosso código:

Cells(linha, 1) = nome

Este comando faz com que a célula da linha que calculamos na variável linha, coluna A, seja preenchida com o texto contido na variável “nome” que criamos. Ou seja, este comando faz o input dos dados efetivamente na planilha.

Fechamos então nosso código acrescentando uma linha com o end sub:

End Sub

Podemos, agora, atribuir nosso código ao botão criado na planilha base, voltando ao Excel, clicando com o botão direito e selecionando “Atribuir Macro”.

Atribuir Macro ao Botão Excel

Atribuir Macro ao Botão Excel

Então, selecionamos a macro criada e clicamos em ok.

Com isso, ao clicarmos no botão o inputbox será acionado. Ao preenchermos o inputbox, o texto é automaticamente inserido na próxima linha vazia da planilha.

Precisamos agora ajustar nosso código para que a formatação seja copiada e os nomes sejam colocados em ordem alfabética após inseridos.

Para o ajuste da formatação, vamos gravar uma macro que copie a célula anterior e cole a formatação na célula atual. A gravação de macros consiste em gravarmos uma sequência de passos, onde o VBA consegue fazer esta leitura e trazê-los em código, podendo assim ser repetidos sempre que a macro for executada.

Para gravarmos esta macro, selecionamos Exibição > Macros > Gravar Macro…

Gravar Macro

Gravar Macro

 

Então, damos um nome a nossa macro, que neste exemplo é copiaformatação, e clicamos em ok:

Macro copiaformatação

Macro copiaformatação

 

Agora o VBA está gravando todos os comandos que forem feitos, que serão transformados em códigos e atribuídos a macro  copiaformatação.

Então, clicamos no último funcionário cadastrado, copiamos (ctrl C) e colamos apenas a formatação para o funcionário novo. Para colar a formatação selecionamos Página Inicial > Colar > Outras Opções para Colar > Formatação (f).

Então, apertamos Esc e podemos parar a gravação da macro selecionando o botão a seguir:

Parar gravação da Macro

Parar gravação da Macro

 

Podemos agora abrir o VBA novamente e, selecionando Módulo2 no canto esquerdo, visualizamos nossa macro criada:

Módulo2

Módulo2

 

O código exibido será o seguinte, gerado automaticamente através da gravação da Macro:

Sub copiaformatação()

‘ copiaformatação Macro


Range(“A14”).Select
Selection.Copy
Range(“A15”).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range(“B9”).Select
Application.CutCopyMode = False
End Sub

 

Vamos então copiar este código gerado, a partir de Range, para a macro cadastrar_funcionário, que fizemos no Módulo1.

Vamos ajustar este código para que fique mais automático. Em Range(“A14”) e Range(“A15”), substituímos as células A14 e A15 pela variável linha-1 e linha, utilizando o comando Cells. Otimizamos o código também removendo alguns dos Select, ficando o código conforme segue:

Sub cadastrar_funcionario()

nome = InputBox(“Digite o nome do funcionário”)

linha = Range(“A1000000”).End(xlUp).Row + 1

Cells(linha, 1) = nome

Cells(linha – 1, 1).Copy
Cells(linha, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range(“B9”).Select
Application.CutCopyMode = False

End Sub

 

Por último, vamos colocar a coluna A em ordem alfabética. Para isso, vamos gravar mais uma macro, do mesmo modo que fizemos anteriormente (Exibição > Macros > Gravar Macro…). Durante a gravação vamos selecionar a coluna A colocá-la em ordem alfabética (na guia Dados, conforme imagem a seguir). Após isso, paramos a gravação.

Classificar de A a Z

Classificar de A a Z

 

Assim, o código que aparecerá no VBA, no Módulo2, será o seguinte:

Sub ordem_alfabetica()

‘ ordem_alfabetica Macro


Columns(“A:A”).Select
ActiveWorkbook.Worksheets(“Resultado Final”).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(“Resultado Final”).Sort.SortFields.Add Key:=Range( _
“A1”), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets(“Resultado Final”).Sort
.SetRange Range(“A2:A15”)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Copiamos então este código para o nosso cadastrar_funcionário do Módulo1, como fizemos anteriormente. Após copiado, ajustamos o Range que vai de A2 até A15 para A2 até A100000, para que as próximas linhas adicionadas estejam neste range.

Nosso código finalizado então ficará como segue:

Sub cadastrar_funcionario()

nome = InputBox(“Digite o nome do funcionário”)

linha = Range(“A1000000”).End(xlUp).Row + 1

Cells(linha, 1) = nome

Cells(linha – 1, 1).Copy
Cells(linha, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range(“B9”).Select
Application.CutCopyMode = False

Columns(“A:A”).Select
ActiveWorkbook.Worksheets(“Resultado Final”).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(“Resultado Final”).Sort.SortFields.Add Key:=Range( _
“A1”), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets(“Resultado Final”).Sort
.SetRange Range(“A2:A100000”)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

End Sub

 

Código Finalizado - InputBox no VBA

Código Finalizado

Assim, os funcionários serão cadastrados com o clique no botão, com a formatação correta e em ordem alfabética!

 

Hashtag Treinamentos

Está precisando de um curso de Excel, VBA ou Power BI no Rio de Janeiro ou em Niterói? Clique aqui para saber mais!


Quer aprender mais sobre VBA com um Minicurso Gratuito?