VBA InputBox e Application.InputBox do Excel

Existem várias funções em programação para criar campos ou caixas de digitação para interagir com o usuário. Para uma resposta que não seja sim ou não a um código, o InputBox é capaz de criar campos ajustados à necessidade do programador. Na verdade, InputBox exibe uma mensagem, espera que o usuário insira um texto ou clique em um botão e retorne o conteúdo da caixa de texto em uma string (cadeia de caracteres). A seguir, veremos diversas configurações para a função InputBox, alguns exemplos de uso e sua função 'gêmea': application.InputBox.

Quais são as configurações do InputBox

Em primeiro lugar, vejamos a sintaxe desta função do Visual Basic:

InputBox (prompt, prompt de [título],[padrão], [xpos], [ypos], [helpfile], [contexto])

As configurações entre colchetes ([]) são opcionais. Apenas uma configuração é obrigatória: o prompt (interpretador de linha de comando).

Como é a mensagem no prompt

Esta é a mensagem que você envia para o usuário fazer o seu pedido. Aqui a configuração é obrigatória (mandatory) e deve ser como uma String (cadeia de caracteres).

No geral, convém fazer uma pergunta (ou enviar uma mensagem para o usuário) solicitando que ele digite uma resposta que não seja nem sim nem não, em caso contrário, será preciso usar uma MsgBox. Exemplo:

Dim Nom As String Nome= InputBox (Digite seu nome)

Como criar um title (título)

Esta é a primeira configuração opcional. Como o próprio nome indica, é preciso adicionar um título ao diálogo. Este título será na forma de uma cadeia de caracteres (string) e será inserido na barra de título da caixa de diálogo. Exemplo:

Dim Nome As String Nome = InputBox ("Digite o seu NOME:", "NOME") 

Esta configuração é opcional e se ela for omitida, o padrão aparecerá com o nome do aplicativo utilizado na barra de título.

Como conhecer o default (valor padrão)

A caixa de diálogo InputBox é composta por 4 partes: a janela, a barra de título, a caixa de texto e os botões. Aqui, default vai exibir, em sua inicialização, um valor padrão na TextBox (caixa de texto). Exemplo:

Dim Nome As String Nome = InputBox ("Digite o seu NOME";, "NOME", "OLIVEIRA") 

Como fazer as configurações os posicionamentos xPos & ypos

Essas duas configurações também são opcionais e permitem colocar o nosso InputBox onde desejarmos. Trata-se do posicionamento horizontal (xpos) e vertical (ypos), mais especificamente, a distância, em pixels, que separa a borda esquerda (ou superior) do InputBox, da margem esquerda (ou superior) da tela. Veja bem, da tela, e não do aplicativo. Exemplo:

Dim Nome As String Nome = InputBox ("Digite o seu NOME", "NOME", "OLIVEIRA", 100, 100)

Por que Helpfile e Context são inseparáveis

Essas duas configurações opcionais. Elas são inseparáveis se quiser uma deverá usar a outra. Se você fizer referência a uma, deverá fazer referência a outra, caso contrário você obterá um 'erro de execução 5': argumento ou chamada de procedimento incorreto.

Helpfile: ou arquivo de ajuda, é utilizado para identificar o arquivo de ajuda. Trata-se do seu nome (ex: DEMO.HLP) ou do seu caminho de acesso (ex: c:\Help.cam).

Context: ou ajuda contextual, é o número de ajuda contextual, atribuída pelo autor, para ajudar no tópico correspondente.

No Microsoft Office Excel 2007, por exemplo, se estas duas configurações forem corretamente referenciadas, um botão adicional Help será adicionado ao diálogo. Este botão corresponde à tecla F1 do seu aplicativo. Exemplo:

Dim Nome As String
Nom = InputBox("Digite seu NOME : ", "NOME", , , , "c:\Help.chm", 0)

ou

Nome = InputBox ("Digite o seu NOME", "NOME", "OLIVEIRA", 200, 200, "DEMO.HLP", 10) 

As configurações em variáveis

Assim como todas as funções VB, as configurações podem ser armazenadas em variáveis. Mas, muito cuidado para definir o tipo certo. Veja um exemplo que passa por todas as configurações variáveis intermediárias:

 Dim Número As Integer 
Mensagem Dim As String, Titulo As String, Por padrão As String, PosX As Integer, PosY As Integer, Ajuda AS String, NumAJUDA As Long 
Mensagem = "Entre um número inteiro" 
Titulo = "digitação numérica" 
Por padrão= "13" 
PosX = 250 
PosY = 360 
Help = "c:\Help.cam" 
NumAjuda = 3152 
Número= InputBox (Mensagem, Título, PorPadrão, PosX, PosY, NumAjuda) 

Aqui, nós digitamos, por padrão, um valor do tipo String: PorPadrão= "13". Ora, nossa variável encarregada de armazenar o resultado do InputBox é Integer. Assim, esperaríamos um retorno de erro Tipo errado. Mas não, neste caso, VB sabe reconhecer que o valor digitado é numérico. Para confirmar, basta adicionar no final do código anterior:

 MSGBox Número * 2 

Como se apresentam os botões InputBox

Existem três botões diferentes na função InputBox:

O botão Ok

Quando o usuário pressiona este botão (ou pressiona a tecla Enter), a função InputBox retorna tudo o que a caixa de texto contém. Se nada foi digitado, ela retorna a cadeia: "".

O botão Cancelar

Quando o usuário pressiona esta tecla, a função InputBox retorna a sequência de comprimento zero: "".

O botão Ajuda

Este botão abre a ajuda do aplicativo ou a ajuda correspondente ao arquivo e contexto de ajuda, definidos nas configurações.

Erros comuns

Saiba que com este recurso, você deverá lidar com tudo que é tipo de erro que o usuário possa fazer. Do erro de entrada ao erro de incompreensão, passando pelo erro voluntário. Na certa, você vai precisar de um gerenciador de erros, adaptado e integrado ao seu código.

Erro de tipo de digitação

Erro de execução "13" Incompatibilidade de tipo: esta mensagem de erro aparece quando você pede ao usuário um determinado tipo de dado (que você declara em suas variáveis) e ele digita outro. Por exemplo, você pede a introdução de um número inteiro e ele entra um número decimal. Exemplo:

Dim Número As Integer ' Aqui conhecemos o que se quer um Integer
Número = InputBox("Digite um número inteiro : ", "Digitação digital")

Se o usuário digitar 13,5 e pressionar o botão OK, uma mensagem de erro aparecerá. Mesma coisa, mesma sanção, se o usuário digitar uma letra, ou não digitar nada e pressionar o botão Cancelar.

Como remediar esta situação? Simplesmente com a ajuda de um processamento de erro. Ex.:

 Dim Número As Integer 
"Em caso de erro, acesse a etiqueta <bold>Tipo errado</bold>
On Error GoTo Tipo errado
Número = InputBox ("Digite um número inteiro:", "Digitação numérica") 

Veja o exemplo do tratamento desejado: selecione a caixa Número 

    Case Is > = 18: MsgBox "Menção Muito Bem" 
    Case Is  > = 16: MsgBox "Menção Bem" 
    Case Is  > = 14: MsgBox "Menção Passável" 
    Case Is  > = 10: MsgBox "Nenhuma menção" 
    Case Is  > = 8: MsgBox "Menção nada boa" 
    Case Is  > = 6 MsgBox "Menção ruim" 
    Case Else: MsgBox "Menção muito ruim" 
End Select 
Exit Sub 'Não esquecer a Saída para não tratar Tipo Errado 

Tipo Errado: 
MsgBox "Você não digitou um número inteiro", vbCritical

Número de caracteres

Visível pelo seu tamanho, a função InputBox não é compatível com dados longos. Na verdade, a entrada é limitada a 255 caracteres. Além disso, esta função só envia 254, portanto, cuidado para não pedir dados muito longos.

Variável obrigatória

A função InputBox precisa de uma variável para ser armazenada nela. Ao contrário da MsgBox que não precisa disso, sem variável você obterá certamente a mensagem de erro: "Erro de compilação". Exemplo do que não devemos fazer:

 InputBox ("Digite um número inteiro: ", "Digitação numérica")

Botão CANCELAR

Como vimos anteriormente, não é possível cancelar se o código pedir um número. Na verdade, a função retorna uma string ("" é uma cadeia de caracteres...) quando clicarmos neste botão, teremos o erro 13, ou seja, incompatibilidade de tipo. Para uma variável declarada As String, isso é diferente. Se o usuário cancelar, a variável conterá um dado: "". Ora, este dado pode ser primordial para o sucesso do resto do seu código.

Como evitar esse problema? Fazendo looping (fazer repetições, dar voltas), enquanto o comprimento da cadeia enviada pela função for igual a zero. Veja como abaixo:

Dim Nome As String  
Nome = InputBox ("Digite seu NOME: ", "Entre NOME") 
Do While Len (Name) = 0 
    MsgBox "Este dado é obrigatório" 
     Nome = InputBox ("Digite seu NOME:", "Entre NOME") 
Loop
MsgBox "Seu NOME é: " & Nome 

Pois é, mas isso cria um problema adicional. Se o usuário, após um momento de pouca sorte, só obtiver o botão Cancelar, a macro vai ficar dando voltas para sempre? Para remediar isso, vamos inserir um registro e uma porta de saída. Exemplo:

Dim Nome As String Dim, Cpt As Integer 
Cpt  = 1 
Nome = InputBox ("Digite seu NOME:", "Entre NOME") 
Do While Len (Nome) = 0 
     Cpt  =  Cpt + 1
     If Cpt = 4 Then GoTo Muitoburroparacontinuar 
     MsgBox "Este dado é obrigatório. Mais que " & 4 -. Cpt & " tentativas."
     Nome = InputBox ("Digite seu NOME:", "Entre NOME") 
Loop
MsgBox "Seu NOME é:"  & Nome 
Exit Sub 
Muitoburroparacontinuar: 
MsgBox "Por favor, pare com a informática"

Caso especial - O método "Application.InputBox" do Excel

As configurações são idênticas aos da função que acabamos de ver, mas com a adição de um ultimo ajuste, o tipo. A sintaxe deste método é: InputBox (prompt de [, título] [, padrão] [, xpos] [, ypos] [, ArquivoDeAjuda] [, contexto], Tipo). Vamos ver como completar esta nova configuração.

Os diferentes tipos

Valor Significado
0 Fórmula
1 Número
2 Texto (String)
4 Valor lógico (True or False)
8 Referência de célula, na forma de um objeto Range
16 Valor de erro como #n/a
64 Matriz de valores

Exemplos

Exemplo 1: Entrada digital, retomemos aqui o nosso código que travava, transposto como InputBox de tipo: = 1

 Dim Número As Integer 
Número = Application.InputBox ("Digite um número inteiro:" "Digitação numérica", Tipo: = 1) 

Se você digitar letras ao invés de um número, uma mensagem de erro será enviada, depois, você deverá voltar ao InputBox. Mensagem de erro: Número inválido.

Referência de célula: esta opção permite selecionar células com o mouse. Exemplo 1:

 Dim Campo Como Range
       Set Campo = Application.InputBox ("Selecione um campo", "Seleção de células", Type: = 8) 
       MsgBox ("O campo que você selecionou é:" & Campo.Address) 

Exemplo 2: mesma coisa com a restituição em uma variável de matriz:

 Minha Matriz  () As String 
Dim Campo As range 
Dim i As Integer 

Set Campo  = Application.InputBox ("Selecione campo", "Seleção de células", Tipo: = 8) 
Minha Matriz = Split (Campo.Address, ",") 
For i = 0 To Ubound (MinhaMatriz)  
    MsgBox  MinhaMatriz(i) 
Next i 

Exemplo 3: a Fonte: este exemplo usa um método InputBox para permitir que o usuário selecione um campo a ser transferido para a função MinhaFunção definida pelo usuário, que multiplica três valores de um campo e retorna o resultado.</block>

 Cbm_Value_Select () 
    RNG Dim  AS Range 
   
    Set RNG = Application.InputBox ("Range", Tipo: = 8) 
   If rng.Cells.Count <> 3 Então 
      MsgBox "comprimento, largura e altura são necessários -" & _ 
          vbLf e "favor selecionar três células!" 
       Exit Sub 
    End If 
   
    Chamada 1 MinhaFunção 
    ActiveCell.Value = MinhaFunção (RNG) 
End Sub 


Função MinhaFunção (rng As Range) As Double 
    MyFunction = rng (1) rng * (2) * rng (3) 
End Function 

Foto: © dennizn - Shutterstock.com

Nosso conteúdo é produzido em colaboração com especialistas em tecnologia da informação sob o comando de Jean-François Pillou, fundador do CCM.net. CCM é um site sobre tecnologia líder em nível internacional e está disponível em 11 idiomas.
Veja também
Este documento, intitulado 'VBA InputBox e Application.InputBox do Excel', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.

Assine nossa newsletter!

Assine nossa newsletter!
Junte-se à comunidade