Blog

Postado em em 7 de agosto de 2020

Editar Bases de Dados com Formulários

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!

Por que editar bases de dados com formulário no Excel?

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.

Como criar UserForm para editar bases de dados com formulário?

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).

Criar Formulario em Planilha - Editar bases de dados
Criar Formulario em Planilha

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).

Editando Bases de Dados com Formulario no Excel Imagem2 e1596486493820
UserForm VBA – Initialize (Figura 1)

Ao selecionar os que queremos, ficará assim:

Editando Bases de Dados com Formulario no Excel Imagem3
UserForm VBA – Initialize (Figura 2)

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:

Editando Bases de Dados com Formulario no Excel Imagem4
Formulario Excel Macro

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).

Editando Bases de Dados com Formulario no Excel Imagem5
Lista de Tipos

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.

Editando Bases de Dados com Formulario no Excel Imagem6
Formulario Excel Com Lista Suspensa

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.

Editando Bases de Dados com Formulario no Excel Imagem2 e1596486493820
UserForm VBA – Initialize (Figura 1)

O código que rodará ao clicar no botão “OK” do formulário será o seguinte (Blocos 1, 2 e 3):

Formulario Excel VBA - Editar bases de dados
Formulario Excel VBA

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
Leitura Bloco 1:

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
Leitura Bloco 2:

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
Leitura Bloco 3:

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
Leitura Bloco 4:

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ê!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um minicurso básico gratuito?

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!