domingo, 29 de mayo de 2022

Excel e historia (III): El Visual Basic for Applications (VBA) de Excel

En 1993 Microsoft lanza la versión 5.0 de Excel (arquitectura BIFF5); probablemente el primer gran cambo que incluye dicha versión es que los archivos podían tener varias hojas (libros), pero definitivamente el mayor cambio y que probablemente fue el de mayor impacto en Excel hasta el día de hoy fue la aparición de Visual Basic for Application (VBA).

En los años noventa, personal de Microsoft manifestaba que una de las primeras ideas que tuvieron como logro la inclusión de VBA, fue la necesidad de unificar el código usado entre las aplicaciones de Office. Recordemos que en aquel entonces se usaban las Macros 4.0 en Excel, así como AccessBASIC y WordBASIC, para Access y Word respectivamente.

Siempre se ha dicho que, ante el éxito de Visual Basic (VB) en aquel entonces, se decidió mantener con VBA la analogía al lenguaje Basic en general, pero manteniendo ciertas características semejantes al VB.

Esta primera versión de VBA (1.0) que aparece en Excel se programa en módulos que también se veían como pestañas (hojas) del libro, aunque de forma predeterminada llevaban le nombre “Módulo”.

El código VBA se escribía en dicho módulo, muy parecido, por no decir casi igual, a como se hace hoy en día. Claro, con la diferencia que no era un entorno propio de programación.

Imagen tomada de internet

Con esta primera versión la Grabadora de Macros funciona para VBA, claro que con la particularidad que aún podía usarse para también grabar Macros 4.0.

Imagen tomada de internet

Esta versión también incluyo los Diálogos, conocidos hoy como los Diálogos de Excel 5.0, que eran formularios con objetos que podían usarse con VBA y de los que hablaré próximamente.

Al año siguiente (1994) Microsoft incluye VBA 1.0 en Project. En 1995 se lanza Excel 95 (7.0) que sigue incluyendo VBA (1.0) pero retiran la opción para grabar Macros 4.0. En Access también se incluye VBA, pero es una versión mejorada, la 2.0, reemplazando a AccessBasic, lo que es muy aceptado por los usuarios de dicho programa. Durante ese tiempo se siguen implementando cambios en VBA e incluso la que hubiese podido ser la versión 3.0 es incluida como elemento de VB 4.0 en 1996. Ese mismo año se termina la versión 4.0 de VBA, la que está elaborada en C ++ y convierte dicho lenguaje en uno orientado a objetos. Dicha versión se incluye en Word reemplazando a WordBasic.

El cambio radical de VBA llegó con su versión 5.0, la cual es incluida en todos los productos de Office que se lanzan con Office 97 (8.0), excepto en Outlook. Asimismo, se deja de lado la programación en hojas y VBA pasa a tener su propio editor del lenguaje (Editor de Visual Basic – VBE). Otro cambio radical es la inclusión de los Userform de VBA, dejando de lado, en la práctica, los Diálogos anteriores. Estas versiones de Excel y VBA aumentan considerablemente la cantidad de eventos de los objetos, se introducen los objetos ActiveX y la Ayuda del VBA es mejorada bastante.

Imagen tomada de internet

Con Excel 2000 (9.0) llega VBA 6.0 que, si bien no introdujo cambios drásticos, sí permitió que los Userform sean también no modales y adaptó secuencias para la manipulación de algunas otras herramientas de Excel como por ejemplo los Gráficos Dinámicos. Con las actualizaciones de dicho programa llegó VBA 6.1 y VBA 6.2 aparece con Office 2000 SR-1. Excel 2002 – XP (10.0) llegó también con VBA 6.2, con algunos mínimos cambios relacionados a la nueva interfaz de Office y algunas herramientas nuevas de Excel. VBA 6.3 llegó con las actualizaciones de Office para esta versión XP. Excel 2003 (11.0) llegó con VBA 6.4 y con sus actualizaciones llegó VBA 6.5. Por aquellos años Microsoft anuncia que no habría versiones nuevas de VBA.

Con la llegada de Excel 2007 (12.0) y su nuevo entorno tipo NET, dejando prácticamente de lado COM, se incluyó VBA 6.5, con lo que parecía Microsoft cumplía con ese comunicado años antes sobre que no habría nuevas versiones de VBA. Eso sí, Microsoft eliminó la compatibilidad con VBA para Excel 2008 para Mac, aunque por presión de los usuarios tuvo que restaurarlo Excel para Mac 2011. En paralelo Microsoft informó que no tenía planes de eliminar VBA de la versión de Windows de Office, aunque la campaña para usar Visual Studio Tools for Office (VSTO) parecía encaminada a que se deje de lado VBA.

