jueves, 25 de agosto de 2022

¿Cuántas funciones tiene actualmente Excel? ¿Sabes tú realmente la respuesta?

Acompáñenme y sepan la respuesta de cuántas funciones tiene actualmente Excel y cómo han ido aumentado con cada versión de Excel. ¡No se la pierdan!

¡Nos vemos!

Abraham Valencia
Lima, Perú

sábado, 20 de agosto de 2022

Excel e historia (VII): Las funciones inhabilitadas de Excel... ¡Aunque usted no lo crea!

Con la emisión de la versión 4.0 de Excel (1992) aparecieron varias funciones que son válidas incluso en las versiones de Excel de hoy en día como por ejemplo ALEATORIO.ENTRE, DIA.LAB, JERARQUIA, etc.; es más, lo real es que no existe una sola función que haya aparecido en alguna versión de Excel y que Microsoft luego haya decidido dar de “baja”, o en todo caso, no les ha dado de “baja” por completo ¿Cómo es eso? Pasaremos a conocerlo a continuación.

En 1992 todavía estaba en boga el lenguaje que programación que aquel entonces traía consigo Excel, es decir Excel Macro Language – XLM (Enlace), por lo que Microsoft incluye en la versión 4.0 del programa a tres funciones poco conocidas: ID.REGISTRO (REGISTER.ID), LLAMAR (CALL) y REGISTRAR (REGISTER). Estas funciones están agrupadas en las del tipo “Funciones definidas por el usuario instaladas en complementos” y aún se encuentra información sobre ellas en las páginas web de Microsoft: Enlace1, enlace2. y enlace3.

La función ID.REGISTRO devuelve el número de identificación del registro de la librería (DLL) especificada. Si la DLL no está registrada, la función realiza el registro y devuelve el identificador del registro. La sintaxis para su uso es la siguiente:

= ID.REGISTRO (Nombre_de_la_librería; Nombre_de_la_función; Tipo – Opcional)

“Tipo” es el texto que especifica el tipo de datos del valor devuelto y los tipos de datos de todos los argumentos de la DLL. La primera letra del argumento Tipo especifica el valor que se devolverá.

La función LLAMAR permite (permitía) usar funciones contenidas en librerías (DLL), creadas en C o C++, directamente en las hojas, pasando a través de dicha función los argumentos necesarios para que la función de la librería pueda interactuar en las celdas. La sintaxis para el uso de dicha función era la siguiente:

=LLAMAR (Ruta_de_la_Librería; Nombre_de_la_función; Cadena_Tipo; argumento1;… ; argumento27)

“Cadena tipo” hace referencia a un conjunto de letras que indican el tipo de cada argumento, siendo la primera letra el valor devuelto por LLAMAR y las siguientes las correspondientes al tipo de argumentos usados en dicha función.

La función LLAMAR también puede interactuar con la función C API "Excel4" de Excel lo que le permite utilizar parte de las funciones XLM en las hojas de cálculo.

La función REGISTRAR registra una librería (DLL), incluyendo las de la API de Win32. También puede especificar un nombre de función personalizada y nombres de argumentos. Su sintaxis es la siguiente:

=REGISTRAR (Nombre_de_la_librería; Nombre_de_la_función; Tipo; alias_de_la_función; argumento - Opcional; tipo_de_macro; categoría)

“Tipo” es una cadena que especifica los tipos de valor devuelto y los argumentos de las funciones. “Alias_de_la_función” es un nombre personalizado que puede dar a la función. “Argumento” se usa para nombrar los argumentos de la función. “Tipo_de_macro” es un número u sado para usa una función (se usa el 1). “Categoría” es un número de categoría (utilizado en la antigua funcionalidad de Excel).

Los números usados para los tipos, argumentos y similares se pueden ver en el enlace relacionado a “Llamar y registrar” que está líneas arriba.

Los problemas con estas funciones se comienzan a reportar a finales del siglo pasado y se hacen conocido como "Vulnerabilidad LLAMAR" y la “Vulnerabilidad de la función ID.REGISTRO”, las cuales permitían a un hacker ejecutar comandos a su gusto especificando una librería malintencionado mediante cualquiera de dichas funciones. Dichos problemas se reportaron para Excel 97 y Excel 2000 e incluso fue publicado el 26 de julio del 2000 por Microsoft a través de su “Boletín de seguridad de Microsoft MS00-051” (Enlace). El 28 de febrero del 2003 Microsoft publica un parche (uno para Excel 97 y uno para Excel 2000) que soluciona dichas vulnerabilidades, aunque a con la actualización SP3 de Excel 2000, Microsoft inhabilita las tres funciones e incluso cuando se intenta usar en las versiones actuales de Excel, sale el siguiente mensaje:

Lo raro es que Microsoft no las ha dejado de lado en su documentación web y se da a entender que funcionan y/o son válidas en las versiones actuales de Excel y ni siquiera hay mención a que están inhabilitadas, aunque no podemos usarlas y por eso, como dije al inicio, oficialmente no hay funciones que la corporación haya dado de “baja” pero ¿Podrían ser estas consideradas como las primeras y/o únicas hasta ahora? Eso es algo que solo Microsoft puede responder, aunque creo que podemos nosotros ir sacando conclusiones. ¡Hasta la próxima!

Abraham Valencia
Lima, Perú

miércoles, 17 de agosto de 2022

Extrayendo las imágenes de un archivo Excel - TIPS TSE 5

Hoy vamos a ver como extraer imágenes, como archivos independientes, cuando éstas están en una hoja de Excel.

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

jueves, 11 de agosto de 2022

Excel y Access (III): El uso de WHERE en las sentencias SQL

Hoy vamos a continuar trabajando con el RecorSet para importar datos de Access hacia Excel. En esta ocasión vamos a concentrarnos en las sentencias SQL y en específico en la instrucción WHERE que nos servirá para extraer registros que cumplen las condiciones específicas que deseemos. No olviden que trabajaremos con los archivos del artículo anterior (Enlace).

Entonces, vamos a recodar que nuestra variable llamada SQL es justamente con la que enviamos las sentencias SQL a Access y usaremos esa misma variable. Solo para recordar, la que usamos la vez anterior es:

SQL = "Select * From Vendedores"

No olvidando que Select es la instrucción que selecciona los registros y al poner un asterisco estamos diciendo que extraiga todos los registros de la tabla, o tablas, que indicamos a continuación con From.

Entonces ¿Cómo se usa Where? Verán que es relativamente fácil; por ejemplo, supongamos que queremos extraer solo los datos cuya columna "Sexo" tiene registros que dicen "Masculino", pues basta colocar así:

SQL = "SELECT * FROM Vendedores WHERE Sexo= 'Masculino' "

Es decir, estamos diciendo que extraiga todos los registros de la tabla “Vendedores” en donde el campo "Sexo" sea igual a "Masculino". Ojo, al ser el campo “Sexo” del tipo Texto, es necesario que el parámetro enviado en el Where vaya entre dos apóstrofos. Por cierto, las instrucciones SQL pueden ir en minúsculas o mayúsculas; en esta ocasión las puse en mayúsculas solo con la intención de resaltarlas. Ah, por cierto, el resultado de la macro, con el cambio respectivo, debería ser este:

Se puede usar Where con cualquiera de los campos e incluso en más de uno a la vez. Por ejemplo, miren esto:

SQL = "SELECT * FROM Vendedores WHERE Sexo= 'Masculino'  AND Tienda = 'Tienda 002' " 

El resultado será el siguiente:

Así como AND, también podemos usar OR. Usando parámetros como el anterior y cambiando el AND por OR, podríamos dejar así la sentencia:

SQL = "SELECT * FROM Vendedores WHERE Sexo= 'Masculino' OR Tienda = 'Tienda 002' "

¿Notan la diferencia? Ya no solo extrajo los registros que cumplen con ser masculino y de la Tienda 002, sino que esta vez se extraen los que son masculino o que también son de la Tienda 002.

También podemos hacer uso de los campos numéricos para usar con Where, aunque en la tabla solo es numérico el campo ID", dado que estos son solo ejercicios, lo usaremos. Por ejemplo, supongamos que queremos los mayores de 10, entonces pondríamos así:

SQL = "SELECT * FROM Vendedores WHERE ID > 10"

Por cierto, a los valores de los campos numéricos no se les coloca apóstrofos. En la hoja deberíamos tener los siguientes datos después de correr la macro:

También se puede usar menor (<) e igual (=) para dichos valores numéricos, no dejen de probarlos.

Y eso, amigos y amigas, es todo por hoy, espero les haya gustado. En la próxima ocasión seguiremos con Where pero aplicado a fechas, que es un tema, además de recurrente, que se le hace difícil a muchas personas. Hasta la próxima.

Abraham Valencia
Lima, Perú

miércoles, 10 de agosto de 2022

Entrevista a Benito Moreira Estévez: Complemento (add-in) MAccessExcel

Entrevista a Benito Moreira Estévez (España) para presentar su complemento (add-in) llamado "MAccessExcel", que ha elaborado y puesto al servicio de la comunidad de Excel. Acompáñennos y conozcan el interesante aporte que permite extraer datos desde Access y muchas otras cosas. ¡No se la pierdan!

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

domingo, 7 de agosto de 2022

Automatizando Excel con otros programas (I): Librerías (ActiveX) hechas con Visual Basic 6.0

Hoy comenzamos con los procesos para automatizar Excel a través de otros programas y, en muchos casos, proteger los código generados. En esta ocasión vamos a aprender a crear librerías (*.dll) ActiveX con Visual Basic 6.0, un programa que fue uno de los más exitosos de Microsoft, en su momento, y que aún puede usarse y elaborar código que sigue siendo útil para las últimas versiones de Excel.

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú