Na aula de hoje vou te mostrar como você pode utilizar um formulário no VBA para editar bases de dados de forma rápida e simples com apenas alguns passos.
Nessa publicação vou te mostrar como utilizar o Editor de Consultas do Power BI para te ajudar com isso!
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!
Porque muitas vezes acontece de alguém cadastrar alguma informação de forma equivocada, ou algum dado precisa ser atualizado numa base de dados. O formulário torna a interface amigável para o usuário, facilita a busca, no caso de uma base de dados grande, além de ser confiável.
Para conseguir editar as bases de dados, deveremos criar um código que seja associado a um formulário específico no ambiente do VBA. No nosso exemplo, temos uma empresa com cadastro de funcionários feito numa base no ambiente do Excel, com nome, sexo, área, CPF e salário (em 1).
Lembrando que no nosso minicurso gratuito ensinamos como criar formulário no Excel e nesse post iremos apenas apresentar o código por trás dele para fazer as edições nessa base. Para criá-lo, precisamos entrar no ambiente do VBA (Alt + F11 ou Alt + Fn + F11), onde temos o UserForm pronto.
O formulário do nosso exemplo é o userform_edicao. Iremos então, no ambiente do VBA, clicar com o botão direito do mouse nele (em 2 na imagem acima) e em seguida em Exibir código (em 3 na imagem acima), para ver o código por trás dele.
Em primeiro lugar, queremos que o UserForm, ao ser aberto, carregue as informações da tabela de dados. Então, devemos passar comandos para esse UserForm fazer esse carregamento ao ser aberto.
Para isso, devemos selecionar no VBA que objeto queremos modificar e que ação faremos nele para disparar o código. No caso, queremos que, quando o userform_edicao (nosso UserForm) inicie (Initialize), carregue as informações. Vamos selecioná-los em 1 (UserForm) e em 2 (Initialize).
Ao selecionar os que queremos, ficará assim:
Automaticamente o VBA começará a escrever uma “Private Sub UserForm_Initialize()” (em branco inicialmente). Nosso código ficará da seguinte maneira para ele carregar as informações:
Onde:
Private Sub UserForm_Initialize() é a instrução que inicia nosso código de “início” do UserForm.
linha = Sheets(“Cadastro”).Range(“A1”).End(xlDown).Row é a instrução que vai nos retornar, na aba “Cadastro”, a partir da célula A1, a última linha preenchida da tabela de informações, e será gravada numa variável. Ela vai ser a nossa linha limite, que será atualizada cada vez que abrirmos o UserForm, garantindo que qualquer nova linha inserida será carregada pelo código.
caixa_nome.RowSource = “Cadastro!A2:A” & linha é a instrução que vai passar para a caixa_nome (lista suspensa de Nomes dos funcionários) que sua fonte de dados vai da célula A2 até a célula na coluna A correspondente à última linha preenchida achada com a instrução anterior (variável linha).
caixa_cpf.RowSource = “Cadastro!D2:D” & linha é a instrução que vai passar para a caixa_cpf (lista suspensa de CPFs dos funcionários) que sua fonte de dados vai da célula D2 (coluna D e linha 2) até a célula na coluna D correspondente à última linha preenchida achada com a segunda instrução (variável linha). Lembrando que só existirá CPF se existir um nome cadastrado no sistema para um funcionário, então podemos usar a mesma variável “linha” no último comando e nesse.
linha = Sheets(“Fonte”).Range(“C2”).End(xlDown).Row é a instrução que vai nos dizer, na aba “Fonte”, quantos tipos teremos de opções para serem alterados no formulário de edição. Ela vai nos retornar a última linha preenchida dessa lista de tipos criada na tabela “Fonte”, e será armazenada na variável linha.
Observe que essa lista de tipos na aba “Fonte” (imagem abaixo) vai coincidir com as colunas da nossa tabela de dados cadastrados (Área, CPF, Nome, Salário, Sexo).
caixa_tipo.RowSource = “Fonte!C3:C” & linha é instrução que vai passar para a caixa_tipo (lista de tipos de dados na aba “Fonte”) que sua fonte de dados vai da célula C3 (coluna C e linha 3) até a célula na coluna C correspondente à última linha preenchida (linha 7, no exemplo) da lista de tipos, achada com a última instrução.
End Sub é a instrução que representa o fim dessa subrotina de comandos
Até agora carregamos as informações da tabela de cadastro e garantimos que ela será atualizada toda vez que for aberto o formulario na planilha. Vamos para o código de edição de base de dados.
Para editar informações, devemos disparar o código que veremos a seguir através do clique no botão OK (em verde, acima). Para escrever esse código, devemos selecionar nas listas suspensas o objeto (botao_ok) e a ação de clique (Click), como observado na imagem abaixo.
O código que rodará ao clicar no botão “OK” do formulário será o seguinte (Blocos 1, 2 e 3):
Ao longo do código temos várias estruturas condicionais (If). Ou seja, teremos condições a serem atendidas para rodar o código ao fazer uma edição, para garantir que temos as informações suficientes para identificar um funcionário e editar seus dados.
Vamos para a explicação do Bloco 1 do código:
Private Sub botao_ok_Click()
If caixa_nome.Value <> "" Then
nome = caixa_nome.Value
linha = Sheets("Cadastro").Cells.Find(nome).Row
ElseIf caixa_cpf.Value <> "" Then
cpf = caixa_cpf.Value
linha = Sheets("Cadastro").Cells.Find(cpf).Row
Else
MsgBox ("Preencher o Nome ou o CPF!")
Exit Sub
End If
Se a caixa de nome (caixa_nome) não estiver vazia (for diferente de vazio), então, o que tiver escrito na caixa de nome será registrado na variável “nome”, e procuraremos a célula em que estiver escrito o que estará na variável “nome”. Ao encontrar, guardaremos a linha da célula achada na variável “linha”, que corresponde àquele nome na base de dados.
Se a caixa de CPF (caixa_cpf) não estiver vazia (for diferente de vazio), então, o que tiver escrito na caixa de CPF será registrado na variável “cpf”, e procuraremos a célula em que estiver escrito esse CPF escrito na caixa de CPF. Ao encontrar, guardaremos a linha da célula achada na variável “linha” que corresponde àquele CPF na base de dados.
Se nome nem CPF estiverem preenchidos (ambos forem iguais a vazio), teremos uma mensagem alertando para “Preencher o Nome ou o CPF!” na tela e o código será abortado. Ou seja, o comando Exit Sub irá dizer para o código parar nesse ponto (não irá ler o que estiver escrito abaixo), mas dará a opção para o usuário preencher novas informações no formulário sem fechá-lo.
Se tudo ocorrer da forma ideal teremos a linha onde deveremos fazer a edição. Vamos para o Bloco 2.
If caixa_tipo.Value = "Nome" Then
coluna = 1
ElseIf caixa_tipo.Value = "Sexo" Then
coluna = 2
ElseIf caixa_tipo.Value = "Área" Then
coluna = 3
ElseIf caixa_tipo.Value = "CPF" Then
coluna = 4
ElseIf caixa_tipo.Value = "Salário" Then
coluna = 5
Else
MsgBox ("Preencher o Tipo!")
Exit Sub
End If
O valor da caixa_tipo é o tipo de dado que o usuário do formulário seleciona e quer editar. Ele que comandará em que coluna faremos a alteração na tabela de cadastro de funcionários.
Se na caixa_tipo estiver selecionado “Nome”, guardaremos a coluna 1 na variável coluna. Se estiver selecionado “Sexo”, a variável receberá o valor 2. Se “Área” estiver selecionada, receberá o valor 3. Se “CPF” estiver selecionado, receberá o valor 4. E, se “Salário” estiver selecionado, o valor 5.
Se essa caixa estiver vazia, ou seja, o usuário não selecionar nada nela (lista), será exibida uma mensagem para “Preencher o Tipo!” na tela, e o código será abortado. Por consequência, ele não continuará, mas as informações ficam carregadas no formulário e podem ser aproveitadas.
Assim, se tudo ocorrer bem, saberemos em que coluna fazer a edição, de acordo com o número que a variável coluna receberá.
Tudo correndo bem, até aqui teremos linha e coluna para fazer a modificação desejada. A linha pela pesquisa de nome ou CPF, e a coluna pelo tipo a ser alterado. Vamos agora para o Bloco 3.
If caixa_valor.Value <> "" Then
Sheets("Cadastro").Cells(linha, coluna).Value = caixa_valor.Value
Else
MsgBox ("Preencher o novo valor!")
Exit Sub
End If
Unload userform_edicao
End Sub
Se a caixa_valor estiver preenchida com algo (for diferente de vazio), a célula com endereço dado a partir das variáveis (linha e coluna) encontradas nos blocos 1 e 2 receberá o que for digitado nessa caixa_valor. Em seguida irá descarregar o formulário (apagar as informações selecionadas e escritas nele), porque já fez a edição da forma correta.
Caso não tenha nada escrito (caixa_valor estiver vazia), o programa exibirá uma mensagem de “Preencher o novo valor!”, e abortará o código. Ainda dá a opção do usuário digitar algo nesse campo com as informações o formulário ainda carregadas.
Se tudo for preenchido corretamente e ocorrer bem, com linha e coluna conhecidas, teremos uma célula específica para fazer a edição, e poderemos inserir o que for digitado na caixa_valor nessa célula alvo e o formulário será descarregado. Finalmente vamos para o Bloco 4.
Private Sub botao_x_Click()
Unload userform_edicao
End Sub
O bloco 4 diz respeito ao clique no X do formulário. No código temos o Unload do userform_edicao. Isso significa simplesmente o comando para o VBA descarregar o formulário e as informações nele contidas. Ou seja, irá fechá-lo e apagará as informações selecionadas ou escritas no formulário. Caso queira fazer uma outra edição, será necessário, então, abrir e digitar tudo outra vez.
Assim, conseguimos fazer um código para editar bases de dados de cadastro de funcionários de uma empresa. Ele funciona com condições que devem ser respeitadas para fazer a atualização, garantindo uma maior confiabilidade.
Você pode ter exatamente essa necessidade ou alguma aplicação parecida que seja composta por um cadastro que possa ter informações a serem editadas/atualizadas. Esperamos que seja bastante útil para você!
Para acessar outras publicações de VBA, clique aqui!
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.