Excel 2010 (14.0) incluyó VBA 7.0, a pesar del anuncio de Microsoft unos años antes, aunque no hay nuevas características en dicha versión a comparación de la versión anterior 6.5. Eso sí, incluye tipos de datos de puntero como LongPtr para adaptarse a la nueva arquitectura implementada por Microsoft en Office, ya que salen al mercado tanto Office de 32 bits como de 64 bits a partir de dicha versión 2010. He de comentar que el Excel de 64 bits hizo que se pierda compatibilidad con muchos objetos ActiveX de 32 bits que los usuarios se habían acostumbrado a usar como el DateTimePicker (DtPicker), por mencionar uno (aunque hay trucos para usar algunos para algunas versiones de Excel de 64 bits bajo Windows de 32 bits y cosas así, pero no es tema de hoy).

La última versión de VBA que existe es la 7.1 que se lanza junto a Excel 2013 (15.0) y que es la que se sigue incluyendo en todas las versiones posteriores de Excel (2016, 2019, 2021, 365 – 16.0). Dicha versión básicamente, similar a las anteriores, es para adaptarse a las nuevas herramientas usadas en Excel.

Para terminar, con la aparición de las herramientas BI nuevamente comienzan los rumores sobre la desaparición de VBA, lo que se incrementa los últimos años con la aparición de Office Scripts y TypeScript en Excel (aunque solo vienen con Office 365 Empresa y algunas ediciones de Educación – 3 y 5), así como la fuerte recomendación sobre el uso de complementos para Excel hechos con Python. A pesar de ello, yo creo que tenemos VBA para buen rato. Hasta la próxima.

Abraham Valencia
Lima, Perú

martes, 24 de mayo de 2022

Foros y grupos (Facebook) de Excel ¿Ayuda o trabajo gratis?

Hay muchos foros de Excel y los últimos años han aparecido también muchos grupos de Facebook para tratar el mismo tema, pero ¿La gente los usa para solicitar ayuda o algunos/as abusan y quieren que se les haga todo el trabajo? ¿Qué opinan ustedes?

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

lunes, 23 de mayo de 2022

Excel e historia (II): El antiguo y olvidado "Formulario de Datos"

Aunque todos/as tenemos muy claro en que Excel es una hoja de cálculo e incluso Microsoft lo tenía muy claro desde el inicio, sin duda alguna dicha misma corporación consideraba el uso de dicho programa como base de datos como se infiere de las primeras publicaciones sobre dicho programa o lo que se iba incluyendo en sus funciones y manuales, así sea pensando en la cantidad de datos con los que uno deseaba hacer justamente cálculos.

Cuando en 1987 se lanzó Excel 2.0, dentro de las herramientas que Microsoft incluyó para el uso en bases de datos estaba un cuadro de entrada, búsqueda y edición de datos llamado “Formulario de Datos”, o Data Form en realidad, recordemos que en aquel entonces solo había Excel en inglés. Dicho formulario se activaba a través del menú respectivo incluido.

En 1993, con la aparición de Excel 5.0 y VBA, también aparecen los antes llamados Diálogos (hoy conocidos como Diálogos de Excel 5.0) que son formularios que también pueden usarse justamente con VBA. En 1997 se emite Excel 97 (8.0) y en él Microsoft va más allá e incluye los Userform de VBA. Con la aparición de ambos, sobre todo con los segundos, que con programación iban más allá de los límites del Formulario de Datos, dichos últimos formularios se van dejando de usar cada vez más e incluso es en Excel 2003 que aparece en el menú de Datos por última vez, no siendo incluidos en la Cinta de Opciones que apreció en Excel 2007 ni en versiones posteriores, aunque siguen existiendo.

Dejando la parte histórica de lado, vamos a explicar, ahora, cómo funcionan dicho tipo de formularios. Como ya se dijo en el párrafo anterior, la desventaja es que no se puede ir más allá de las funciones predeterminadas que tiene, que ya vamos a ver, pero yo diría que su mayor ventaja es que no es necesario saber VBA para usarlo e igual facilita la búsqueda, ingreso y edición de datos. Ah, otras de las desventajas, para algunos, era que podía usarse sobre un máximo de 32 columnas y que no pueden usarse botones u otra herramienta además de las predeterminadas.

Vamos a ver como usar dicho formulario en versiones actuales de Excel. Lo primero es ir a la pestaña Archivo, ahí eligen Opciones y les saldrá un formulario en el cual elegirán “Barra de herramientas de acceso rápido”. En la primera lista sugiero elegir “Todos los comandos” y ahí buscar “Formulario...”, elegir “Agregar” y que quede, por ende, en la segunda lista, la de la derecha.

Con eso, ya tendremos habilitada la opción de usar dicho formulario cuando lo necesitemos.

Ahora vamos a suponer que tenemos datos como los que mostraré a continuación. Ojo, yo inicio con los datos en la celda A1, pero pueden estar en cualquier lado de la hoja e incluso puede haber otros grupos de datos en la misma hoja. Sitúen el cursor en cualquier celda del grupo de datos o Tabla y hecho eso denle clic al botón agregado a la barra de herramientas. Deberían tener esto como resultado:

Como ven hacia la izquierda del formulario salen los campos con los nombres usados en los encabezados y/o primera fila de los datos; al centro hay una barra de desplazamiento vertical que justamente permite moverse entre registros (filas) en los campos del formulario de manera rápida; hacia la derecha vemos botones que pasaremos a explicar.

Nuevo: Como bien dice su título sirve para agregar registros nuevos, basta presionarlo para que los campos se queden vacíos que pueden ser llenados con nuevos datos. Una vez ingresados los datos, basta presionar la tecla Enter del teclado para que el formulario envíe los datos del formulario a la última fila del grupo de datos o Tabla en cada campo correspondiente.

Eliminar: Borra el registro que está activo en ese momento en el formulario.

Restaurar: Deshace los cambios que se están haciendo en ese momento en los campos mientras se esté agregando o cambiando algún registro.

Buscar anterior y Buscar siguiente: Permite desplazarse entre registros de uno en uno, hacia atrás y hacia adelante, respectivamente. Si se desea se puede hacer cambios en el registro activo y al presionar la tecla Enter dichos cambios se reflejarán en los datos respectivos.

Criterios: Permite escribir criterio de búsqueda en el campo o campos que se desee y/o necesite. Por ejemplo, si quiero buscar solo los de sexo masculino basta darle clic a Criterios y colocar esto en el campo Sexo:

Una vez escrito eso, basta usar los botones “Buscar anterior” o “Buscar siguiente” y solo recorrerá los registros que cumplen con el criterio. También se puede usar comodines, tal como se indica en la ayuda del Excel que copio y pego para conocimiento:

Use

Para buscar

? (signo de interrogación)

Un único carácter
Por ejemplo, Gr?cia buscará "Gracia" y "Grecia"

* (asterisco)

Cualquier número de caracteres
Por ejemplo, *este buscará "Nordeste" y "Sudeste"

~ (tilde) seguida de ?, *, o ~

Un signo de interrogación, un asterisco o una tilde
Por ejemplo, af91~? buscará "af91?".

Ah, una cosa más, para campos numéricos se pueden usar signos como mayor (>), menor (<) o igual (=) o combinación de ellos. Para terminar, el botón Cerrar es evidente para lo que sirve jejeje. Y eso amigos y amigas es el Formulario de Datos de Excel, espero hayan aprendido algo nuevo. Hasta la próxima.

Abraham Valencia
Lima, Perú

martes, 17 de mayo de 2022

Excel e historia (I): Excel Macro Language (XLM) - Macros 4.0

El 30 de septiembre de 1985 Microsoft puso en venta la primera versión de Excel, es decir, la versión 1.0 y aunque a muchos les sorprenda, no era para MS-DOS 3.0, sistema operativo que en aquel entonces usaba la corporación, sino para las Macintosh (MAC) de Apple que tenían su propio sistema operativo. Dicho sea de paso, la primera versión de Windows no aparecería hasta unos meses después (para quienes no lo saben).

¿Cuál es el dato importante en esta ocasión? Pues desde dicha primera versión ya Excel traía macros. Sí, así como lo leen, Excel ya tenía incorporadas macros e incluso tenían su propia grabadora de macros.

Claro, algo importante a resaltar es que las macros en aquel entonces no eran basadas en Visual Basic for Application (VBA) como las que usamos hoy en día. En aquella primera versión de Excel existían tres tipos de archivos: hojas de cálculo, macros y gráficos.

Estas macros se programaban en aquellas Macro Sheet y si los archivos diversos de Excel estaban vinculados, podían tenerse abiertos y trabajar entre ellos haciendo uso de la memoria de la MAC. Este lenguaje de macros tenía sintaxis muy similar a las fórmulas y sus instrucciones se almacenaban en las celdas de las hojas de macros (Macro Sheet). Microsoft inicialmente llamó a este lenguaje como Excel Macro Language (XLM) y con la compra de Excel venía incluido un manual de referencia al uso propio de dicho programa, así como uno llamado “Arrays, Functions, and Macros for the Apple Macintosh”, mediante el cual se podían ver y aprender a usar también dicho lenguaje de macros mencionado.

