VBA: abre un formulario con información de tu último acceso
21/04/2023VBA: Debug.print. ¿Conocido por todos?
25/04/2023¿Qué vamos a ver en esta clase?
Si algo caracteriza a la programación orientada a objetos, OOP por sus siglas en inglés, aunque también podemos encontrar la denominación POO, es la posibilidad de manejar esos objetos a placer por el programador. Para este cometido se inventaron las clases.
Por alguna extraña razón, muchos programadores de Access no utilizan las clases, bien por desconocimiento, bien por pereza a aprender algo nuevo, bien porque consideran que son demasiado complicadas.
Lo que haremos es un formulario de mensaje que abarque todas las posibilidades que precise mi programa. Para poder hacerlo necesito definir cuatro tipos de mensajes:
- Mensajes críticos para informar al usuario de errores
- Mensajes informativos que contienen información relevante para el usuario
- Mensajes exclamativos para poner algo de énfasis en lo que se pretende transmitir al usuario
- Mensaje pregunta para solicitar algo del usuario
Es evidente, que cada uno de estos tipos de mensajes contendrán elementos diferentes.
También voy a prepararlo para que los botones de comando sean configurables:
Aceptar/Cancelar
Si/No
Aceptar
El código que te mostramos a continuación corresponde la módulo de clase: clsMsgBoxPersonalizado
Crea un nuevo módulo de clase y pega el siguiente código en él.
Para ejecutar la clase dispones de un procedimiento-test en la cabecera del código.
Option Compare Database Option Explicit '----------------------------------------------------------------------------------------------------------------------------------------------- ' Fuente : https://access-global.net/msgbox-personalizado/ ' Clase magistral '----------------------------------------------------------------------------------------------------------------------------------------------- ' Título : clsMsgBoxPersonalizado ' Autor original : Luis Viadel | luisviadel@cowtechnologies.net ' Propósito : crear una clase para manejar un mensaje personalizado para mostrar todos los mensajes de la aplicación ' Mas información : Partiendo del formulario MsgBoxPersonalizado y sus objetos, se establecen 4 tipos diferentes de mensaje y 3 tipos de ' combinaciones de botones. ' Tipos: ' 1. Exclamation ' 2. Critical ' 3. Question ' 4. Information ' Botones: ' 1. Aceptar / Cancelar ' 2. Sí/no ' 3. Aceptar '----------------------------------------------------------------------------------------------------------------------------------------------- 'Test: : Para adaptar este código en tu aplicación puedes basarte en este procedimiento test. Copiar el bloque siguiente al ' portapapeles y pega un módulo estándar. Descomenta la línea que nos interese y pulsa F5 para ver su funcionamiento. ' 'Sub clsMsgBoxPersonalizado_test() 'Dim cPerson As New clsMsgBoxPersonalizado 'Dim msgCabecera As String, msgTxt As String ' ' msgCabecera = "Cabecera de mensaje" ' msgTxt = "Este es un mensaje personalizado" ' ' With cPerson ' .Initialize 2, 3, msgCabecera, msgTxt ' End With ' 'End Sub '----------------------------------------------------------------------------------------------------------------------------------------------- Private ObjCab As Access.Label Private Objmsg As Access.TextBox Private ObjCuadro01 As Access.Rectangle Private ObjCuadro02 As Access.Rectangle Private ObjBtn01 As Access.CommandButton Private ObjBtn02 As Access.CommandButton Private ObjIcon As Access.image Public Sub Initialize(msgTipo As Integer, msgButton As Integer, msgCabecera As String, msgTxt As String) DoCmd.OpenForm "MsgBoxPersonalizado", acNormal, , , , acHidden 'Cabecera Set ObjCab = Form_MsgBoxPersonalizado.msgCabecera With ObjCab .BackColor = -1 'Transparente .ForeColor = vbWhite .Caption = msgCabecera End With Set ObjCab = Nothing 'Texto del mensaje Set Objmsg = Form_MsgBoxPersonalizado.msgTxt With Objmsg .value = msgTxt .BackColor = -1 .ForeColor = RGB(40, 40, 40) ' .FontSize = 10 End With Set Objmsg = Nothing 'Cuadro de cabecera Set ObjCuadro01 = Form_MsgBoxPersonalizado.msgCuadro01 With ObjCuadro01 Select Case msgTipo Case 1 'Exclamation .BorderColor = RGB(231, 164, 0) .BackColor = RGB(231, 164, 0) Case 2 'Critical .BorderColor = RGB(193, 21, 25) .BackColor = RGB(193, 21, 25) Case 3 'Question .BorderColor = RGB(84, 130, 189) .BackColor = RGB(84, 130, 189) Case 4 'Information .BorderColor = RGB(73, 114, 215) .BackColor = RGB(73, 114, 215) End Select End With Set ObjCuadro01 = Nothing 'Cuadro del cuerpo Set ObjCuadro02 = Form_MsgBoxPersonalizado.msgCuadro02 With ObjCuadro02 Select Case msgTipo Case 1 'Exclamation .BorderColor = RGB(231, 164, 0) Case 2 'Critical .BorderColor = RGB(193, 21, 25) Case 3 'Question .BorderColor = RGB(84, 130, 189) Case 4 'Information .BorderColor = RGB(73, 114, 215) End Select End With Set ObjCuadro02 = Nothing 'Botón 01 Set ObjBtn01 = Form_MsgBoxPersonalizado.btn01 With ObjBtn01 Select Case msgButton Case 1 'Aceptar .BackColor = RGB(193, 21, 25) .BorderColor = RGB(193, 21, 25) .PressedColor = RGB(186, 20, 25) .PressedForeColor = RGB(193, 15, 18) .FontSize = 9 .Caption = "Aceptar" .Width = 960 Case 2 .Caption = "Sí" .Width = 540 .Move Left:=(Form_MsgBoxPersonalizado.btn01.Left + 800) Case 3 Form_MsgBoxPersonalizado.btn02.SetFocus .Visible = False End Select End With Set ObjBtn01 = Nothing 'Botón 02 Set ObjBtn02 = Form_MsgBoxPersonalizado.btn02 With ObjBtn02 Select Case msgButton Case 1 .FontSize = 9 .Caption = "Cancelar" .Width = 960 Case 2 .Caption = "No" .Move Left:=(Form_MsgBoxPersonalizado.btn02.Left + 400) .Width = 540 Case 3 .BackColor = RGB(60, 102, 155) .BorderColor = RGB(60, 102, 155) .PressedColor = RGB(134, 167, 208) .PressedForeColor = RGB(40, 68, 124) End Select End With Set ObjBtn02 = Nothing 'Icono del mensaje Set ObjIcon = Form_MsgBoxPersonalizado.msgIcon With ObjIcon Select Case msgTipo Case 1 .Picture = Application.CurrentProject.Path & "Exclamation.png" Case 2 .Picture = Application.CurrentProject.Path & "Critical.png" Case 3 .Picture = Application.CurrentProject.Path & "Question.png" Case 4 .Picture = Application.CurrentProject.Path & "Information.png" End Select End With Set ObjIcon = Nothing 'Mostramos el formulario Form_MsgBoxPersonalizado.Visible = True End Sub
Además de todo el código anterior, en el ejemplo que te puedes descargar encontraras otros módulos en los que declaramos todas las variables o agrupamos todas las funciones de apoyo.
Por último, te adjuntamos el ejemplo en Access para que te lo puedas descargar y utilizar en tus aplicaciones.
MsgBox personalizado
Créditos:
Imagen presentación: Mensaje en una botella by Atlantios | Pixabay
Iconos thenounproject
Música: Admiral Bob | Dig ccmixter