O InputBox no VBA é crucial para ajudar a automatizar cadastros e preenchimentos. Dessa forma, o programador perde menos tempo e deixa a planilha mais fácil de usar para pessoas não técnicas, sem tantos erros e problemas.
Com apenas um botão, o usuário consegue adicionar uma informação em uma lista de itens, segundo o domínio da planilha em questão.
Lembrando que você pode assistir esse conteúdo no formato de vídeo clicando no vídeo abaixo, ou pode acessar o nosso Canal do YouTube para mais vídeos!
O VBA InputBox é uma ferramenta que permite que o usuário insira uma informação e esta informação seja automaticamente registrada na planilha.
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.
Em nosso exemplo, vamos considerar o caso citado, no qual queremos um InputBox para fazer o cadastro de funcionários em uma planilha.
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”.
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…
Então, damos um nome a nossa macro, que neste exemplo é copiaformatação, e clicamos em ok:
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:
Podemos agora abrir o VBA novamente e, selecionando Módulo2 no canto esquerdo, visualizamos nossa macro criada:
O código exibido será o seguinte, gerado automaticamente através da gravação da Macro:
Sub copiaformatação()
‘ copia formataçã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.
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
Assim, os funcionários serão cadastrados com o clique no botão, com a formatação correta e em ordem alfabética!
Usar o InputBox no VBA é uma ótima forma de interagir com o usuário sem complicar o nosso código!
O VBA Inputbox requer um código específico na parte de macros do Excel. A partir dessa gestão, é possível conectar com a parte das planilhas e criar lógicas que facilitem para qualquer pessoa.
O InputBox em si é uma caixinha em que o usuário vai digitar alguma informação quando clicar em um botão, por exemplo. Pode ser um nome para um conjunto de nomes ou outros exemplos (que exploraremos mais adiante).
Contudo, para gerar essa caixinha, você precisa de um método específico com esse nome InputBox.
Isso é uma vantagem, por exemplo, porque permite que se configure novas entradas de forma automática, sem que o usuário tenha que colar e configurar tudo a cada adição.
Se a ideia é adicionar um nome para que ele fique em uma posição correta de acordo com a ordem alfabética, o VBA InputBox permite fazer isso com automação. Se fosse na mão, o usuário teria que sair ordenando e mudando células, perdendo bastante tempo.
A formatação, para citar um bom exemplo, é copiada automaticamente, sem que o usuário nem tenha consciência na hora de usar o VBA InputBox.
Para o usuário, tudo funciona automaticamente, com mecanismos inteligentes e a lógica trabalhando nos bastidores.
No ambiente no VBA, você deve criar um código que pegue o que for digitado dentro da InputBox para colocar em variável. Então, é preciso determinar que essa variável deverá preencher a linha.
Uma variável serve justamente para isto: guardar um valor temporariamente e permitir que ele seja usado posteriormente para alguma outra parte da lógica.
É importante também buscar no VBA uma forma de selecionar todas as linhas, a partir de uma inicial.
Uma consideração importante é sempre pegar a próxima linha, automaticamente. Ou seja, pensando em usar o InputBox para adicionar em uma lista de valores, queremos sempre adicionar na última linha e garantir automaticamente a formatação, certo?
Para isso, é preciso sempre pegar a linha que sucede a última linha para então adicionar um novo elemento. Ou seja, a partir da manipulação da variável, o macro vai colocar o valor da VBA InputBox nessa nova linha.
Um bom exemplo de VBA InputBox, que inclusive vamos ver com detalhes na parte prática do conteúdo, é o cadastro de novos colaboradores.
Nesse caso, você pode ter um botão com a função de cadastrar; então sempre que o usuário clicar, abre a caixa de entrada e digita um novo nome.
Assim, o nome já entra na lista de funcionários com a formatação e a ordenação que já vigora na lista.
Também podemos ter cadastro de novos produtos, em um sistema similar a um controle de vendas. Nesse caso, abre-se a InputBox para entrar o nome do produto e ele é adicionado de acordo com a lógica já existente.
Também podemos ter cadastro de fornecedores em uma planilha para controle logístico. É possível ainda pegar mais informações em uma InputBox mais avançada (como o nome do fornecedor e o tipo de produto).
É preciso atentar para algumas questões.
Um dos erros é não configurar o código da macro corretamente. Por exemplo, é preciso atribuir a macro correta ao botão que se quer usar.
Uma das funções necessárias é a gravação de macro. Isso faz com que seja possível pegar uma formatação do Excel e conseguir o código correspondente.
Então, o programador apenas adiciona no seu código a configuração que o Excel fornece.
Um problema, no entanto, é adicionar o script sem checar primeiro como as informações estão distribuídas. Isso pode gerar erros na lógica básica do sistema.
Como vimos, o VBA InputBox é uma ótima estratégia para automatizar o controle de inserções em uma planilha. Assim, o usuário não precisa se preocupar com formatações extra e pode simplesmente usar um botão intuitivo para entrar informações.
Para acessar outras publicações de VBA, clique aqui!
Sócio fundador e especialista em Python da Hashtag Treinamentos. Criador do Método Impressionador para ensinar pessoas comuns a crescerem na carreira e se destacarem na empresa usando o Python.