Unos años después, Microsoft lanza la primera versión de Excel para Windows, aunque mantuvo la numeración correlativa con la versión para MAC y así nació Excel 2.0 el 31 de octubre de 1987.

Con esta nueva versión de Excel, la arquitectura de los archivos cambia y comienzan a usarse los formatos de archivos de intercambio binario, BIFF2 para este caso, pero dicho tipo sigue siendo de una sola hoja, aunque predetermina la extensión *.xls.

Esta versión de Excel también vino con su manual para macros “Microsoft Excel: Functions and Macros”. En dicho manual, así como el de la versión de Excel 1.0, se define que hay dos tipos de macros; las llamadas macros de comandos debido a su similitud con los comandos integrados en Microsoft Excel y las llamadas macro de función, que son parecidas a las funciones nativas de Excel.

Para que se entiendan como funcionaban dichas macros, vamos a un ejemplo de lo que le decían macro de comando, pero claro, lo haremos en nuestras versiones actuales de Excel, aunque será bastante parecido a lo que se hacía antaño. Abran un archivo nuevo, luego en cualquier pestaña den clic derecho y elijan “Insertar…”.

En el cuadro de dialogo que saldrá, elijan “Hoja internacional de macros” que será prácticamente igual a las hojas clásicas de Excel.

Escribe los siguiente en las celdas respectivas:

Aquí se los dejo como texto por si acaso:

Prueba
Minombre=INPUT("Ingresa tu nombre") 
=ALERT("Hola " & Minombre) 
=RETURN() 

Para ver como actúa, coloquen el cursor en la celda A1, den clic derecho y elijan “Ejecutar…”.

En el siguiente dialogo elije “Ejecutar”.

Si todo salió bien, te saldrá esto en pantalla:

Ingresen su nombre y denle clic al botón “Aceptar” y saldrá esto en pantalla:

Como ven, hemos ejecutado una macro en la que ingresamos valor a una variable a través de un Input y luego con una Alert mostramos el nombre ingresado. Sé que es simple, pero la idea es que vean cómo funcionan.

Ahora haremos lo propio, pero con una macro de función que como verán funcionaban muy parecido a lo que hoy conocemos como las Funciones Definidas por el Usuario (UDF por sus siglas en ingles) de VBA. Como las hojas de macro permiten más de un comando y funciones, usaremos la misma, pero en otras celdas. Escriban lo siguiente:

Nuevamente aquí también se los dejaré como texto:

Cambiodolar
=ARGUMENT("mivalor") 
=mivalor*3.81 
=RETURN(A9) 

En su época dichas macros de función se llamaban colocando así en la celda de una hoja de Excel en donde se deseaba obtener el resultado (En donde 1000 es la cantidad que multiplicará la función creada por 3.81 como se definió), aunque el archivo XLM necesariamente tenía que estar abierto:

= Nombredelarchivoconlasmacros.XLM!Cambiodolar(1000)

Como ya no usamos las versiones de Excel en donde funcionaban los archivos *.xlm, tenemos que hacer lo siguiente: Sitúate en la celda A8 y en la pestaña “Fórmulas”, en el grupo “Nombres definidos” activa el botón “Asignar nombre” y en el cuadro de dialogo llena tal cual aquí y le das clic al botón “Aceptar”.

Luego, en una hoja común del libro, en cualquier celda simplemente colocaremos esto y el resultado evidentemente será 3810.

=Cambiodolar(1000)

Después de estos ejemplos, volvamos nuevamente a la historia. En 1990 Microsoft lanza la versión 3.0 de Excel cuyos formatos de archivo eran esta vez del tipo BIFF3. Dos años después, en 1992 se lanza Excel 4.0 (arquitectura BIFF4), última versión de dicho programa en que solamente se usaban el tipo de macros de las que hoy hablamos y en la cual los archivos eran necesariamente independientes. La particularidad de dicha versión es que ya no solo se emite en inglés, sino en varios otros idiomas y lo mismo aplica para las instrucciones/funciones de sus macros. Yo tengo mi Excel en español/castellano, asumo que quienes están leyendo, mayoritariamente, también, así que vamos a probar estas macros en nuestro idioma.

Líneas arriba les mencioné como insertar las una “Hoja internacional de macros”, pero en esta ocasión elijan “Macro de Microsoft Excel 4.0”. Verán que es idéntica la internacional, pero en esta ocasión escriban esto:

El texto:

PruebaCastellano
minombrencastellano=INTRODUCIR("Ingresa tu nombre") 
=ALERTA("Hola " & minombrencastellano & " mira la barra de estado") 
=MENSAJE(VERDADERO;"Este Excel es de  " & minombrencastellano) 
=VOLVER() 

Ojo a que yo uso el punto y coma como separador de argumentos, si ustedes usan la coma, cambien por lo adecuado en la línea del “Mensaje”. Se supone que ya aprendieron como ejecutar dicha macro, así que se los dejo a ustedes esta vez.

En 1993 Microsoft lanza la versión 5.0 de Excel (arquitectura BIFF5), con dicha versión aparecen los archivos que podían tener varias hojas (libros) y sobre todo aparece Visual Basic for Application (VBA) y sus rutinas comienzan también a conocerse como macros. Para diferenciar las macros de VBA con las de XLM, a estas últimas comienzan a conocerlas como Macros 4.0 o macrofunciones. Si bien se mantiene la compatibilidad con las macros 4.0 en versiones posteriores de Excel (como por ejemplo con la inserción de hojas mencionadas en este artículo), la versión 5.0 es la última en que se mantiene la grabadora de dicho tipo de macros.

Estos años de lamentablemente pandemia, nuevamente se habla de las Macros 4.0 ya que, aprovechando que muchos antivirus dejaron de detectarlas, algunos hackers han estado haciendo de las suyas con ellas. Por cierto, para usar Macros 4.0 no olviden habilitar su activación: Enlace.

Por cierto, hay algunas otras formas de seguir usando Macros 4.0 sin necesidad de insertas las hojas comentadas. La primera que quiero comentarles es una que emula las macros de funciones a través del uso del “Administrador de nombres”.

Vamos a crear una función con Macros 4.0 que detecte cuando el texto de una celda tiene aplicado el formato de Tachado. En el “Administrador de nombres” vamos a agregar el siguiente nuevo nombre “Detectartachado”, pero previamente sitúen el cursor en la celda B1 y una vez hecho eso procedan a crearlo y en “Se refiera a” coloquen exactamente esto:

=INDICAR.CELDA(23+0*HOY();!A1)

No olviden cambiar mi punto y coma por una coma de ser el separador que ustedes usan. La función INDICAR.CELDA (GET.CELL) devuelve información acerca del formato, ubicación o contenido de una celda y su tipo 23 nos indica si todos los caracteres de la celda o solamente el primero están tachados, devolviendo VERDADERO o de lo contrario devuelve FALSO. Lo del “+0*HOY()” es solo para hacer volátil, en la medida de lo posible, dicha función. Eso sí, en este caso cuando se use la fórmula reconocerá si la celda inmediata de su lado izquierdo tiene el formato de "Tachado" activado o no. Hay formas de hacer que sea otra celda, pero lo probaremos en otra ocasión. Entonces, por ejemplo, si en la celda A3 tengo tento tachado, en B3 colocaré lo siguiente:

=Detectartachado

El resultado en la celda B3 será "VERDADERO". Por supuesto que podemos anidar dicha función con otras para cambiar y/o mejorar la respuesta /resultado en la celda, pero eso también será tarea para cada uno/a.

Una última forma es hacer uso de las Macros 4.0 a través de VBA, sí, no leyeron mal, vamos a usar VBA y en específico el método ExecuteExcel4Macro del Excel. Para que sea, creo yo, más fácil de entender usaremos nuevamente INDICAR.CELDA (GET.CELL). Supongamos una hoja con el CodeName Hoja1 y que en la celda B1 se ha aplicado formato “Negrita”, entonces, prueben esta macro:

Sub NegritaMacros4()

Application.Goto Hoja1.Range("B1") 
MsgBox "Celda con formato TACHADO: " & ExecuteExcel4Macro("GET.CELL(20)") 

End Sub 

Corran la macro y el MsgBox debería decir lo siguiente:

Y esto amigos/as son las Macros 4.0, o macrofunciones, o Excel Macro Language (XLM), espero les haya resultado entretenido. Hasta la próxima.

Abraham Valencia
Lima, Perú

Descargue el ejemplo aquí

sábado, 7 de mayo de 2022

El lado oscuro del Excel

Estimados/as amigos/as, este domingo 08 de mayo a las 11:00 a.m. hora de Perú y México, estaremos conversando con Fernando González (España) , Gerson Pineda (Honduras) y Leopoldo Blancas (México), de ese lado que casi nunca se comenta sobre Excel ¡Su lado oscuro! Esperamos puedan acompañarnos. https://youtu.be/qhjISm9PQbM

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú