Ayuda Excel...Macro.

Hola, tengo dos dudas, la 1ra es: Tengo un Userform que abre apenas habilite las macro, este tiene dos textbox (usuario y contraseña), y un commandbuton, Necesito que me valide el usuario y la contraseña asignada a cada usuario que están en una hoja de excel desde la celda a1 (usuario1) en b1(contraseseñadelusuario1), a2 (usuario2) en b2(contraseseñadelusuario2), asi sucesivamente, pero necesito que me valide tal cual esta escrito el usuario y la contraseña. Si la información escrita es correcta que me abra el libro si no que salga un texto informativo diciendo que la información es errónea intente de nuevo , pero después de 3 veces de intentar se cierre el libro....

Y mi otra duda es que si se puede deshabilitar y en lo posible que no se muestre las pestañas de excel tales como: revisar, datos, vista, formulas,inicio, insertar, diseño de pagina (es excel 2007).... Es que estoy creando una especie de programa presupuestal y necesito que no se vean estas pestañas , ya que cualquier persona puede ir y desbloquear la hoja y alterar la información... GRACIAS....CAMILO SALUDOS...

1 Respuesta

Respuesta
1

Haber si esto te val

??? como ???

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.

He detectado un fallo en uno de los procedimientos. Cambia el código anterior por este sino jamás se cerrará el formulario:

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

Tengo problemas con este código en el segundo renglón dice error 424 - se requiere objeto:

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

Te agradezco....gracias camilo ..

Este error a que el objeto en cuestión es "inexistente" puede ser por varias razones aunque principalmente sean:

- Que al botón de comando no le hayas llamado por su nombre (B_VALIDAR)

- Que el nombre del formulario sea distinto con el que yo he trabajado

Si te sirve te voy a decir con que objetos he trabajado (nombre literal):

Textbox, s: user, password e intentos

Botones de comando: B_VALIDAR, B_SALIR y B_ENTRAR

Label: info_user

Formulario: UserForm1

Si estás utilizando estrictamente mi código, deberás cambiar el nombre a los objetos o sino deberás adaptar éste al nombre de tus objetos.

Hola, buenos días, primeramente gracias por la primera solución es excelente ya me funciona perfectamente, en cuanto a la segunda quizás no me hice entender... que pena por tantas molestias, pero es que lo que yo quiero es lo siguiente:

-En la parte superior del excel a la hora que yo abro un archivo me aparecen unas pestañas, que si uno habilita la de programador se muestra, pero entonces yo deseo que estas no se muestren o que simplemente se deshabiliten...si se puede??

Gracias de todas formas por la solución que me diste me sirvió para ocultar unas hojas claves en mi proyecto.....

Saludos. camilo

Vamos a por la última. Lo que quieres es ocultar los menús predeterminados de Excel. Pues bien añade esta línea a algún sub de arranque de los que tengas.

ExecuteExcel4Macro ("show.toolbar(""ribbon"", 0)")

Con esta línea de código, ocultarás la barra de menús pero ten muy en cuenta que deberás tener botones de comando para moverte por el libro y muchisimo más todavía de que cuando cierres Excel, devuelvas el ribbon con

ExecuteExcel4Macro ("show.toolbar(""ribbon"", 1)")

Sino, cada vez que abrás excel, no tendrás los menús de Excel.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas