bueno después de elaborar todo el mensaje al ir a añadir el código de ejemplo, se ha ido todo ahacer puñetas, la ventana se ha colgado, no sé porqué....
Como no me patece repetir el mensaje... te pongo el código y 4 breves indicaciones, si tienes dudas luego haces las preguntas que consideres...
Este código va en un módulo....
Public Enum MisUsuarios
Admin = 0
Ramon = 1
Juan = 2
Maria = 3
Andres = 4
Violeta = 5
End Enum
Public MivariableGlobalDeEjemplo As Integer
' estas variables no deben ser accesibles al usuario
Public salir As Boolean ' sale un usuario, no se cierra la aplicación.
Public Cerrar As Boolean
Public usuario As MisUsuarios
Public Sub main()
Dim mdi As MDIForm
Form1.Caption = "Panel del administrador..." ' allí hay un botón tal que su código es cerrar=true
Form1.Show 1 ' formulario del administrador.... el administrador arranca la aplicación, cuando ciere su
' ventana puede entrar otro usuario ...
Siguiente:
Call ResetVariables 'aquí llamamos a un procedimiento que restablece las variables al valor deseado como inical...
usuario = (usuario Mod 5) + 1 ' garantiza que rota entre usuarios pero no regresa al admin
' en vez de usarse un usuario tras ootro aquí debería mostrarse una ventana de login...
Set mdi = Nothing
Set mdi = New mFrm1
mdi.Show
Do
DoEvents
Loop While salir = False
salir = False
If Cerrar = False Then GoTo Siguiente
' al llegar aquí se cierra la aplicación, definitivamente, para ello sólo el admin debería acceder a cambiar el valor de salir
' entrando en su panel de administrador
'end ' sólo cuando no haya tareas pendientes... en este caso no las hay pero al salir de main termina la aplicación, no necesitamos end.
End Sub
Public Function getNombreUsuario(ByVal numero As MisUsuarios) As String
Select Case numero
Case 0
getNombreUsuario = "Administrador "
Case 1
getNombreUsuario = "Ramón "
Case 2
getNombreUsuario = "Juan "
Case 3
getNombreUsuario = "María "
Case 4
getNombreUsuario = "Andrés "
Case 5
getNombreUsuario = "Violeta "
End Select
End Function
Public Function ResetVariables()
MivariableGlobalDeEjemplo = 25
' ....
End Function
Este otro código va en el formulario MDI
Public VariableDeEjemploReseteadaTrasCerrarMDI As String
Private Sub MDIForm_Load()
Me.Show
' centrado a lo ancho, arriba, 2/3 del ancho de pantalla y 2/3 del alto de pantalla
Me.Move (Screen.Width - Me.Width) / 2, 0, (Screen.Width / 3) * 2, (Screen.Height / 3) * 2
Me.Move (Screen.Width - Me.Width) / 2, 0
Me.Caption = "El usuario: " & getNombreUsuario(usuario) & "tiene su ventana de aplicación lista..."
End Sub
Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Unload Me
salir = True
End Sub
Private Sub mnuMDI_Click(Index As Integer)
MsgBox "valor actual de la variable interna del form MDI: " & VariableDeEjemploReseteadaTrasCerrarMDI
VariableDeEjemploReseteadaTrasCerrarMDI = InputBox("Modifica el texto y luego cierra la aplicación, volverá a resurgir como el ave Fénix, con los valores de este form reseteados y con los valores globales restablecidos desde la función al efecto...", "Cambiamos el valor de la variable ahora...", VariableDeEjemploReseteadaTrasCerrarMDI)
End Sub
Private Sub mnuVariables_Click(Index As Integer)
MsgBox "el valor actual de la variable 'MivariableGlobalDeEjemplo', es: " & MivariableGlobalDeEjemplo
Select Case Index
Case 0
MivariableGlobalDeEjemplo = 20
Case 1
MivariableGlobalDeEjemplo = 30
Case 2
MivariableGlobalDeEjemplo = 99
End Select
MsgBox "El valor de 'MivariableGlobalDeEjemplo', que se resetea tras cada reinicio del MDI ha cambiado al valor: " & MivariableGlobalDeEjemplo
End Sub
Para recrear correctamente el proyecto, crea un nuevo proyecto, añade un módulo y un formulario MDI, luego cambia en las porpiedades del proyecto para que arranque desde main. el formulario MDI renómbralo a mFrm1
Éste lleva 2 menús, el 1º tiene 3 submenús, el 2º sólo tiene un submenú....
El bucle principal realiza en este orden:
a ) restablecer las variables globales.... llamando a una rutina
b ) loguear al usuario... en el ejemplo el loguin es simulado, (no forma parte del problema)
c ) resetear el estado del formulario MDI (o mantener el estado actual)...
Si necesitas detalles o explicaciones adicionales, realiza las preguntas oportunas...
Incluyo un archivo comprimido que puedes descargar si no quieres teclear...