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.
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).
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)
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.
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")
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)
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)
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
Existem três botões diferentes na função InputBox:
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: "".
Quando o usuário pressiona esta tecla, a função InputBox retorna a sequência de comprimento zero: "".
Este botão abre a ajuda do aplicativo ou a ajuda correspondente ao arquivo e contexto de ajuda, definidos nas configurações.
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 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
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.
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")
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"
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.
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 |
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