# Enmascarar Password en un InputBox



## Deivid

Tengo esta macro:

Option Explicit

Sub check()
    Dim valCheck As Integer, passCheck As Integer

    passCheck = 2299

    valCheck = Application.InputBox(prompt:="Ingrese el código de 4 dígitos", Type:=1)


    If valCheck = passCheck Then
        With Cells(ActiveCell.Row, 36)
            .Value = "REVISADO"
            .Font.ColorIndex = 50
            .Font.Bold = True
        End With
    Else
        Exit Sub
    End If

End Sub

El passcheck por defecto es 2299. Como puedo hacer para que al introducir cada digito aparezca un asterisco?


----------



## galileogali

Por lo que sé con un InputBox no lo lograrás, la solucion mas cercana, es habilitar un formulario con un TextBox, fijando para el mismo algun valor en la Propiedad PasswordChar, es decir cargando alguno de estos valores: "*"; "#", ó "@"

La rutina es obviamente un poco más compleja: llamando al formulario, el que debera tener algun commandbutton, para Cjequera la password y cerrar el form, etc.....


----------



## Deivid

Podrias echarme una mano? La macro me la hizo un amigo y no puedo contar con su ayuda ahora, marchó de viaje.


----------



## galileogali

En un Módulo standard pega esto:


		Code:
__


Option Explicit
Sub ABRIR_FORM()
UserForm1.Show
DoEvents
End Sub

Sub check(valcheck As Integer)
Dim passCheck As Integer, resp As Integer

passCheck = 2299



If valcheck = passCheck Then
With Cells(ActiveCell.Row, 36)
.Value = "REVISADO"
.Font.ColorIndex = 50
.Font.Bold = True
End With
Unload UserForm1

Else
resp = MsgBox("La contraseña es incorrecta.¿Reintentará?", vbSystemModal + vbDefaultButton1 + vbCritical + vbRetryCancel, "Validar Password")
If resp = vbCancel Then

Unload UserForm1
Else
UserForm1.TextBox1 = Empty
UserForm1.TextBox1.SetFocus
End If

End If

End Sub


Crea un formulario con un Textbox y un Boton

En el módulo del formulario pega esto:



		Code:
__


Private Sub CommandButton1_Click()
Dim pass As Integer
pass = CInt(TextBox1.Value)
check pass

End Sub


En mi Blog encontraras un link para descargar el archivo con el Userform....


----------



## Greg Truby

Deivid, 

Gali ya ha explicado cómo hacerlo, pero se supone cierto nivel de conocimiento de Excel. Si usted no sabe cómo emplear un UserForm, háganos saber y podemos explicarle cómo hacerlo. 


Suponiendo que sí, pudo hacerlo, dependiendo de qué tan importante es tal contraseña, no olvide poner llave al proyecto de vba.<SUP>1</SUP> Si no pone llave un usuario travieso podría abrir el proyecto, leer su código y enterarse de su contraseña.<HR>
1. (Del VBE: Tools > VBAProject Properties... > Properties (tab) > Lock Project for viewing (checkbox)


----------



## Greg Truby

¡Ay, que cosa!  Sali unas horas y hice un cliq sobre el botón de refrescar y siempre no vi la respuesta de Gali hasta que puse el mensaje mío.


----------



## Deivid

Gracias amigos,. es justo lo que necesitaba. A tu pregunta de si se usar los UserForms. Pues estoy empezando ahora con la programacion en vba orientada a Excel amigos. Pero la verdad es que no tengo un buen manual sobre ello. Algunos que he visto valen demasiado dinero y mi economia no está muy bien ahora, pero todo se andará.


----------



## Deivid

Tengo otra pregunta sobre la macro. ¿Porqué ponen el mismo codigo en el Modulo y en Thisworkbook?
¿Y donde aparece el Codigo del CommandButton1, podría utlizar un cuadro dibujado y asignarle la macro?
Gracias


----------



## Deivid

Perdonen, ya he visto donde está el código del CommandButton1, es el del UserForm1. Lo siento.
Ocurre un error si ejecuto el UserForm1 y en lugar de introducir un codigo, le doy a "validar password" con el textbox Vacío, me sale este error:
"Se ha producido el error 13 'en tiempo de ejecucion', no coinciden los tipos"
y me lleva aqui
Private Sub CommandButton1_Click()
Dim pass As Integer
-->> pass = CInt(TextBox1.Value)[/COLOR]
check pass

End Sub


----------



## galileogali

Si, es cierto, omiti esa posibilidad, puedes modificar el codigo del procedimiento CommandButton1_clik() por este



		Code:
__


Private Sub CommandButton1_Click()
Dim pass As Integer
Dim bckCText As Long


If TextBox1.Value = Empty Then
MsgBox "Tiene que indicar alguna clave antes de validarla", vbSystemModal + vbCritical, "Ingresar Clave"

bckCText = TextBox1.BackColor
TextBox1.BackColor = RGB(255, 0, 0)
Application.Wait Now + TimeValue("00:00:01")
TextBox1.BackColor = bckCText
TextBox1.SetFocus

Exit Sub
Else
pass = CInt(TextBox1.Value)
check pass
End If

End Sub



Encontraras en mi Blog, el archivo con la modificacion, en el mismo Link, donde figuraba el anterior


----------



## Deivid

Tengo esta macro:

Option Explicit

Sub check()
    Dim valCheck As Integer, passCheck As Integer

    passCheck = 2299

    valCheck = Application.InputBox(prompt:="Ingrese el código de 4 dígitos", Type:=1)


    If valCheck = passCheck Then
        With Cells(ActiveCell.Row, 36)
            .Value = "REVISADO"
            .Font.ColorIndex = 50
            .Font.Bold = True
        End With
    Else
        Exit Sub
    End If

End Sub

El passcheck por defecto es 2299. Como puedo hacer para que al introducir cada digito aparezca un asterisco?


----------



## Greg Truby

Actualmente lo que hago yo es que tengo un módulo de formulario que implementé como un módulo de clase donde importo el módulo y pongo la contraseña en el TAG del formulario y zás, ya tenés todo lo necesario.  Cuando tengo tiempo pondré más sobre cómo hacer algo asi.  Pero realmente hay que gatear antes de correr, ¿no?


----------



## galileogali

Respecto a la Duplicacion de codigo en Modulo1 y Thisworkbook: se trata de un error de mi parte, basta con el codigo que esta en el Modulo


----------



## Juan Pablo González

Este codigo es viejo, pero siempre me funciono muy bien:

http://www.mrexcel.com/forum/showthread.php?t=43144&highlight=password+inputbox

(La respuesta de DK es de la que estoy hablando...)


----------



## Deivid

Gracias Juan Pablo. Otra cuestion... Para que en los commandbuttons acepte el primer click del raton o el pulsar tan solo una vez el Enter, que propiedad tengo que cambiarle?
gracias


----------



## Juan Pablo González

Eh, ninguna? A mi me funciona como un InputBox normal, en que puedo escribir algo y presionar Enter para aceptar, o Esc para cancelar.


----------

