/ / Excel User Forma Interativa VBA

Formulário de usuário interativo do Excel VBA

Abaixo, vamos olhar para um programa em Excel VBA que cria um forma de usuário interativa. A forma de usuário que vamos criar é a seguinte:

Formulário de usuário interativo do Excel VBA

Explicação: sempre que você insere um valor na caixa de texto ID, o Excel VBA carrega o registro correspondente. Quando você clica no botão Editar / Adicionar, o Excel VBA edita o registro na planilha ou adiciona o registro quando o ID ainda não existe. O botão Limpar limpa todas as caixas de texto. O botão Fechar fecha o formulário do usuário.

Para criar este formulário de usuário, execute as etapas a seguir.

1. Abra o Editor do Visual Basic. Se o Explorador de Projetos não estiver visível, clique em Visualizar, Explorador de Projetos.

2. Clique em Inserir, Userform. Se a caixa de ferramentas não aparecer automaticamente, clique em Exibir, Caixa de ferramentas. Sua tela deve ser configurada como abaixo.

Configuração da Tela Userform no Excel VBA

3 Adicione os rótulos, caixas de texto (primeiro no topo, o segundo abaixo do primeiro e assim por diante) e botões de comando. Depois que isso for concluído, o resultado deve ser consistente com a imagem da forma de usuário mostrada anteriormente. Por exemplo, crie um controle de caixa de texto clicando em TextBox na caixa de ferramentas. Em seguida, você pode arrastar uma caixa de texto no Userform.

4 Você pode alterar os nomes e as legendas dos controles. Os nomes são usados ​​no código do Excel VBA. Legendas são aquelas que aparecem na tela. É uma boa prática alterar os nomes dos controles, mas isso não é necessário aqui porque temos apenas alguns controles neste exemplo. Para alterar a legenda dos rótulos, caixas de texto e botões de comando, clique em Exibir, janela Propriedades e clique em cada controle.

5. Para mostrar a forma de usuário, coloque um botão de comando em sua planilha e adicione a seguinte linha de código:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Agora vamos criar o Sub UserForm_Initialize. Quando você usa o método Show para o Userform, este sub será automaticamente executado.

6. Abra o Editor do Visual Basic.

7. No Project Explorer, clique com o botão direito do mouse em UserForm1 e clique em View Code.

8. Escolha Userform na lista suspensa à esquerda. Escolha Inicializar na lista suspensa à direita.

9. Adicione a seguinte linha de código:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Explicação: esta linha de código define o foco na primeira caixa de texto, pois é aqui que queremos começar quando o Userform é carregado.

Agora criamos a primeira parte do formulário de usuário. Embora pareça arrumado, nada acontecerá ainda quando inserirmos um valor na caixa de texto ID ou quando clicarmos em um dos botões de comando.

10. No Project Explorer, clique com o botão direito do mouse em UserForm1 e clique em View Code.

11. Escolha TextBox1 na lista suspensa à esquerda. Escolha Alterar na lista suspensa à direita.

12. Adicione a seguinte linha de código:

Private Sub TextBox1_Change()

GetData

End Sub

13. No Project Explorer, clique duas vezes em UserForm1.

14. Clique duas vezes no botão de comando Editar / Adicionar.

15. Adicione a seguinte linha de código:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Clique duas vezes no botão de comando Limpar.

17. Adicione a seguinte linha de código:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Explicação: esses subs chamam outros subs que vamos criar em um segundo.

18. Clique duas vezes no botão de comando Fechar.

19. Adicione a seguinte linha de código:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Explicação: esta linha de código fecha o Userform.

Hora de criar os subs. Você pode passar pelo nosso capítulo Função e Sub para saber mais sobre subs. Se você estiver com pressa, basta colocar os seguintes subs em um módulo (no Editor do Visual Basic, clique em Inserir, módulo).

20 Primeiro, declare três variáveis ​​do tipo Integer e uma variável do tipo Boolean. Declare as variáveis ​​na seção General Declarations (na parte superior do módulo). Desta forma, você só precisa declarar as variáveis ​​uma vez e pode usá-las em vários subs.

Dim id As Integer, i As Integer, j As Integer, flag As Boolean

21. Adicione o sub-item GetData.

Sub GetData()

If IsNumeric(UserForm1.TextBox1.Value) Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value

    Do While Cells(i + 1, 1).Value <> ""

        If Cells(i + 1, 1).Value = id Then
            flag = True
            For j = 2 To 3
                UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value
            Next j
        End If

        i = i + 1

    Loop

    If flag = False Then
        For j = 2 To 3
            UserForm1.Controls("TextBox" & j).Value = ""
        Next j
    End If

Else
    ClearForm
End If

End Sub

Explicação: Se a caixa de texto ID contiver um valor numérico, o Excel VBA pesquisará o ID e carregará o registro correspondente. Usamos a coleção Controls para percorrer facilmente as caixas de texto. Se o Excel VBA não puder encontrar o ID (o sinalizador ainda é False), ele esvazia a segunda e a terceira caixa de texto. Se a caixa de texto ID não contiver um valor numérico, o Excel VBA chamará o submarino ClearForm.

22. Adicione o submarino ClearForm.

Sub ClearForm()

For j = 1 To 3
    UserForm1.Controls("TextBox" & j).Value = ""
Next j

End Sub

Explicação: O Excel VBA limpa todas as caixas de texto.

23. Adicione o subitens EditAdd.

Sub EditAdd()

Dim emptyRow As Long

If UserForm1.TextBox1.Value <> "" Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value
    emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1

    Do While Cells(i + 1, 1).Value <> ""

        If Cells(i + 1, 1).Value = id Then
            flag = True
            For j = 2 To 3
                Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value
            Next j
        End If

        i = i + 1

    Loop

    If flag = False Then
        For j = 1 To 3
            Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value
        Next j
    End If

End If

End Sub

Explicação: Se a caixa de texto ID não estiver vazia, o Excel VBA edita o registro na folha (o oposto de carregar um registro como vimos anteriormente). Se o Excel VBA não puder encontrar o ID (o sinalizador ainda é False), ele adicionará o registro à próxima linha vazia. A variável emptyRow é a primeira linha vazia e aumenta toda vez que um registro é adicionado.

24. Saia do Editor do Visual Basic, insira as etiquetas mostradas abaixo na linha 1 e teste o Userform.

Formulário de usuário interativo do Excel VBA

Leia também: