Caixas de Mensagem e Caixas de Entrada
Deslize para mostrar o menu
Antes de criar um formulário completo, vale a pena dominar as duas formas mais simples de o VBA interagir com o usuário: MsgBox, que exibe informações e opcionalmente faz uma pergunta, e InputBox, que solicita um pequeno texto de resposta.
MsgBox
Na sua forma mais simples, MsgBox apenas exibe uma mensagem e espera o usuário clicar em OK:
MsgBox "Customer saved successfully."
Usado dessa forma — como uma instrução, sem parênteses e sem capturar um resultado — MsgBox é um ponto final: mostra a mensagem e o código continua, independentemente do que o usuário faz. No momento em que você precisa saber qual botão foi clicado, MsgBox se torna uma função em vez de uma instrução, o que significa que precisa de parênteses e de algo para armazenar seu resultado:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo e vbQuestion são somados com um simples +, o que pode parecer incomum à primeira vista, mas é apenas a forma como o VBA permite combinar duas configurações independentes — quais botões aparecem e qual ícone é exibido — no único segundo argumento que o MsgBox espera. result retorna como uma das constantes internas do VBA, vbYes ou vbNo, que na verdade são apenas números disfarçados (6 e 7, embora você nunca deva escrever o número literal). Controle uma ação com base na resposta usando um simples If:
If result = vbYes Then
' proceed with deletion
End If
InputBox
Enquanto o MsgBox sempre retorna um conjunto fixo de constantes de botão, o InputBox solicita que o usuário digite algo e retorna exatamente o que foi inserido:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
O terceiro argumento, "Chicago" neste caso, pré-preenche a caixa de texto — útil para sugerir uma resposta provável que o usuário pode aceitar ou sobrescrever. Dois detalhes são fáceis de errar na primeira vez: qualquer coisa que o usuário digite será retornada como uma String, independentemente da aparência, então ao digitar 25 você recebe o texto "25", e não o número 25, sendo necessário usar CInt ou CDbl antes de realizar operações aritméticas; e ao clicar em Cancelar não ocorre erro nem a execução do código é interrompida — simplesmente retorna uma string vazia (""), que seu código precisa verificar explicitamente caso uma resposta vazia não seja válida.
Solicitações e Confirmações do Usuário
A combinação dos dois é o padrão para qualquer ação que lê uma entrada do usuário e depois precisa de confirmação antes de executar algo arriscado:
Dim searchCity As String
Dim confirmMsg As VbMsgBoxResult
searchCity = InputBox("Enter a City to search for:", "Search Customers")
If searchCity = "" Then
MsgBox "Search cancelled — no city entered."
Exit Sub
End If
confirmMsg = MsgBox("Search for customers in " & searchCity & "?", vbYesNo)
If confirmMsg = vbNo Then Exit Sub
' ... proceed with the search
Observe que confirmMsg é declarado como As VbMsgBoxResult em vez de um tipo genérico — este é o tipo nomeado que o VBA utiliza para o valor de retorno do MsgBox, e declará-lo explicitamente (em vez de deixar como Variant) permite que o VBE ofereça autocompletar para vbYes, vbNo e os demais enquanto você digita. A verificação de string vazia após o InputBox e a verificação de vbNo após o MsgBox utilizam o mesmo padrão de escape, Exit Sub, que interrompe o procedimento imediatamente em vez de permitir que o código continue assumindo que existe uma entrada válida.
Tarefa
- Escrever um
Subque utilize oInputBoxpara solicitar um ID de Cliente e, em seguida, utilize o MsgBox para confirmar "Excluir cliente [ID]?" com botões Sim/Não e ícone de pergunta. - Tratar tanto o caso de string vazia (usuário clicou Cancelar no InputBox) quanto o caso
vbNo(usuário recusou a confirmação) encerrando o Sub antecipadamente com uma mensagem explicando que nada aconteceu. - Somente quando ambas as verificações forem aprovadas, exibir uma MsgBox final informando "O cliente seria excluído aqui."
1. Obtendo o ID do Cliente e construindo a confirmação
- O
InputBoxprecisa de uma mensagem e pode receber um título como segundo argumento — armazene o valor retornado em uma variável do tipoString. - A mensagem de confirmação precisa do ID real concatenado com
&, não digitado como uma string fixa — caso contrário, sempre exibirá literalmente "[ID]". - O
MsgBoxusado como função (capturando um resultado) precisa de parênteses; combinevbYesNoevbQuestioncom+.
2. Tratando Cancelar e Não
- Verifique o caso de string vazia logo após a linha do
InputBox, antes mesmo de tentar construir a mensagem de confirmação — não faz sentido perguntar "Excluir cliente?" se não há ID para excluir. Exit Subinterrompe o procedimento imediatamente onde for colocado — utilize-o dentro de cada blocoIf, com umMsgBoxlogo antes explicando que nada aconteceu.- A verificação de
vbNoocorre após oMsgBoxde confirmação, comparando o resultado capturado com a constantevbNo.
3. A confirmação final
- Esta linha só será executada se a execução chegar até ela — como ambas as verificações anteriores usam
Exit Subem caso de falha, simplesmente colocar esteMsgBoxapós ambas garante que ele só será exibido quando ambas forem aprovadas.
Option Explicit
Sub DeleteCustomerPrompt()
Dim customerID As String
Dim confirmResult As VbMsgBoxResult
' Step 1 — ask for the Customer ID
customerID = InputBox("Enter the Customer ID to delete:", "Delete Customer")
' Step 2a — handle Cancel / empty input
If customerID = "" Then
MsgBox "Cancelled — no Customer ID was entered. Nothing happened."
Exit Sub
End If
' Step 1 (continued) — confirm with Yes/No
confirmResult = MsgBox("Delete customer " & customerID & "?", _
vbYesNo + vbQuestion, "Confirm Delete")
' Step 2b — handle No
If confirmResult = vbNo Then
MsgBox "Cancelled — deletion was not confirmed. Nothing happened."
Exit Sub
End If
' Step 3 — both checks passed
MsgBox "Customer would be deleted here."
End Sub
Execute (F5) e teste os três caminhos: clique em Cancelar no InputBox, clique em Não na confirmação e, por fim, insira um ID e clique em Sim — cada um deve exibir uma das três mensagens diferentes.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Caixas de Mensagem e Caixas de Entrada
Antes de criar um formulário completo, vale a pena dominar as duas formas mais simples de o VBA interagir com o usuário: MsgBox, que exibe informações e opcionalmente faz uma pergunta, e InputBox, que solicita um pequeno texto de resposta.
MsgBox
Na sua forma mais simples, MsgBox apenas exibe uma mensagem e espera o usuário clicar em OK:
MsgBox "Customer saved successfully."
Usado dessa forma — como uma instrução, sem parênteses e sem capturar um resultado — MsgBox é um ponto final: mostra a mensagem e o código continua, independentemente do que o usuário faz. No momento em que você precisa saber qual botão foi clicado, MsgBox se torna uma função em vez de uma instrução, o que significa que precisa de parênteses e de algo para armazenar seu resultado:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo e vbQuestion são somados com um simples +, o que pode parecer incomum à primeira vista, mas é apenas a forma como o VBA permite combinar duas configurações independentes — quais botões aparecem e qual ícone é exibido — no único segundo argumento que o MsgBox espera. result retorna como uma das constantes internas do VBA, vbYes ou vbNo, que na verdade são apenas números disfarçados (6 e 7, embora você nunca deva escrever o número literal). Controle uma ação com base na resposta usando um simples If:
If result = vbYes Then
' proceed with deletion
End If
InputBox
Enquanto o MsgBox sempre retorna um conjunto fixo de constantes de botão, o InputBox solicita que o usuário digite algo e retorna exatamente o que foi inserido:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
O terceiro argumento, "Chicago" neste caso, pré-preenche a caixa de texto — útil para sugerir uma resposta provável que o usuário pode aceitar ou sobrescrever. Dois detalhes são fáceis de errar na primeira vez: qualquer coisa que o usuário digite será retornada como uma String, independentemente da aparência, então ao digitar 25 você recebe o texto "25", e não o número 25, sendo necessário usar CInt ou CDbl antes de realizar operações aritméticas; e ao clicar em Cancelar não ocorre erro nem a execução do código é interrompida — simplesmente retorna uma string vazia (""), que seu código precisa verificar explicitamente caso uma resposta vazia não seja válida.
Solicitações e Confirmações do Usuário
A combinação dos dois é o padrão para qualquer ação que lê uma entrada do usuário e depois precisa de confirmação antes de executar algo arriscado:
Dim searchCity As String
Dim confirmMsg As VbMsgBoxResult
searchCity = InputBox("Enter a City to search for:", "Search Customers")
If searchCity = "" Then
MsgBox "Search cancelled — no city entered."
Exit Sub
End If
confirmMsg = MsgBox("Search for customers in " & searchCity & "?", vbYesNo)
If confirmMsg = vbNo Then Exit Sub
' ... proceed with the search
Observe que confirmMsg é declarado como As VbMsgBoxResult em vez de um tipo genérico — este é o tipo nomeado que o VBA utiliza para o valor de retorno do MsgBox, e declará-lo explicitamente (em vez de deixar como Variant) permite que o VBE ofereça autocompletar para vbYes, vbNo e os demais enquanto você digita. A verificação de string vazia após o InputBox e a verificação de vbNo após o MsgBox utilizam o mesmo padrão de escape, Exit Sub, que interrompe o procedimento imediatamente em vez de permitir que o código continue assumindo que existe uma entrada válida.
Tarefa
- Escrever um
Subque utilize oInputBoxpara solicitar um ID de Cliente e, em seguida, utilize o MsgBox para confirmar "Excluir cliente [ID]?" com botões Sim/Não e ícone de pergunta. - Tratar tanto o caso de string vazia (usuário clicou Cancelar no InputBox) quanto o caso
vbNo(usuário recusou a confirmação) encerrando o Sub antecipadamente com uma mensagem explicando que nada aconteceu. - Somente quando ambas as verificações forem aprovadas, exibir uma MsgBox final informando "O cliente seria excluído aqui."
1. Obtendo o ID do Cliente e construindo a confirmação
- O
InputBoxprecisa de uma mensagem e pode receber um título como segundo argumento — armazene o valor retornado em uma variável do tipoString. - A mensagem de confirmação precisa do ID real concatenado com
&, não digitado como uma string fixa — caso contrário, sempre exibirá literalmente "[ID]". - O
MsgBoxusado como função (capturando um resultado) precisa de parênteses; combinevbYesNoevbQuestioncom+.
2. Tratando Cancelar e Não
- Verifique o caso de string vazia logo após a linha do
InputBox, antes mesmo de tentar construir a mensagem de confirmação — não faz sentido perguntar "Excluir cliente?" se não há ID para excluir. Exit Subinterrompe o procedimento imediatamente onde for colocado — utilize-o dentro de cada blocoIf, com umMsgBoxlogo antes explicando que nada aconteceu.- A verificação de
vbNoocorre após oMsgBoxde confirmação, comparando o resultado capturado com a constantevbNo.
3. A confirmação final
- Esta linha só será executada se a execução chegar até ela — como ambas as verificações anteriores usam
Exit Subem caso de falha, simplesmente colocar esteMsgBoxapós ambas garante que ele só será exibido quando ambas forem aprovadas.
Option Explicit
Sub DeleteCustomerPrompt()
Dim customerID As String
Dim confirmResult As VbMsgBoxResult
' Step 1 — ask for the Customer ID
customerID = InputBox("Enter the Customer ID to delete:", "Delete Customer")
' Step 2a — handle Cancel / empty input
If customerID = "" Then
MsgBox "Cancelled — no Customer ID was entered. Nothing happened."
Exit Sub
End If
' Step 1 (continued) — confirm with Yes/No
confirmResult = MsgBox("Delete customer " & customerID & "?", _
vbYesNo + vbQuestion, "Confirm Delete")
' Step 2b — handle No
If confirmResult = vbNo Then
MsgBox "Cancelled — deletion was not confirmed. Nothing happened."
Exit Sub
End If
' Step 3 — both checks passed
MsgBox "Customer would be deleted here."
End Sub
Execute (F5) e teste os três caminhos: clique em Cancelar no InputBox, clique em Não na confirmação e, por fim, insira um ID e clique em Sim — cada um deve exibir uma das três mensagens diferentes.
Obrigado pelo seu feedback!