H o l a:
Crea un formulario con los botones que necesitas, en este ejemplo, voy a crear el formulario con 3 botones:
El código de este formulario. Observa como en la sección de declaraciones tengo declaradas como públicas las variables que van a recibir los parámetros:
Public titulo, mensaje, txtboton1, txtboton2, txtboton3
'
Private Sub CommandButton1_Click()
'Por Dante Amor
respuesta = "boton1"
Unload Me
End Sub
'
Private Sub CommandButton2_Click()
'Por Dante Amor
respuesta = "boton2"
Unload Me
End Sub
'
Private Sub CommandButton3_Click()
'Por Dante Amor
respuesta = "boton3"
Unload Me
End Sub
'
Private Sub UserForm_Activate()
Me.Caption = titulo
Label1.Caption = mensaje
CommandButton1.Caption = txtboton1
CommandButton2.Caption = txtboton2
CommandButton3.Caption = txtboton3
DoEvents
End Sub
En un módulo pon la siguiente función:
Function NuevoMsgBox(tit, men, txtb1, txtb2, txtb3)
'Por.Dante Amor
With UserForm1
.titulo = tit
.mensaje = men
.txtboton1 = txtb1
.txtboton2 = txtb2
.txtboton3 = txtb3
.Show
End With
NuevoMsgBox = respuesta
End Function
En otro módulo o en un procedimiento dentro de otro formulario, pon el siguiente código, observa como al inicio de toda la macro, en la sección de declaraciones tiene que ir la variable respuesta:
En esa variable respuesta se almacenará el resultado del botón que hayan presionado:
Public respuesta
'
Sub MacroX()
'Por.Dante Amor
tit = "Prueba de un nuevo msgbox"
men = "Selecciona uno de los botones"
txtb1 = "Para imprimir"
txtb2 = "Enviar a PDF"
txtb3 = "Cancelar"
LaRespuesta = NuevoMsgBox(tit, men, txtb1, txtb2, txtb3)
Select Case LaRespuesta
Case "boton1"
'instrucciones
MsgBox "Se inicia impresión"
Case "boton2"
'instrucciones
MsgBox "enviar a pdf"
Case "boton3"
'instrucciones
MsgBox "Proceso cancelado"
End Select
End Sub
Cuando ejecutas la MacroX, a su vez ejecuta la Function NuevoMsgBox con los parámetros que necesites. La Fuction NuevoMsgBox se va a encargar de abrir el Userform1 y le va a pasar los parámetros para que se vea así:
Cuando presionas uno de los botones, se envía de regreso la respuesta con el botón que se presionó, por ejemplo si presionas el primer botón:
respuesta = "boton1"
Unload Me
La variable respuesta es igual a "boton1", se cierra el formulario y le regresa el control a la Function NuevoMsgBox.
La Function NuevoMsgBox termina y también regresa el valor de la variable respuesta en esta instrucción:
NuevoMsgBox = respuesta
Ya en la MacroX( ) revisas el contenido de la variable respuesta y decides que instrucciones son las que deben continuar.
':)
':)