INPUTBOX y MSGBOX en detalle

La función InputBox(…), que permite el ingreso de datos, la hemos usado solo con una opción.

Su Sintaxis:

NomVar = InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[Context])

donde
Prompt … Es el mensaje que deseamos se lea al ingresar el dato
Title … Podemos cambiar el título de la ventana ingresando un texto
Default … Si deseamos ingresar un valor por omisión, podemos digitar en este argumento
XPos, YPos … Son la coordenadas del inicio superior izquierdo de la ventana. Está en pixels
HelpFile, Context … Podemos colocar el nombre del archive ayuda y la sección del mismo.

Nota:
Si un argumento no va a ser usado y el siguiente sí, se debe colocar una coma indicando la reserva del parámetro no usado.
 

Sintaxis del MsgBox

Cad = MsgBox(Prompt, [Buttons As VbMsgBoxStyle=vbOKOnly], [Title])
 

Cuando se añaden otros argumentos, MsgBox se toma como una function que devuelve un valor que constituyen las constantes del Excel (Estas constantes son aquellas que empiezan con vb)

Prompt … Es el mensaje ya usado
Buttons … Nombre de una constante del Excel a ser usado y cuyo valor lo recibirá la variable Cad.

Ejemplos Dato = InputBox(“Hola”,”Entrada de datos”,,6600,3200)
Titulo de la ventana: Entrada de datos. Mensaje que contiene: Hola. Posición inicial: (6600,3200)

Cad = MsgBox(“Valor: “ & NomVar,VbYesNo,”Emisión de resultados”)

Ahora vamos a desarrollar algunos ejemplos sencillos para terminar uno que maneja cadenzas y usa constantes en MsgBox para terminar.

Primer ejemplo

En este caso sólo vamos a usar la function InputBox(…)
Vamos a ingresar una cadena de datos, lo guardamos en otra cadena, se pide datos en una posición determinada de la pantalla

Sub EntradaSalida01()
'
Dim C, Cadena As String
Cadena = ""
' El siguiente es un INputBox común y simple
C = InputBox("Ingresa el dato.")
While Trim(C) <> ""
Cadena = Cadena + " " + C
' Observe que lo ingresao se añade a lo leido anteriormente, separándolo con espacio en blanco
' El Siguiente INputBox permite el manejo de la ventana del InputBox
C = InputBox("Para terminar, presiona o Clic en ", "Ventana de ingresa de datos", , 10000, 5000)
Wend

' Este el el MsgBox común y simple
MsgBox ("La cadena leída es: " & Cadena)
' En lugar de "&" se puede usar "+" cuando se trate de dos o má cadenas de caracteres

End Sub

Segundo ejemplo

En este caso dejamos de mover la posición de la ventana

Sub EntradaSalida02()
'
Dim C, Cadena As String
Cadena = ""
' El siguiente es un INputBox común y simple
C = InputBox("Ingresa el dato.")
While Trim(C) <> ""
' El caracter 13 es quiebre de línea.
Cadena = Cadena + Chr(13) + C
C = InputBox("Para terminar, presiona o Clic en ", "Ventana de ingresa de datos")
Wend

MsgBox ("La cadena leída es: ")
MsgBox (Cadena)

End Sub

Tercer ejemplo

El siguiente ejemplo usa el caracter de control 13 con, CHR(13). Este caracter, inicialmente usado en cel control de carro de una impresora, en nuestro caso permite pasar a la siguiente línea y continuar “imprimiendo” lo que corresponde.

En este ejemplo lo usaremos tanto en INputBox como en MsgBox.

Sub EntradaSalida03()
'
Dim C, Cadena As String
Cadena = ""
' Vamos a ingresar una lista de amigos y luego lo emitimos en pantalla
C = InputBox("Datos: Apellidos, una coma y luego los nombres")
While Trim(C) <> ""
Cadena = Cadena + Chr(13) + C

' Observe cómo al tener una instrucción más de 80 caracteres, podemos cortarla
' para continuar en la siguiente línea como si nada hubiera pasado. Para ello, se déjà un espacio en blanco y se digita el guión bajo. Vea la siguiente instrucción.

C = InputBox("Datos: Apellidos, una coma y luego los nombres." + Chr(13) + Chr(13) + _
"Para terminar, presiona o Clic en ", "Ventana de ingresa de datos")
Wend

MsgBox ("La cadena leída es: ")
MsgBox (Cadena)

End Sub

Cuarto ejemplo

En este caso vamos a usar las constantes de control del MsgBox. El Excel usa muchas constantes para desarrollar las acciones que nosotros le indicamos. En el caso del VBA estas constantes tienen por nombre que se inicia con vbXXX, como vbYes que tiene 1 como valor, vbNo tiene 2 como valor, etc.

El siguiente procedimiento usa algunas de esas variables. Se usa MsgBox para imprimir los valores de dichas constantes, como resultado de haber hecho clic en el botón correspondiente.

Sub Salida01()

Cadena = ""
Led = MsgBox("¿Desea continuar?:", vbOKCancel)
' vbOKCancel tiene dos valores: Si hizo clic en Ok, Led = 1. Si se usó Cancel, Led = 2
MsgBox Led
Led = MsgBox("Desea continuar?", vbYesNo) ' Esta devuelve 6 por Yes y 7 cuando se hace clic en Cancel
MsgBox Led
Led = MsgBox("Desea continuar?", vbYesNoCancel) ' Si se hace clic en Yes, devuelve 6, en No, devuelve 7 y 8 en Cancel
MsgBox Led
NomVar = -120.54
Cad = MsgBox("Valor: " & NomVar, vbYesNo, "Emisión de resultados")
MsgBox Cad

End Sub

Quinto ejemplo

Finalmente vamos a escribir un procedimiento que permita en ingreso de datos correspondiente a las ventas de varios productos. El proceso terminará según el botón que se active cuando se ejecute MsgBox.

De cada producto se leerá en una cadena en donde se digite código, nombre o descripción, precio unitario y la cantidad comprada. Se extraerá cada uno de ellos, se calculará el monto de la venta aplicando el IGV, se acumulará en una cadena de salida y cuando se termine de procesar, se imprimirá en varias líneas.

He aquí el código:

Sub Salida02()

' Aplicaciones
' Vamos a procesar un conjunto de datos de manera indeterminada, usando botones de control
Dim xCod, XProd, xPr, xCan, xTotV, xCad As String

Formato = "Codigo,Nombre del producto,Precio,Cantidad,TotalAPagar"

xSal = Formato + Chr(13)
While MsgBox("Desea continuar?", vbYesNo) = vbYes

xCad = InputBox("Ingrese los datos separado por comas", "PANEL DE INGRESO DE DATOS")

‘ Extraemos el código
xCod = Left(xCad, 4)

‘ Reducimos la cadena quitando el código
xCad = Right(xCad, Len(xCad) - InStr(1, xCad, ","))

‘ Extraemos el nombre del producto
XProd = Left(xCad, InStr(1, xCad, ",") - 1)

‘ Reducimos la cadena eliminando el nombre del producto
xCad = Right(xCad, Len(xCad) - InStr(1, xCad, ","))

‘ Extraemos el precio unitario
xPr = Left(xCad, InStr(1, xCad, ",") - 1)

‘ Quitamos el precio unitario y lo que queda constituye la cantidad
xCad = Right(xCad, Len(xCad) - InStr(1, xCad, ","))
xCan = xCad

‘ Pasamos a valor numérico precio y cantidad para obtener el monto de la venta
X = Val(xPr) * Val(xCan) + Val(xPr) * Val(xCan) * 0.18
‘ La convertimos en cadena de caracteres
xTotV = Str(X)

 

Como todo lo extraído y xTotV son cadena de caracteres, lo guardamos en la cadena xSal, añadiendo al final, el caracter que permite pasar a la siguiente línea.

xSal = xSal + XProd + " , " + xCan + " , " + xPr + " , " & xTotV + Chr(13)

Wend

' Emision de resultados
MsgBox xSal

End Sub

Abra el libro MisMacros.xlsm y vaya al editor usando +F11 o haga clic aquí.

Haga doble clic en el Módulo6 para abrirlo. Vaya al final del mismo para añadir otros procedimientos.

Digite en este módulo, los ejemplos arriba desarrollados y ejecute cada uno de ellos para fijar el aprendizaje.

Las siguientes imágenes contienen estos procedimientos.

 

En la siguiente sesión veremos la sentencia Select case ... que nos permitirá reemplazar los ifs encadenados para ello haga clic aquí