... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$145,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Criando uma InputBox com entrada para senha

A InputBox nativa do Access não tem recurso para esconder a senha digitada. Esta afirmação pode ser confirmada, se você abrir o VBA de seu aplicativo e na Janela Imediata (CTRL + G), digitar o comando abaixo e logo em seguida, dar <Enter>

? Inputbox("Entre com a senha...","Senha")

Ao digitar a senha, observe que a informação fica exposta:

Alinhamento txt

Com um simples formulário e um pouco de programação é possível montar a nossa própria InputBox e incrementar o recurso de máscara para a digitação de senha.

Para alterar a máscara de um campo do formulário, pelo VBA, utilizamos a propriedade InputMask.

Me!txtValorDigitado.InputMask = "Password"

Com a configuração desta propriedade para Password (senha), são apresentados os asteriscos no lugar do valor digitado.  Veja nesta imagem, o formulário personalizado:

Alinhamento txt

É possível configurar o formulário InputBox com uma série de informações, tais como: mensagem, título, valor padrão e o tipo de máscara a ser usado no campo.  Para isso, basta empregar a técnica do argumento OpenArgs, do comando Docmd.OpenForm.  Observe abaixo, o código de abertura de um formulário:

DoCmd.OpenForm "frmTeste",,,,,,"Avelino Sampaio | João Henrique | 1234567"

O código pode ser também, escrito assim:

DoCmd.OpenForm "frmTeste",OpenArgs:="Avelino Sampaio | João Henrique | 1234567"

Agora, abra o formulário de teste e escreva a seguinte linha no evento "Ao abrir":

Private Sub Form_Open(Cancel As Integer)
   MsgBox Me.OpenArgs
End Sub

Veja o resultado:

Alinhamento txt

Observe que utilizei a barra vertical "|" para separar as informações.  O Access possui uma função chamada de Split(), que usa uma "referência" para separar as informações numa cadeia.  No nosso caso, vamos usar como referência a barra vertical "|".   No evento "Ao abrir" do formulário de teste, utilize o seguinte código:

Private Sub Form_Open(Cancel As Integer)
   Dim k, strTexto As String
   '-----------------------------------------------------------------
   'Separa as informações, tendo como referência a barra vertical "|"
   '-----------------------------------------------------------------
   k = Split(Me.OpenArgs, "|") 
   strTexto = "Nome Pai: " & k(0) & vbNewLine
   strTexto = strTexto & "Nome Filho: " & k(1) & vbNewLine
   strTexto = strTexto & "Código: " & k(2)
   MsgBox strTexto
End Sub

Ao rodar o comando Docmd.OpenForm acima, teremos o resultado conforme esta imagem:

Alinhamento txt

O projeto

Leia com atenção os comentários da função InputBox2(), criada para chamar a caixa InputBox personalizada.  Observe que os argumentos Mensagem, Título, Valor Padrão e Máscara pertencentes a função são passados para o formulário, através do OpenArgs.

Option Compare Database
Public varInputBox As Variant

Public Function InputBox2(Mensagem As String, Título As String, _
Optional ValorPadrão As Variant = vbNullString, _
Optional Máscara As Variant = vbNullString) As Variant

Dim strOpenArgs As String
On Error GoTo trataErro
'-------------------------------------------------------------------------
'Limpa a variável que recebe o conteúdo digitada no formulário frmInputBox
'-------------------------------------------------------------------------
varInputBox = vbNullString
'-----------------------------------------------------------
'Variável recebe os argumentos inseridos na função InputBox2
'------------------------------------------------------------
strOpenArgs = Mensagem & "|" & Título & "|" & ValorPadrão & "|" & Máscara
'------------------------------------------------------------------
'Abre o formulário frmInputBoxX no modo MODAL E POPUP (acDialog)
'As informações contidas na variável strOpenArgs são passadas para
'o formulário, através do argumento OpenArgs
'-------------------------------------------------------------------
DoCmd.OpenForm "frmInputBox", , , , , acDialog, strOpenArgs
'-----------------------------------------------------------------------------
'Aqui o código fica interrompido até que se feche o formulário
'Após o fechamento do formulário, a função captura o valor que foi digitado e
'que está contido na variável pública varInputBox
'-----------------------------------------------------------------------------
InputBox2 = varInputBox
Sair:
   Exit Function
trataErro:
   MsgBox "Não é possível abrir a caixa InputBox...", vbInformation, "Aviso"
   Resume Sair
End Function

Ao ser aberto o formulário frmInputBox, os valores passados no argumento OpenArgs são distribuídos para os controles apropriados:

Private Sub Form_Open(Cancel As Integer)
   Dim k
   k = Split(Me.OpenArgs, "|")
   Me!txtMensagem = k(0) 'Recebe a mensagem
   Me.Caption = k(1) 'Recebe o título
   Me!txtValorDigitado = k(2) 'Recebe o valor padrão
   Me!txtValorDigitado.InputMask = k(3) 'Recebe a máscara
End Sub

Baixe o arquivo e faça o teste:

Clique aqui e baixe o arquivo exemplo.

Abra a Janela Imediata (CTRL+G) do VBA, digite a  linha exibida abaixo e dê <enter>:

? inputBox2("Entre com a senha...","Senha",,"PassWord")

A caixa InputBox é aberta com as informações que foram passadas.  Digite uma senha qualquer e dê  <enter>.  O resultado digitado irá aparecer na Janela Imediata.

É possível ainda, utilizar a caixa InputBox para solicitar um outro tipo de informação.  Vamos supor que eu queira solicitar que o usuário entre com uma determinada data.  Veja como fica a função:

? inputBox2("Entre com a data de venda...","Data venda",,"00/00/000;0")

Observe o resultado:

Alinhamento txt

Veja que no final da máscara, coloquei um ";0".  Isso significa que o Access irá retornar a data digitada junto com a máscara.  Sem isso, a data sairia no formato 10072016 e não no formato 10/07/2016.

Teste mais um exemplo, usando agora, uma máscara para a entrada de telefone celular:

? inputBox2("Celular de contato...","Celular",,"0-0000-0000;0")

Ao abrir o formulário frmClientes, a caixa InputBox personalizada é aberta e a senha de acesso, solicitada.  O seguinte código foi utilizado no evento "ao abrir" do formulário:

Private Sub Form_Open(Cancel As Integer)
Dim x As Variant
x = InputBox2("Entre com a senha...", "Senha", , "password")
If StrPtr(x) = 0 Then
   MsgBox "Você cancelou a entrada da senha...", vbInformation, "Aviso"
   Cancel = True 'impede a abertura do formulário
Else
   If x <> "#456" Then
     MsgBox "Senha não confere...", vbInformation, "Aviso"
     Cancel = True 'impede a abertura do formulário
   End If
End If
End Sub

Basta passar para o seu projeto o formulário frmInputBox e o módulo mod_InputBox.

Sucesso!


 

 


6 comentários

Antonio Carlos   04/10/2016 11:45:21

Mestre Avelino

Estava usando uma aqui com um monte de APIs. Muito mais simples essa sua.

Valeu!!!

Alvaro Teixeira   04/10/2016 13:48:09

Obrigado pela partilha.
Sempre aprender!

aan   04/10/2016 18:30:47

Uma sorte ter gurus neste forum.
O meu muito o brigado.

Jose Baptista   06/10/2016 06:24:52

Grande Avelino!
Obrigado por mais esta dica
Abraço

Paulo   07/10/2016 10:46:29

Nossa! quanto trabalho eu poderia ter poupado em alguns sistemas que não requeriam nada de sofisticado.

Claudemir   10/10/2016 22:36:33

Muito bom Avelino, parabéns pelo sucesso em suas soluções!


Envie seu comentário: