jueves, 16 de diciembre de 2021

Dividir instrucciones muy largas en varias líneas en VBA para Microsoft Excel

En la mayoría de los editores de texto, es posible ajustar el texto a la pantalla para hacer más sencilla la lectura del código.

Lamentablemente en Microsoft Excel, el editor de VBA no dispone de esta opción, obligándonos a utilizar la barra de desplazamiento lateral para ver instrucciones largas.

Para solucionar esto, se puede insertar un salto de línea manual en una instrucción VBA, permitiendo reducir la longitud de la línea, para ello escribiremos el carácter " _".

Para que se reconozca correctamente el carácter es necesario separarlo con un espacio de la instrucción anterior, en caso contrario se mostrará una ventana de error.

Tampoco se reconocerá si se escribe dentro de una cadena de caracteres.





El código del ejemplo de hoy será el siguiente:


Sub inputboxStatusbar2Variables()


    'Declaracion de Variables

    Dim edadUuario As Integer

    Dim alturaEnCmUsuario As Integer

    

    'Mostramos dos ventanas solicitando información

     edadUuario = Application.InputBox("¿Cuantos años tienes?", "Edad")

     alturaEnCmUsuario = Application.InputBox("¿Cual es tu altura en cm?", "Altura")

     

    'Motramos edad y altura concatenando con un texto mejorar la legibilidad

    'resaltar que hemos incluido los espacios necesarios en las cadenas

     MsgBox ("Has dicho que tienes " & edadUuario & " años de edad y mides " _

     & alturaEnCmUsuario & "cm de altura.")

     

     'Despues de pulsar el boton aceptar motramos la edad en la barra de estado

     Application.StatusBar = "Has dicho que tienes " & edadUuario &_

     " años de edad y mides " & alturaEnCmUsuario & "cm de altura."

     

     'Volvemos a mostrar un aviso, en este

     'caso, para borrar la barra de estado

     MsgBox ("En cuanto pulse el botón, la barra de estado _

     volverá a su estado normal")

     

     'Reseteamos la barra de estado

     Application.StatusBar = False

     

End Sub


Si algo resulta incómodo en un ordenador es moverse horizontalmente.

Especialmente cuando se trata de un lenguaje de programación.

Todos los entornos de programación modernos permiten tanto el cambio de tamaño del texto como el ajuste del mismo al ancho de la pantalla.

Lamentablemente el entorno de programación de VBA que incluye Microsoft Excel no lo hace, obligándonos a desplazarnos horizontalmente por la pantalla.

Sin embargo es posible indicar un salto de línea manual dentro de las líneas de código mediante el carácter de guión bajo.


Ahora bien debe cumplir un par de condiciones.

El guión debe separarse por un espacio de la instrucción anterior.

En el ejemplo se.ha omitido el espacio.

Tampoco se puede usar dentro de una cadena de texto, ya que se reconocerá comparte del texto.



miércoles, 15 de diciembre de 2021

Concatenar varias variables en un mismo mensaje en VBA para Microsoft Excel

En VBA es posible combinar en un único mensaje todas las variables que sean necesarias.

En este ejemplo solicitamos dos datos al usuario, almacenándolos para luego mostrarlos más tarde.



Este es el código que usaremos en este ejemplo.



Sub inputboxStatusbar2Variables()


    'Declaracion de Variables

    Dim edadUuario As Integer

    Dim alturaEnCmUsuario As Integer

    

    'Mostramos dos ventanas solicitando información

     edadUuario = Application.InputBox("¿Cuantos años tienes?", "Edad")

     alturaEnCmUsuario = Application.InputBox("¿Cual es tu altura en cm?", "Altura")

     

    'Motramos edad y altura concatenando con un texto mejorar la legibilidad

    'resaltar que hemos incluido los espacios necesarios en las cadenas

     MsgBox ("Has dicho que tienes " & edadUuario & " años de edad y mides " & alturaEnCmUsuario & "cm de altura.")

     

     

     'Despues de pulsar el boton aceptar motramos la edad en la barra de estado

     Application.StatusBar = "Has dicho que tienes " & edadUuario & " años de edad y mides " & alturaEnCmUsuario & "cm de altura."

     

     'Volvemos a mostrar un aviso, en este

     'caso, para borrar la barra de estado

     MsgBox ("En cuanto pulse el botón, la barra de estado volverá a su estado normal")

     

     'Reseteamos la barra de estado

     Application.StatusBar = False

     

End Sub





Primero solicitamos la información al usuario.

Pedimos la edad y la almacenamos en una variable.

    'Mostramos dos ventanas solicitando información

     edadUuario = Application.InputBox("¿Cuantos años tienes?", "Edad")


Hacemos una segunda pregunta, que almacenamos en otra variable.

     alturaEnCmUsuario = Application.InputBox("¿Cual es tu altura en cm?", "Altura")


Mostramos los datos de ambas variables concatenados en un único mensaje en una ventana.

    'Motramos edad y altura concatenando con un texto mejorar la legibilidad

    'resaltar que hemos incluido los espacios necesarios en las cadenas

     MsgBox ("Has dicho que tienes " & edadUuario & " años de edad y mides " & alturaEnCmUsuario & "cm de altura.")


     'Volvemos a mostrar un aviso, en este

     'caso, para borrar la barra de estado

     MsgBox ("En cuanto pulse el botón, la barra de estado volverá a su estado normal")

Hacemos lo mismo pero en la barra de estado.


     'Despues de pulsar el boton aceptar motramos la edad en la barra de estado

     Application.StatusBar = "Has dicho que tienes " & edadUuario & " años de edad y mides " & alturaEnCmUsuario & "cm de altura."


Finalmente devolvemos el control de la barra de estado a Microsoft Excel.

Este paso es importante, ya que de no hacerlo se mantendrá el último mensaje hasta cerrar el programa.


     'Reseteamos la barra de estado

     Application.StatusBar = False





lunes, 13 de diciembre de 2021

Uso de la barra de estado en Microsoft Excel para interactuar con el usuario mediante VBA.

Además de poder usar MsgBox para motrar información al usuario, también es posible usar la barra de tareas.

Para ello se asigna la cadena de texto a mostrar a Application.StatusBar.

Sin embargo si se deja así, el mensaje permanecerá indefinidamente.

Podemos sustituirlo mediante otro mensaje, o desactivar los mensajes devolviendo el control de la barra de estado a Microsoft Excel mediante la intrucción Application.StatusBar = False



Este es el código que usaremos en este ejemplo.

Sub solicitarInformacion()

    'Declaracion de Variables

    Dim edadUuario As Integer

    

    'Mostramos ventana solicitando información

     edadUuario = Application.InputBox("¿Cuantos años tienes?", "Edad")

    

    'Mostramos edad directamente

     MsgBox (edadUuario)


    'Mostramos edad concatenando con un texto mejorar la legibilidad

    'resaltar que hemos incluido los espacios necesarios en las cadenas

    'de texto

     MsgBox ("Has dicho que tienes " & edadUuario & " años de edad.")

     

     'Despues de pulsar el boton aceptar motramos la edad en la barra de estado

     Application.StatusBar = "Has dicho que tienes " & edadUuario & " años de edad."

     

     'Volvemos a mostrar un aviso, en este

     'caso, para borrar la barra de estado

     MsgBox ("En cuanto pulse el botón, la barra de estado volverá a su estado normal")

     

     'Reseteamos la barra de estado

     Application.StatusBar = False

     

End Sub


Comenzamos ejecutando la macro.

Mediante un InputBox solicitamos información al usuario que luego almacenamos en una variable.

    'Mostramos ventana solicitando información

     edadUuario = Application.InputBox("¿Cuantos años tienes?", "Edad")


El usuario introduce su edad en el InputBox y al pulsar el botón aceptar visual Basic for application automáticamente asigna el valor escrito en la casilla de texto a la variable.

Mostramos el valor de la variable directamente mediante un MsgBox.

    'Mostramos edad directamente

     MsgBox (edadUuario)


Esta forma de mostra informacion se puede mejorar concatenando un texto explicativo.

    'Mostramos edad concatenando con un texto mejorar la legibilidad

    'resaltar que hemos incluido los espacios necesarios en las cadenas

    'de texto

     MsgBox ("Has dicho que tienes " & edadUuario & " años de edad.")


De igual forma que podemos mostrar el contenido de una variable una ventana también lo podemos mostrar en la barra de estado.

En este caso el mensaje de la barra de estado permanecerá hasta que se sustituya por otro o se resetea la barra de estado.

     'Despues de pulsar el boton aceptar motramos la edad en la barra de estado

     Application.StatusBar = "Has dicho que tienes " & edadUuario & " años de edad."

Decidimos liberar la barra de estado y devolverle el control de nuevo a Microsoft Excel para ello asignamos el valor false eh a la variable StatusBar.


     'Reseteamos la barra de estado

     Application.StatusBar = False



A partir de este momento los mensajes mostrados en la barra de estado serán los que indique Microsoft Excel.

Este método de mostrar información la barra de estado puede sernos muy útil cuando estamos haciendo un proceso y deseamos dejar constancia del paso mal que vamos ya que no necesita interacción por parte del usuario.

viernes, 10 de diciembre de 2021

Solicitar información al usuario en VBA para Microsoft Excel mediante inputbox.

Ahora que ya sabemos mostrar mensajes en pantalla concatenando textos y cadenas lo que nos falta es saber cómo solicitar información al usuario.

Para ello en VBA para Microsoft Excel existe la instrucción InputBox.

Con ella se mostrara un mensaje en una ventana flotante en pantalla en la cual se mostrara una pregunta y un cuadro de texto en el que el usuario podrá escribir su respuesta, enviándola al pulsar el botón aceptar.



Este es el código del ejemplo.


La instrucción InputBox tiene dos parámetros uno es el texto con la pregunta que se muestra y el otro el título de la ventana flotante.

Una vez escrita la respuesta se pulsa el botón aceptar y la instrucción asigna y resultado del cuadro de texto a la variable que hayamos indicado.

De esta forma conseguimos que en la variable haya exactamente en la misma información que en el cuadro de texto.

Podemos mostrar la directamente como en este caso en el que mostramos el valor de la variable.


Pues concatenar la con un texto explicativo para explicar mejor la información que deseamos mostrar.

Evidentemente además de mostrarla por pantalla edad de la variable nos podrá servir para hacer cálculos.

jueves, 9 de diciembre de 2021

Concatenar variables de distintos tipos en VBA para Microsoft Excel

En VBA es posible concatenar variables de distintos tipos sin necesidad de convertirlos en cadenas con antelación.

Por ejemplo es posible concatenar un texto con un número usando solamente el operador &.

El propio lenguaje realiza una conversión implícita de cualquier tipo de variable a tipo cadena de texto (String).



Este es el código del ejemplo.


Sub concatenarTexto()

    'Declaracion de Variables

    Dim numeroEntero As Integer

    Dim cadenaTexto As String

    

    'Asignamos valores

    numeroEntero = 7

    cadenaTexto = "El valor de la variable numeroEntero es " & numeroEntero

    

    'Motramos valores

     MsgBox (cadenaTexto)


End Sub



En este caso concatenados un texto con una variable de tipo Integer, y obtenemos como resultado una cadena de texto que incluye en valor almacenado en la variable.

    cadenaTexto = "El valor de la variable numeroEntero es " & numeroEntero



Para aquellos que se inician en los lenguajes de programación, es interesante constatar que el nombre de la variable siempre es sustituido por el valor que almacena.

miércoles, 8 de diciembre de 2021

Concatenar Variables de texto en VBA para Microsoft Excel

Para concatenar cadenas de texto en VBA se usa el operador &.

Es importante recordar que al concatenar dos cadenas no se añade ningún separador por defecto.

Si necesitamos incluir un espacio será preciso indicarlo como una cadena adicional.





Este es el código que usaremos como ejemplo.

Sub concatenarTexto()


    'Declaracion de Variables

    Dim cadenaTextoA As String

    Dim cadenaTextoB As String

    

    'Asignamos valores

    cadenaTextoA = "Hola"

    cadenaTextoB = "mundo"

    

    'Motramos valores

     MsgBox (cadenaTextoA)

     MsgBox (cadenaTextoB)

    

    'Concatenamos ambas variables

    cadenaTextoA = cadenaTextoA & cadenaTextoB

    

    'Motramos valores

     MsgBox (cadenaTextoA)


End Sub


Asignamos un valor a la primera cadena de texto.

    cadenaTextoA = "Hola"


Asignamos otro valor a la segunda cadena de texto.

    cadenaTextoB = "mundo"


Podemos concatenar las lo que es lo mismo que unirlas mediante el operador &.

    cadenaTextoA = cadenaTextoA & cadenaTextoB


Cómo se ve la unión es exacta no hay ningún separador que se añada.

Por lo tanto si se desea añadir un espacio como separador habrá que añadirlo manualmente.

En caso contrario las palabras aparecerán unidas sin ninguna separación entre ellas.


Si necesitamos incluir un espacio será preciso indicarlo como una cadena adicional, realizando una concatenación de la primera cadena con el espacio y luego con la segunda cadena.

martes, 7 de diciembre de 2021

Variables tipo texto en VBA para Microsoft Excel

Las variables de texto se inicializan como una cadena vacía.

Para asignar un valor de cadena de texto, se debe indicar entre comillas dobles.

En otros lenguajes de programación es posible usar también las comillas simples o el apóstrofe, pero en VBA el apóstrofe se usa para indicar los comentarios.



Este es el código que usaremos en este ejemplo.


Sub variables()


    'Declaracion de Variables

    Dim cadenaTexto As String

     MsgBox (cadenaTexto)

   

    'Asignamos un valor

    cadenaTexto = "Hola mundo"

    MsgBox (cadenaTexto)

End Sub



A diferencia de las variables de tipo numérico las variables de tipo texto cuando se crean se inicializan a un valor vacío.

Esto provoca que si intentamos mostrar el valor de la cadena no aparezca nada en pantalla.

    Dim cadenaTexto As String


A diferencia de otros lenguajes de programación las cadenas en visual Basic for applications solo se pueden definir entre comillas dobles, ya que las comillas simples o apostrofes se usan para definir los comentarios.

    cadenaTexto = "Hola mundo"