Utilizar variables de un UserForm en otro UserForm - Excel

Llevo un par de días con un problema que no puedo solucionar. Tengo un Formulario(UserForm2) en excel que me permite realizar varias acciones con varios botones. Uno de dichos botones me permite acceder a otro Formulario(UserForm3) para ingresar una contraseña y así acceder a otro Formulario(3) con más botones y más acciones. En este me gustaría incluir un botón para poder cambiar la contraseña del Formulario(Advanced_users).

Para que quede un poco más claro

En el Formulario(1) tengo un botón llamado Advanced_users con este código

Private Sub Advanced_users_Click()
UserForm3.Show
End Sub

El Formulario(UserForm3) tiene esta estructura

Con un Textbox(Textbox2) y un botón(Accept_AU). Al apretar el botón accept salta este código

Public Sub Accept_AU_Click()
Dim contra As String
Dim contrasena As String
contra = "1234"
contrasena = TextBox2.Value
If contrasena = contra Then
UserForm3.Hide
Userform2.Hide
Advanced_form.Show
Else
MsgBox ("Wrong password")
End If

Si la contrasena es la correcta se cerrarán todos los Formularios abiertos y se abrirá el Formulario(Advanced_form).

Bien, me gustaría que en este Formulario(Advanced_form) hubiera un boton que me permitiera cambiar la variable contra definida en el Formulario anterior(Userform3) y que además fuera permanente.

He intentado mil cosas, cambiando los ámbitos de las variables, también poniéndolas en módulos, etc, pero sin resultado. ¿Alguna idea?

La idea general sería desde un formulario acceder a otro formulario introduciendo una contraseña. Y despues en este otro formulario poder cambiar la contrasena de acceso a este mismo formulario.

Mil

1 respuesta

Respuesta
2

H o l a : Para cambiar el valor de la variable contra, tendrías que poner el valor en otro lado, por ejemplo en una celda, si pones el valor en el código del formulario no podrás cambiarlo.

Cambia esta línea:

contra = "1234"

Por esta:

contra = sheets("variables"). Range("D5")

Tendrías que crear una hoja donde almacenarás las variables, por ejemplo, una hoja llamada "variables" y en la celda "D5" pondrías la clave.


Después en tu formulario que solicita el cambio de contraseña, tendrías que tener algo como esto:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    If TextBox1 = "" Then
        MsgBox "Introduce una clave nueva"
        TextBox1.SetFocus
        Exit Sub
    End If
    Sheets("variables").Range("D5") = TextBox1
    MsgBox "Contraseña cambiada con éxito", vbInformation
    Unload Me
End Sub

De esa forma puedes cambiar la contraseña, de hecho, la mejor forma para almacenar las contraseñas es una base de datos, en este caso en una hoja de excel, de esa forma las puedes validar y cambiar.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Gracias Dante,

Se me olvido mencionar en el post que estoy intentando evitar guardar las variables en el libro, me gustaría que se quedaran en el código. Pero por más que leo, me parece que eso va a ser imposible.

Gracias de todos modos.

Cuando guardas un dato en el código del programa, se llama código "duro"; se denomina de esa manera porque no es posible cambiarlo durante la ejecución.

Si no quieres guardarlo en el libro, lo puedes guardar en un archivo txt, entonces el archivo txt, siempre tendrá que estar en la misma carpeta donde tienes el libro. El dato guardado en el archivo txt lo puedes encriptar; y cuando lo leas, tendrás que desencriptarlo; pero eso es otro tema. Como te comenté, la mejor práctica para almacenar claves, es en una base de datos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas