o Formulário de reserva de curso é um formulário simples que ilustra os princípios de design do formulário de usuário e a codificação VBA associada.
Ele usa uma seleção de controles, incluindo caixas de texto, caixas de combinação, botões de opção agrupados em um quadro, caixas de seleção e botões de comando.
Quando o usuário clica no botão OK, sua entrada é inserida na próxima linha disponível na planilha.
Descrição do formulário excel:
Existem duas caixas de texto simples (Nome: e Telefone:) em que o usuário pode digitar texto livre e duas caixas de combinação (Departamento e Curso) que permite ao usuário escolher um item da lista.
Existem três botões de opção (Introdução, Intermediário e Avançado) agrupados em um quadro (Nível) para que o usuário possa escolher apenas uma das opções.
Existem duas caixas de seleção (Almoço Obrigatório e Vegetariano) que, por não estarem agrupados em uma moldura, podem ser escolhidos, se necessário. Porém, se a pessoa que faz a reserva não deseja almoçar, não precisamos saber se ela é vegetariana ou não. Então o Vegetariano a caixa de seleção fica acinzentada até que seja necessária.
Existem três botões de comando (OK, Cancelar e Forma limpa), cada um dos quais executa uma função predefinida quando clicado.
As configurações de propriedades de controle:
Ao controle | Modelo | Propriedade | Configuração |
UserForm | UserForm | Nome | frmCourseBooking |
Rubrica | Formulário de reserva de curso | ||
Nome | Caixa de texto | Nome | txtName |
Telefone | Caixa de texto | Nome | txtPhone |
Departamento | Caixa combo | Nome | cboDepartment |
Curso | Caixa combo | Nome | cboCourse |
Nível | Quadro | Nome | fraLevel |
Rubrica | Nível | ||
Introdução | Botão de opção | Nome | optIntroduction |
Intermediário | Botão de opção | Nome | optIntermediate |
Avançado | Botão de opção | Nome | optAdvanced |
Almoço Obrigatório | Caixa de Seleção | Nome | chkLunch |
Vegetariano | Caixa de Seleção | Nome | chkVegetarian |
Habilitado | Falso | ||
OK | Botão de comando | Nome | cmdOk |
Rubrica | OK | ||
Predefinição | Verdade | ||
Cancelar | Botão de comando | Nome | cmdCancel |
Rubrica | Cancelar | ||
Cancelar | Verdade | ||
Forma limpa | Botão de comando | Nome | cmdClearForm |
Criação de formulários no Excel
Se você deseja construir o formulário sozinho, simplesmente copie o layout mostrado na ilustração acima. Siga os passos abaixo:
1. Abra a pasta de trabalho à qual deseja que o formulário pertença (UserForms, como macros, devem ser anexados a uma pasta de trabalho) e alterne para o Editor do Visual Basic.
2. No Editor do Visual Basic, clique no Inserir formulário de usuário botão (ou vá para Inserir> UserForm).
3. Se a caixa de ferramentas não aparecer sozinha (primeiro clique no formulário para ter certeza de que não está escondida), clique no botão Caixa de ferramentas botão (ou vá para Exibir> Caixa de ferramentas).
4. Para colocar um controle no formulário, clique no botão apropriado na caixa de ferramentas e, em seguida, clique no formulário. Os controles podem ser movidos arrastando-os pelas bordas ou redimensionados arrastando os botões em torno de seu perímetro.
5. Para editar as propriedades de um controle, certifique-se de que o controle escolhido esteja selecionado e faça as alterações apropriadas no Propriedades janela. Se você não consegue ver a janela de propriedades, vá para Exibir> Janela de propriedades.
6. Para remover um controle do formulário, selecione-o e clique no botão Excluir tecla no seu teclado.
Um formulário de usuário não fará nada até que o código que conduz o formulário e seus vários controles seja criado. A próxima etapa é escrever o código que conduz o próprio formulário.
Adicionando o código: 1 Inicializando o formulário
Inicializando o formulário:
A maioria dos formulários precisa de algum tipo de configuração quando são abertos. Isso pode ser definir valores padrão, certificar-se de que os campos estão vazios ou criar listas de caixas de combinação. Este processo é chamado Inicializando o Formulário e é cuidado por uma macro chamada UserForm_Initialize (caso você esteja confuso com a minha grafia variada da palavra "initialis (z) e", é porque eu falo inglês e o VBA fala americano - mas não se preocupe, o VBA vai soletre para você!). Veja como construir o código para inicializar o Formulário de Reserva de Curso:
1. Para visualizar a janela de código do formulário, vá para Ver> Código ou clique F7.
2. Quando a janela de código é aberta pela primeira vez, ela contém um vazio UserForm_Click () procedimento. Use as listas suspensas no topo da janela de código para escolher UserForm e Inicializar. Isso criará o procedimento de que você precisa. Agora você pode excluir o procedimento UserForm_Click ().
3. Insira o seguinte código no procedimento:
Private Sub UserForm_Initialize () txtName.Value = "" txtPhone.Value = "" Com cboDepartment .AddItem "Vendas" .AddItem "Marketing" .AddItem "Administração" .AddItem "Design" .AddItem "Publicidade" .AddItem "Expedição". AddItem "Transporte" End With cboDepartment.Value = "" Com cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" End With cboCourse.Value = "" optIntroduction = True chkLunch = False chkVegetarian = False txtName.SetFocus End Sub
Como funciona o código de inicialização:
O objetivo do procedimento UserForm_Initialize () é preparar o formulário do usuário em VBA para uso, definindo os valores padrão para os vários controles e criando as listas que as caixas de combinação mostrarão.
Essas linhas definem o conteúdo das duas caixas de texto como vazio:
txtName.Value = "" txtPhone.Value = ""
Em seguida, vêm as instruções para as caixas de combinação. Em primeiro lugar, o conteúdo da lista é especificado e, em seguida, o valor inicial da caixa de combinação é definido como vazio.
Com cboDepartment .AddItem "Vendas" .AddItem "Marketing" (tantos quanto necessário …) End With
cboDepartment.Value = ""
Se necessário, uma escolha inicial pode ser feita a partir do grupo de opções, neste caso:
optIntroduction = True
Ambas as caixas de seleção são definidas como False (ou seja, sem marca). Defina como True se desejar que a caixa de seleção apareça já marcada:
chkLunch = False
chkVegetarian = False
Finalmente, o foco é levado para a primeira caixa de texto. Isso coloca o cursor do usuário na caixa de texto para que eles não precisem clicar na caixa antes de começar a digitar:
txtName.SetFocus
Adicionando o Código: 2 Fazendo os Botões Funcionarem
Existem três botões de comando no formulário e cada um deve ser acionado por seu próprio procedimento. Começando com os mais simples …
Codificando o botão Cancelar:
Anteriormente, usamos a janela de propriedades para definir o Cancelar propriedade do botão Cancelar para Verdade. Quando você define a propriedade Cancelar de um botão de comando como Verdadeiro, isso tem o efeito de "clicar" naquele botão quando o usuário pressiona o Esc tecla em seu teclado. Mas isso por si só não fará com que nada aconteça com o formulário. É necessário criar o código para o evento click do botão que, neste caso, fecha o formulário. Veja como:
1. Com o formulário de usuário aberto para edição no Editor do Visual Basic, clique duas vezes no botão Cancelar. A janela de código do formulário é aberta com o cmdCancel_Click () procedimento pronto para edição.
2. O código para fechar um formulário é muito simples. Adicione uma linha de código ao procedimento para que fique assim:
Private Sub cmdCancel_Click () Unload Me End Sub
Codificando o botão Limpar formulário:
Eu adicionei um botão para limpar o formulário caso o usuário quisesse mudar de ideia e redefinir tudo, e para tornar mais fácil se ele tivesse várias reservas para fazer ao mesmo tempo. Tudo o que precisa fazer é executar o procedimento de inicialização novamente. Uma macro pode ser informada para executar outra macro (ou uma série de macros, se necessário) usando o Ligar palavra-chave:
1. Clique duas vezes no botão Limpar formulário. A janela de código do formulário é aberta com o cmdClearForm_Click () procedimento pronto para edição.
2. Adicione uma linha de código ao procedimento para que tenha a seguinte aparência:
Private Sub cmdClearForm_Click () Chamar UserForm_Initialize End Sub
Codificando o botão OK:
Este é o trecho de código que deve fazer o trabalho de transferir as escolhas do usuário e a entrada de texto para a planilha. Quando definimos a propriedade Cancelar do botão Cancelar como True, também definimos a propriedade do botão OK Predefinição propriedade para Verdade. Isso consiste em clicar no botão OK quando o usuário pressiona o Digitar (ou Retornar) tecla em seu teclado (desde que não tenham usado seu Aba para alternar para outro botão). Este é o código para fazer o botão funcionar:
1. Clique duas vezes no botão OK. A janela de código do formulário é aberta com o cmdOK_Click () procedimento pronto para edição.
2. Edite o procedimento para adicionar o seguinte código:
Private Sub cmdOK_Click () ActiveWorkbook.Sheets ("Course Bookings"). Activate Range ("A1"). Selecione Do If IsEmpty (ActiveCell) = FalseThen ActiveCell.Offset (1, 0) .Selecione End If Loop até IsEmpty (ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value Se optIntroduction = True Then ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" End If If chkLunch = True Then ActiveCell.Offset (0, 5) .Value = "Sim" Else ActiveCell.Offset (0, 5) .Value = "Não" End If If chkVegetarian = True Then ActiveCell.Offset (0, 6). Value = "Sim" Else If chkLunch = False Then ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "Não" End If End If Range ("A1"). Selecione End Sub
Como funciona o código CmdOK_Click:
As primeiras duas linhas garantem que a pasta de trabalho correta está ativa e move a seleção para a célula A1:
ActiveWorkbook.Sheets ("Course Bookings"). Ative Range ("A1"). Select As próximas linhas movem a seleção para baixo na planilha até encontrar uma célula vazia: Do If IsEmpty (ActiveCell) = False Then ActiveCell.Offset (1 , 0) .Selecione End If Loop Até IsEmpty (ActiveCell) = True
As próximas quatro linhas começam a escrever o conteúdo do formulário na planilha, usando a célula ativa (que está na coluna A) como referência e movendo ao longo da linha uma célula de cada vez:
ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value
Agora chegamos aos botões de opção. Eles foram colocados em um quadro no formulário para que o usuário pudesse escolher apenas um. Uma instrução IF é usada para instruir o Excel sobre o que fazer para cada opção:
If optIntroduction = True Then ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" End If
As instruções IF do VBA são muito mais fáceis de gerenciar do que a função IF do Excel. Você pode ter quantas opções quiser, basta inserir um adicional ElseIf para cada um. Se houvesse apenas duas opções, você não precisaria do ElseIf, apenas o Se e Outro seria suficiente (não se esqueça - todos eles precisam de um Fim se).
Há outra instrução IF para cada caixa de seleção. Para a caixa de seleção Almoço obrigatório, uma marca na caixa significa "Sim", a pessoa precisa do almoço, e nenhuma marca significa "Não".
If chkLunch = True Then ActiveCell.Offset (0, 5) .Value = "Sim" Else ActiveCell.Offset (0, 5) .Value = "Não" End If
Poderíamos usar uma declaração IF semelhante para a caixa de seleção Vegetariana, mas se a pessoa não requerer almoço, é irrelevante se ela é vegetariana ou não. De qualquer forma, seria errado presumir que eles não eram vegetarianos simplesmente porque não precisavam de almoço. A instrução IF, portanto, contém uma segunda instrução if aninhada:
If chkVegetarian = True Then ActiveCell.Offset (0, 6) .Value = "Sim" Else If chkLunch = False Then ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "Não" End If End If
Uma marca na caixa significa "Sim", a pessoa é vegetariana. Se não houver nenhuma marca na caixa, a instrução IF aninhada olhará para a caixa de seleção Lunch Required. Se a caixa de seleção Almoço necessário estiver marcada, a ausência de marcação na caixa de seleção Vegetariana significa que a pessoa não é vegetariana, portanto, será inserido "Não" na célula. No entanto, se a caixa de seleção Almoço necessário não estiver marcada, não sabemos se a pessoa é vegetariana ou não (não importa), então a célula é deixada em branco ("").
Finalmente, a seleção é levada de volta ao início da planilha, pronta para a próxima entrada:
Intervalo ("A1"). Selecione
Adicionando o Código 3: Manipulando o Formulário
Finalmente, um exemplo de como os controles em um formulário podem ser manipulados enquanto ele está em uso. Quando as propriedades do controle foram definidas, o Habilitado propriedade da caixa de seleção Vegetariana foi definida como Falso. Quando um controle não está habilitado, o do utilizador não pode inserir um valor nele, embora possa conter um valor que já estava lá, e o VBA pode adicionar, remover ou alterar o valor.
Não precisamos saber se a pessoa é vegetariana ou não (mesmo que seja!) Se não estiver pedindo o almoço. Portanto, a caixa de seleção Vegetariana permanece desabilitada, a menos que uma marca seja colocada na caixa de seleção Almoço necessário. Em seguida, o usuário fica livre para marcar a caixa de seleção Vegetariana, se desejar. Se marcarem, saberemos que responderam "Sim" e, se não o fizerem, saberemos que responderam "Não".
Podemos alternar o Habilitado propriedade de Falso para Verdade por ter um procedimento que é executado automaticamente sempre que o valor da caixa de seleção Lunch Required muda. Felizmente, mais controles têm um Mudar procedimento e o que usamos aqui é chkLunch_Change (). Usaremos isso para habilitar a caixa de seleção Vegetariano quando a caixa de seleção Almoço Requerido estiver marcada, e desabilitá-la quando a caixa de seleção Almoço Requerido não estiver marcada.
Só precisamos fazer mais uma coisa. Suponha que alguém tenha marcado a caixa de seleção Almoço necessário e também a caixa de seleção Vegetariana. Em seguida, eles mudaram de ideia e removeram a marca da caixa de seleção Almoço necessário. A caixa de seleção Vegetariana seria desabilitada, mas a marca que foi colocada anteriormente permaneceria.
Uma linha extra de código pode garantir que a marca seja removida quando a caixa for desativada. Aqui está a coisa toda:
Sub privado chkLunch_Change () Se chkLunch = Verdadeiro Então chkVegetarian.Enabled = Verdadeiro Else chkVegetarian.Enabled = Falso chkVegetarian = Falso End If End Sub
Abrindo o Formulário
O formulário agora está pronto para uso, portanto, precisa ser aberto com uma macro simples. Isso pode ser anexado a um botão personalizado da barra de ferramentas, a um botão de comando desenhado na planilha ou a qualquer gráfico (clique com o botão direito no gráfico e escolha Atribuir Macro) Se necessário, crie um novo módulo para a pasta de trabalho e adicione este procedimento:
Sub OpenCourseBookingForm () frmCourseBooking.Show End Sub
Se você gostou de nossos blogs, compartilhe com seus amigos no Facebook. E você também pode nos seguir no Twitter e no Facebook.
Gostaríamos muito de ouvir de você, diga-nos como podemos melhorar, complementar ou inovar nosso trabalho e torná-lo melhor para você. Escreva-nos no site de e-mail