Programación

Vamos a analizar distintos códigos de VBA para Office y poder sacarles el máximo rendimineto.

Contraseña UserForm Excel (PassWord-UserForm)

(PassWord-UserForm)

¿Cuántas veces hemos necesitado que al abrir un archivo de Excel nos pidiera introducir alguna clave o contraseña sin que esta se vea?

En este artículo te vamos a mostrar como puedes realizarlo:

Desarrollo Archivo de Excel

El archivo esta formado por lo siguiente →

1 Un formulario

Private Sub UserForm_Activate()
Dim miFormulario AsLong, Estilo As Long
Me.SpecialEffect = fmSpecialEffectSunken
miFormulario = BuscarVentana("Thunder" & _
IIf(Val(Application.Version) < 9, "X", "D") & "Frame", Me.Caption)
Estilo = ObtenerVentana(miFormulario, (-16))
Estilo = Estilo And Not &HC00000
EstablecerVentana miFormulario, (-16), Estilo
MostrarVentana miFormulario, 5
End Sub


Private Sub TextBox1_KeyDown( _
ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Or KeyCode = vbKeyEscape Then Unload Me
End Sub


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = CloseMode = vbFormControlMenu
End Sub


Private Sub UserForm_Terminate(): Respuesta = TextBox1: End Sub

2 Dos Módulos Estándar

Módulo Basics →

Public Const Clave As String = "Abracadabra"
Public Respuesta As String
Sub Ask4Password()
  Application.EnableCancelKey = xlErrorHandler
  On Error GoTo Ver_Error
  PassWord.Show
  MsgBox "La respuesta ha sido:" & vbCr & _
    IIf(Respuesta = Clave, "C", "Inc") & "orrecta !!!", , ""
Ver_Error:
  If Err = 18 Then Resume
End Sub

Módulo CallCenter→

 Option Private Module
Declare Function BuscarVentana Lib "user32" Alias "FindWindowA" ( _
  ByVal Clase As String, ByVal Ventana As String) As Long
Declare Function ObtenerVentana Lib "user32" Alias "GetWindowLongA" ( _
  ByVal Ventana As Long, ByVal Indice As Long) As Long
Declare Function EstablecerVentana Lib "user32" Alias "SetWindowLongA" ( _
  ByVal Ventana As Long, ByVal Indice As Long, ByVal NuevoEstilo As Long) As Long
Declare Function MostrarVentana Lib "user32" Alias "ShowWindow" ( _
  ByVal Ventana As Long, ByVal Comando As Long) As Long

3 Evento Open del libro

Private Sub Workbook_Open()
Ask4Password
Me.IsAddin = False: Me.Saved = True
End Sub

Cuando abrimos el archivo de ejemplo de Excel nos mostrará lo siguiente →

Un formulario donde debemos de introducir la contraseña, password o clave que le hemos asignado (Ver Clave en el Módulo Basics )

Si la contraseña es correcta:

Si la contraseña es incorrecta:

Como es un archivo de ejemplo de Excel, tanto que le demos la clave correcta como que la introduzcamos incorrecta, se nos mostrara la ventana del libro. Esto es debido a que el libro esta grabado con la propiedad IsAddin establecida en True (esto causa que su ventana no sea mostrada) luego de "pasar" por entrar la clave (correcta o no) esta propiedad se regresa a False (se muestra la ventana del libro), (obviamente) habría que agregar instrucciones para que siempre se guarde con esta propiedad en True (u otros trucos).

  • El formulario se muestra SIN titulo y su alto esta recortado en tiempo de diseño. (Ver código formulario que hace llamada a la API que se encuentra en el Módulo CallCenter )
  • No vamos a poder arrastrar el formulario por la pantalla...
  • Como tampoco vamos a poder cancelar su ejecución ni con {Alt}+{F4} ni con {Ctrl}+{Break}
  • ... de momento ...podemos escapar del formulario con {enter}o{esc}
  • Y el resto.... para que vosotros mismos lo podáis investigar

Descarga del archivo de Excel

 PassWordUserForm (12,1 kB)

 

Imprimir