Perdona por el post anterior pero es que se me colgó el ordenador por una perdida de energía eléctrica. Ahora si. Vamos a ello despacio. Para tu primera pregunta. He creado diferentes campos más y botones para que funcione el form como tu quieres, es decir, a parte de los dos textbox y el commandbutton que tu tienes, tengo un botón para salir del form y otro para validar al usuario. También he añadido un campo de texto para controlar los intentos y una etiqueta de información de usuario. Dicho esto, introduce este código dentro del form:
Option Explicit
Private Sub B_SALIR_Click()
Dim n As Byte
n = Workbooks.Count
If n = 1 Then
Application.Quit
Else: ThisWorkbook.Close savechanges:=False
End If
End Sub
Private Sub B_VALIDAR_Click()
'cambia el nombre literal de Hoja1 por la que contiene los usuarios y contraseñas
Const acceso = "Hoja1"
'cambia el nombre de la celda por donde empiezan los ususarios si fuera distinto
Const users = "A1"
Dim nombre As String, hoja As String
Dim i As Integer, r As Integer, c As Integer
Application.ScreenUpdating = False
If user.Value = "" Then
MsgBox "No se ha introducido ningún usuario. Vuelva a intentarlo"
Exit Sub
End If
'asigno la variable hoja a la actual el libro para luego regresar
hoja = ActiveSheet.Name
'asigno a la variable nombre el captado en el textbox de usuario
nombre = user.Value
'me posiciono en la hoja de acceso y la primera celda de usuarios
Sheets(acceso).Select
Range(users).Select
'inicio variables
i = 0
r = ActiveCell.Row
c = ActiveCell.Column
'compruebo si existe el usuario introducido
Do While nombre <> Cells(r + i, c).Value And Cells(r + i, c).Value <> ""
i = i + 1
Loop
If Cells(r + i, c).Value = nombre Then
B_ENTRAR.Enabled = True
password.Enabled = True
intentos.Value = 3
user.Locked = True
B_VALIDAR.Enabled = False
info_user.Caption = "Usuario encontrado"
info_user.ForeColor = &HFF00&
password.SetFocus
Else:
info_user.Caption = "Usuario no encontrado"
info_user.ForeColor = &HFF&
End If
Sheets(hoja).Select
Application.ScreenUpdating = True
End Sub
Private Sub B_ENTRAR_Click()
'cambia el nombre literal de Hoja1 por la que contiene los usuarios y contraseñas
Const acceso = "Hoja1"
'cambia el nombre de la celda por donde empiezan los ususarios si fuera distinto
Const users = "A1"
Dim pass As String, nombre As String
Dim i As Integer, r As Integer, c As Integer
Dim k As Byte
Application.ScreenUpdating = False
If password.Value = "" Then
MsgBox "No se ha introducido ninguna contraseña. Vuelva a intentarlo"
Exit Sub
End If
nombre = user.Value
'asigno a la variable pass el captado en el textbox de password
pass = password.Value
'me posiciono en la hoja de acceso y la primera celda de usuarios
Sheets(acceso).Select
Range(users).Select
'inicio variables
i = 0
k = intentos.Value
r = ActiveCell.Row
c = ActiveCell.Column
'busco la posición del usuario
Do While nombre <> Cells(r + i, c).Value
i = i + 1
Loop
'compruebo si la contraseña es correcta: columna password es usuario + 1
pass = Cells(r + i, c + 1).Value
If password.Value = pass Then
B_ENTRAR.Enabled = False
password.Enabled = False
intentos.Value = ""
user.Locked = False
B_VALIDAR.Enabled = True
'instrucciones correspondientes tras comprobar que es correcta la password
Unload UserForm1
Else:
k = k - 1
intentos.Value = k
Select Case k
Case Is = 2
MsgBox "Contraseña errónea." & vbCrLf & "Le quedan 2 intentos.", vbOKOnly + vbExclamation
password.Value = ""
Exit Sub
Case Is = 1
MsgBox "Contraseña errónea." & vbCrLf & "Le queda 1 intento.", vbOKOnly + vbExclamation
password.Value = ""
Exit Sub
Case Is = 0
k = Workbooks.Count
If k = 1 Then
Application.Quit
Else: ThisWorkbook.Close savechanges:=False
End If
End Select
End If
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_Activate()
If B_VALIDAR.Enabled = False Then
B_VALIDAR.Enabled = True
End If
If user.Locked = True Then
user.Locked = False
End If
B_ENTRAR.Enabled = False
password.Enabled = False
info_user.Caption = ""
info_user.ForeColor = &H80000012
intentos.Value = ""
user.SetFocus
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
End Sub
Ahora para que salte el form nada más abrir el libro mete este código en el objeto de ThisWorkbook del proyecto
Private Sub Workbook_Open()
UserForm1.Show
End Sub
Debes tener en cuenta que antes de que se empiece a ejecutar el código, se muestra una de las hojas del libro, es decir, que la hoja de incio tienes que colocar una que no sea la de usuarios y password.
Para la segunda cuestión, sigue estos pasos. Entra en el proyecto y selecciona una hoja que quieras ocultar. A continuación vete a la ventana de propiedades y centrate en la opción visible. Bien aquí tienes dos posibilidades. Si la pones en 0-hidden alguiene que sepa como mostrar las hojas a través de las pestañas de las hojas podrá visualizarlas pero si eliges la opción 2-veryhidden, solo podrán volverse visibles a través del proyecto con lo que ocultándolas tu mismo y una clave de acceso al proyecto, solo tu podrás acceder a éstas hojas ocultas.