sábado, 18 de diciembre de 2021

Escribir en una celda con nombre de Microsoft Excel mediante VBA

En VBA para Microsoft Excel también podemos referirnos a las celdas con el método Range y el nombre de celda que le hayamos asignado en Excel.

Es útil utilizar los nombres de celdas en lugar de las referencias, para referirse a ellas. Especialmente si en la hoja de cálculo es posible que se añadan o eliminen filas, columnas o celdas.


Este es el código que usaremos en el ejemplo de hoy:



Sub escribirEnCeldaConNombre()

    

    'Escribimos en la celda amarillla

    'que originalmente esta en B2

    Range("B2").Value = "Celda Amarilla"

    

    'Escribimos en la celda verde

    'que originalmente esta en B4

    'refiriendonos a ella por el nombre asignado

    Range("celdaVerde").Value = "Celda Verde"

     

End Sub







Insertamos una fila y una columna desplazando las celdas resltadas en color de sus ubicaciones originales.

Y volvemos a ejecutar la macro.

Como resultado el código de la primera línea ya no hace referencia a la celda amarilla mientras que el de la segunda si que haciendo referencia a la celda verde.


En la primera instrucción haremos referencia a la celda mediante la combinación de la letra de la columna y el número de la fila.

Haremos lo mismo en la primera ejecución para la segunda celda.



Comenzamos pintando la celda B2 de amarillo y la celda B4 de verde para tener una referencia visual sobre ellas.

La primera ejecución el código en el cual usamos las referencias de celda para referirnos a ellas vemos que efectivamente podemos escribir los textos correspondientes en cada una de las celdas.



Para la segunda ejecución de la macro haremos una pequeña modificación en la segunda línea del código.

En la segunda instrucción usaremos el nombre que le hemos asignado a la celda.


Asignamos un nombre a la celda B4, que tenemos pintada de color verde.



La nueva ejecución produce el mismo resultado que la anterior.

Demuestra que en VBA es posible referirse a las celdas con nombre mediante su propio nombre en vez de hacerlo con la referencia.

Insertamos una fila y una columna desplazando las celdas resltadas en color de sus ubicaciones originales.

Y volvemos a ejecutar la macro.



Como resultado el código de la primera línea ya no hace referencia a la celda amarilla mientras que el de la segunda si que haciendo referencia a la celda verde.



Esta forma de referirnos a las cerdas en v va nos va a permitir mantener la referencia a la cerda a pesar de insertar o eliminar filas o columnas.

Es muy útil para usarlo cuando no está definido totalmente el formato de la hoja en la que vamos a trabajar.

viernes, 17 de diciembre de 2021

Escribir en una celda de Microsoft Excel mediante VBA

Hoy muestro dos formas de escribir en las celdas de una hoja de cálculo de Microsoft Excel mediante VBA.

Ambas instrucciones nos permiten escribir en la celda deseada.


Range("A1").Value

Permite acceder mediante la notación típica de Microsoft Excel


Cells(2, 1).Value

Requiere indicar el número de fila y columna, lo que será útil a la hora de recorrer conjuntos de celdas mediante bucles.



Este es el código del ejemplo de hoy:


Sub escribirEnCelda()


    'Declaracion de Variables

    Dim variableTexto As String

    

    variableTexto = "Hola Mundo en Excel."

    

    'Con Range podemos obtener un rango del tamaño de una celda

    'mediante esta forma podemos acceder a la celda

    'usando su nomenclatura habirual en excel

    Range("A1").Value = variableTexto

    

    'tambien podemos usa Cells, que en realidad nos devuelve un Range

    'con este metodo deberemos indicar el numero de fila y columna

    'es un buen metodo para usar en bucles

    Cells(2, 1).Value = variableTexto

     

End Sub



Aquí vemos como al finalizar la ejecución del código, las celdas A1 y A2 de Excel contienen el mismo texto.


Vemos el resultado más de cerca.

La función Range requiere al menos un parámetro de tipo celda, esto se puede hacer indicando el nombre de la celda mediante una cadena de texto.

Sin embargo, a la función Cells se le indica el número de fila y el número de columna.

Ambas funciones permiten llegar al mismo resultado.

Ojo. La función Cells sin indicar ningún parámetro, hace referencia a todas las celdas de una hoja.

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.