sábado, 31 de diciembre de 2022

¡Feliz año 2023!

Mis mejores deseos para todos y todas en este nuevo año 2023.

¡Saludos!

Abraham Valencia
Lima, Perú

jueves, 22 de diciembre de 2022

Curso Excel y VSTO: 4- El objeto Worksheet (Propiedades y eventos)

Capítulo 4 del Curso VSTO. El objeto Worksheet (Propiedades y métodos). ¡No puedes perdértelo!

¡Saludos!

Abraham Valencia
Lima, Perú

sábado, 10 de diciembre de 2022

Capítulo 3 del Curso VSTO. El objeto Range (Propiedades y métodos).

Hoy continuamos con el capítulo 3 del curso sobre Excel y VSTO. En este capítulo vamos a comenzar con los códigos que tanto estaban esperando y hemos elegido trabajar con el objeto Range, algunas de sus propiedades y sus métodos más conocidos ¡No puedes perdértelo!

¡Saludos!

Abraham Valencia
Lima, Perú

lunes, 14 de noviembre de 2022

Curso Excel y VSTO: 2- Primeros conceptos (Clases y objetos)

Capítulo 2 del Curso VSTO. Primeros conceptos (Clases y objetos).

¡Nos vemos!

Abraham Valencia
Lima, Perú

miércoles, 9 de noviembre de 2022

Curso Excel y VSTO: 1- Introducción teórica

Capítulo 1 del Curso VSTO. Hoy comenzamos con la introducción teórica sobre las VSTO.?

¡Nos vemos!

Abraham Valencia
Lima, Perú

viernes, 4 de noviembre de 2022

¡Un adelanto de lo que se viene! ¿Un control Date Time and Picker en Excel de 64 bits?

¡Un adelanto de lo que se viene! ¿Un control Date Time and Picker en Excel de 64 bits funcionado de modo correcto? ¿Es eso posible?

¡Nos vemos!

Abraham Valencia
Lima, Perú

jueves, 3 de noviembre de 2022

Automatizando Excel (X): El complemento Script Lab (4) - Enviando datos a través de un formulario

Seguimos con el uso del complemento Script Lab, esta vez veremos cómo enviar datos a la hoja a través de un formulario hecho con HTML.

¡Nos vemos!

Abraham Valencia
Lima, Perú

sábado, 29 de octubre de 2022

Automatizando Excel (IX): El complemento Script Lab (3) - Ejemplos del uso del complemento

Seguimos con el uso del complemento Script Lab, esta vez veremos algunos ejemplos de scripts que vienen con el complemento y entenderemos cómo funcionan.

¡Nos vemos!

Abraham Valencia
Lima, Perú

jueves, 20 de octubre de 2022

Automatizando Excel (VIII): El complemento Script Lab (2) - Propiedades de las hojas

Seguimos con el uso del complemento Script Lab, esta vez aprenderemos a cambiar algunas propiedades de las hojas, así como a usar algunos métodos, todo de un modo bastante simple.

¡Nos vemos!

Abraham Valencia
Lima, Perú

jueves, 13 de octubre de 2022

Automatizando Excel (VII): El complemento Script Lab (1) - Introducción

Comenzamos con el uso del complemento Script Lab para, a través de la API de JavaScript para Office, poder automatizar Excel. Solo tienes que instalarlo, es gratuito y funciona con Excel 2016, 2019, 2021 y 365.

¡Nos vemos!

Abraham Valencia
Lima, Perú

jueves, 6 de octubre de 2022

Automatizando Excel (VI): Office Scripts de Excel - 5. Ocultar las hojas del libro

Hoy vamos a aprender a usar la instrucción IF del TypeScript, combinando su uso con ForEach y de eso modo ocultar las hojas del libro excepto aquella que decidamos mantener visible.

¡Nos vemos!

Abraham Valencia
Lima, Perú

miércoles, 28 de septiembre de 2022

Automatizando Excel (V): Office Scripts de Excel - 4. Insertar fórmulas y botones

Hoy seguimos con ExcelScript y su TypeScript, en específico vamos a ver cómo insertar fórmulas en una celda y copiarla en varias celdas de modo rápido. También veremos cómo usar un botón para activar el script y que ese mismo botón se pueda usar en Excel de escritorio.

¡Nos vemos!

Abraham Valencia
Lima, Perú

miércoles, 21 de septiembre de 2022

¿Cuáles son las funciones más usadas de Excel?

¿Cuáles son las funciones más usadas por los usuarios/as de Excel? Únete a nosotros (Abraham Valencia -Perú, Gerson Pineda - Honduras, Leopoldo Blancas - México - y Gabriel Raigosa - Colombia) y comentemos acerca de este interesante tema.

¡Nos vemos!

Abraham Valencia
Lima, Perú

lunes, 12 de septiembre de 2022

Automatizando Excel (IV): Office Scripts de Excel - 3. Range, For y ForEach

Hoy seguimos con ExcelScript y su TypeScript, en específico con algunos métodos del objeto WorkBook y el objeto WorkSheet, todo simple como para comenzar con este bonito lenguaje.

¡Nos vemos!

Abraham Valencia
Lima, Perú

domingo, 11 de septiembre de 2022

Excel y Access (IV): El uso de las fechas con WHERE y Between (SQL)

Tal y como comenté hace algunas semanas, hoy continuamos con SQL y Where, aplicado a fechas para importar datos a Excel desde Access. El archivo de ejemplo seguirá siendo el mismo que adjunté en el segundo artículo de esta serie, solo entren al enlace y descárguenlo: Enlace.

Lo primero es comentarle que cuando de fechas se trata, casi siempre hay complicaciones debido a que no es que todos los países usen el mismo tipo de formato; por ejemplo, en Perú el usado habitualmente es “dd/mm/yyyy” (entiéndase el “yyyy” como “aaaa”) pero en EE. UU. usan “mm/dd/yyyy”. Entonces, cuando usamos SQL ¿Cuál es el formato ideal? Pues sin duda yo les diría que es el siguiente: “yyyy-mm-dd” ¿Por qué? Porque SQL usa los estándares de la norma ISO 8601y respecto a fechas es la que les menciono. Entonces, por decirlo de un modo, con ese formato de fecha, no hay pierde.

Yendo al primer ejemplo, si queremos los datos de aquellas personas cuya fecha de nacimiento es menor al 01 de enero de 1978, basta colocar la sentencia de este modo:

sql = "SELECT * FROM Vendedores Where Nacimiento < #1978/01/01#"

Si se dan cuenta, coloqué la fecha en el formato que les mencioné previamente y he rodeado dicha fecha de almohadillas (#), eso último es importante para que el valor enviado se reconozca justamente como fecha. En nuestra hoja tendremos esto:

Ahora vamos más bien a obtener las fechas que son mayores al 01 de enero de 1978, es decir, aquellas posteriores. Basta cambiar el signo menor (<) por el signo mayor (>).

sql = "SELECT * FROM Vendedores Where Nacimiento > #1978/01/01#"

En esta ocasión tendremos esto en la hoja:

No olviden que también se puede usar el signo igual (=) junto con mayor o menor para tomar en cuenta la fecha que se usa en el criterio. Pero ¿qué pasas si lo que queremos obtener son los registros en un rango determinado de fechas? No hay problema, para eso tenemos a Between que es un operador que permite seleccionar valores entre un rango de datos, justamente. Between funciona del siguiente modo:

sql = "SELECT * FROM Vendedores Where Nacimiento BetWeen #1970-01-01# And #1979-12-01#" 

Para ese caso, estamos seleccionado las fechas entre el 01 de enero de 1970 y el 01 de diciembre de 1979. Al correr la macro este será el resultado:

Ojo con el uso del “And” y que la fecha inicial siempre va primero. Si quieren ir un poquito más allá y ordenar por fecha de naciemiento, basta agregar la cláusula “Order By” que justaente ordena los registros de una consulta de forma ascendente (por defecto) o descendente. Si queremos agregar eso, se hace de la siguiente forma:

sql = "SELECT * FROM Vendedores Where Nacimiento BetWeen #1970-01-01# And #1979-12-01# Order by Nacimiento"

Si queremos los datos de forma descendente, basta agregar lo siguiente:

sql = "SELECT * FROM Vendedores Where Nacimiento BetWeen #1970-01-01# And #1979-12-01# Order by Nacimiento Desc"

No olviden tomar muy en cuenta que, después de la clausula Order By se agrega el nombre del campo por le cual se quiere ordenar y, de ser necesario, se agrega el “Asc” o “Desc” antes del nombre del campo. Amigos/as, en esta ocasión vamos a llegar hasta ahí, en el próximo artículo usaremos variables y datos de celdas para construir nuestra cadena SQL, así como seleccionaremos solo algunos de los campos de la tabla del archivo Access.

¡Hasta la próxima!

Abraham Valencia
Lima, Perú

lunes, 5 de septiembre de 2022

Automatizando Excel (III): Office Scripts de Excel - 2. Los objetos Workbook y WorkSheet

Hoy seguimos con ExcelScript y su TypeScript, en específico con algunos métodos del objeto WorkBook y el objeto WorkSheet, todo simple como para comenzar con este bonito lenguaje.

¡Nos vemos!

Abraham Valencia
Lima, Perú

sábado, 3 de septiembre de 2022

Automatizando Excel (II): Office Scripts de Excel - 1. TypeScript y su grabadora

Hoy continuamos con los procesos para automatizar Excel a través de otros programas y si bien en este caso los Office Script no son otro programa propiamente dicho, al ayudar a automatizar Excel los he incluido en esta secuencia de videos.

¡Nos vemos!

Abraham Valencia
Lima, Perú

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ú

domingo, 31 de julio de 2022

Automatizando Excel con VSTO ¿Quieres tú aprenderlo?

Hoy en día nuevamente entra en boga el tema de proteger nuestras macros y, ante las nuevas formas que van apareciendo para automatizar Excel, VSTO parece volver a presentarse como alternativa que impide se pueda copiar dichos códigos y a la vez seguir automatizando las tareas de Excel, entonces ¿Es importante aprender otros lenguajes, a ti te gustaría conocer más sobre ellos? En este video les dejo algunos detalles del uso y ventajas del VSTO, pero sobre todo creo dejo algunas preguntas abiertas para el debate. Espero les guste y comenten..

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

miércoles, 27 de julio de 2022

Excel e historia (VI): Las desconocidas funciones "THAI"

Debe haber sido entre los años 2005 y 2006, cuando más y más gente usaba Excel 2002 (XP) y/o Excel 2003 cuando en varios foros preguntaban sobre cómo lograr que una función que muchos tenían para convertir números en letras pudiese usarse también para convertirlas en letras, pero en castellano, ya que aquella solo lo hacía en tailandés. Por si alguien aún no sabe de que función estoy hablando, pues me refiero a TEXTOBAHT (BAHTTEXT).

¿Qué hace dicha función exactamente? Pues convierte el número que se le pasa en el único argumento que tiene y lo convierte en letras en idioma tailandés y con el sufijo “baht” (también en tailandés) que es la moneda de Tailandia (Thailand).

=TEXTOBATH(100)

หนึ่งร้อยบาทถ้วน

Antes de seguir hablando de dicha función, vamos a recordar algunas cosas. Microsoft, a partir de Excel 4.0 (1992) comienza a lanzar al mercado versión en distintos idiomas y ya no solo en inglés, además de eso, a partir de Excel 97 en algunos paquetes incluye funciones que solo son compatibles con las versiones de Excel de ciertos idiomas. TEXTOBATH es una de ellas. Dicha función fue incluida en Excel 97, pero solo para la versión Thai. Fue recién con Excel 2002 (XP) que se incluyó en las versiones de distintos idiomas y es compatible con esa y con todas las futuras versiones, incluyendo Excel 2021 y Excel 365. Dicha función está documentada en la ayuda de Excel de versiones de inicio de este siglo, así como en la web de funciones que Microsoft mantiene actualizada (Enlace). A diferencia de SIFECHA (Enlace), esta función no está “oculta” y puede ser encontrada y usada con la herramienta “Insertar función” de Excel.

Pero ¿Por qué menciono una función oculta cuando hablo de TEXTOBATH? Pues, cuando se incluyó dicha función en Excel 97 Thai, pues, no vino sola; junto a dicha función vinieron diez funciones más para usarse en lo que se llaman las “funciones Thai” ¿Cuáles son estas? Pues son: AÑOTAI, CADENANUMTAI, DIASEMTAI, DIGITOTAI, ESDIGITOTAI, LONGCADENATAI, MESAÑOTAI, REDONDEAR.BAHT.MAS, REDONDEAR.BAHT.MENOS y SONNUMTAI. Todas estas funciones están disponibles en las versiones de Excel a partir de la 2002, tal como TEXTOBATH, pero Excel no da ayuda sobre ellas ni pueden usarse desde la herramienta “Insertar función”. Si uno coloca alguna de esas funciones Excel te la admite y hasta te mostrará el tipo de argumento a usarse, pero nada más y por eso para muchos/as es una de las tantas funciones “ocultas”.

Eso sí, para que dichas funciones actúen correctamente, hay que hacer algunos cambios de idioma/región en Office y/o en tu sistema operativo, pero ya eso es tarea para quien quiera experimentar mucho más. Por cierto, en internet hay muy poca información respecto a dichas funciones, lo que supongo es parte de que tan pocas personas las conozcan, aunque ahora ya todos/as los que lean esto las conocerán. ¿Por qué priorizó Microsoft el tailandés para algunas funciones? Por años se dijo que parte del equipo de desarrollo de Excel de mediados de los años noventa, del siglo pasado, era afín a la comida tailandesa, pero al parece en realidad fue solo iniciativa del equipo de Excel encargado de desarrollar las versiones compatibles con idiomas del este asiático, forma de trabajo que por cierto se dejó de lado hace muchos años, siendo mucho más en conjunto el desarrollo actual. Eso es todo por hoy ¡Hasta la próxima!

Abraham Valencia
Lima, Perú

lunes, 25 de julio de 2022

Excel y Access (II): Nuestro primer RecordSet. Extrayendo datos de Access

Hoy vamos con la segunda parte de como trabajar en Access desde Excel. Como ya se explicó la forma de lograr una conexión a Access desde Excel (Enlace), esta vez iremos un paso más allá, es decir, vamos a extraer datos de Access.

Como en esta ocasión vamos a comenzar con algo relativamente simple, supondremos que en nuestra base de datos solo tenemos una tabla con cinco campos.

Para extraer los datos vamos a usar un RecordSet. El objeto RecordSet de ADO se utiliza para mantener un conjunto de registros de una tabla de base de datos. Es importante aclarar que dicho objeto puede manejarse con dos métodos, Execute y Open del Recordset, ambos tienen tiene sus pros y/o sus contras; yo creo que es relativamente complicado decir cuál es mejor que el otro y diría, a su vez, que lo que hay que saber es cuándo es mejor usar un método u otro. Por ejemplo, para el caso de solo eliminar registros yo me inclinaría por Execute, pero para manejar algunas propiedades del RecordSet y sus datos, es mejor Open. A lo largo de estos artículos trataré, en lo posible, de poner ambos y/o si uso solo uno, aclarar porque es el método elegido e igual queda como tarea de ustedes leer más sobre dichos temas.

Volviendo a lo nuestro, como se supone que ya sabemos cómo lograr la conexión, vamos a ver lo del RecordSet. Declaramos la variable adecuada y creamos el objeto RecordSet del siguiente modo:

Dim rst As ADODB.Recordset 
Set rst = New ADODB.Recordset 

Como se dijo antes, para manipular, extraer, modificar, etc., los datos, también vamos a usar SQL y como las sentencias de dichos lenguajes se mandan como texto, vamos a crear una variable del tipo String para ello.

Dim SQL as String

Como en esta ocasión supondremos que queremos todos los registros de la única tabla, usamos las sentencias respectivas: Select, para seleccionar los campos, usamos asterisco (*) para indicar que son todos los campos los que nos interesan, From para seleccionar la tabla, y por último el nombre de la tabla.

SQL = “Select * From Vendedores”

Como ya está creado el RecordSet y tenemos la sentencia SQL requerida, solo falta abrir dicho objeto con los datos.

rst.Open Sql, cnn

No olvidar que cnn es la variable de la conexión que usamos en el artículo anterior. Por cierto, aquí estamos yendo al grano, si quieren profundizar más en los RecorsSet, verán que hay algunas propiedades del método Open que podrían usar, de ser necesario.

Finalmente, en el entendido que necesitamos todos los datos y no solo algunos y/o recorrer por algún motivo todos los registros, pegamos directamente los registros a la hoja con una sola instrucción, el método CopyFromRecordset.

Range("A2").CopyFromRecordset rst

Si todo estuvo bien, en su hoja tendrán lo siguiente:

Ah, como ven, no están los nombres de los campos, pero eso lo dejaremos para la siguiente vez. Por cierto, todo junto se vería así:

Option Explicit
'Todo Sobre Excel 
'Abraham Valencia 
'https://abrahamexcel.blogspot.com/ 
'https://www.facebook.com/TodosobreExcelAV/ 
'https://twitter.com/Todosobre_Excel 
'https://www.youtube.com/channel/UCxEe3aA5uGrtYDdboBT_ptg 
'Lima, Perú 
'Julio del 2022 

Sub MiPrimerRecordSet() 

Dim cnn As ADODB.Connection 
Dim rst As ADODB.Recordset 
Dim sql As String 

Set cnn = New ADODB.Connection 
Set rst = New ADODB.Recordset 

With cnn
	.Provider = "Microsoft.ACE.OLEDB.12.0"     
	.ConnectionString = "data source=" & ThisWorkbook.Path & "\Ejemplo.accdb"     
	.Open 
End With 

sql = "Select * From Vendedores" 

rst.Open sql, cnn 

Range("A2").CopyFromRecordset rst 

'Cerrar el RecordSet y la conexión no necesariamente es obligatorio 
rst.Close 
cnn.Close 

'Como les he dicho varias veces, vaciar las variables no es obligatorio, pero lo pongo para conocimiento 
sql = vbNullString 
Set rst = Nothing 
Set cnn = Nothing 

End Sub

Para conocimiento, una forma corta de lograr lo mismo sería esta:

With CreateObject("ADODB.Recordset")     
	.Open "Select * From Vendedores", _         "
		Data Source=" & ThisWorkbook.Path & "\Ejemplo.accdb;Provider=Microsoft.ACE.OLEDB.12.0"  
	Range("A2").CopyFromRecordset .DataSource 
End With

Y eso es todo por hoy, espero les haya gustado. Esta historia continuará.

Abraham Valencia
Lima, Perú

Descargue el ejemplo aquí: Enlace

miércoles, 20 de julio de 2022

"Desarmando" íconos de Excel (Office 365)

Hoy vamos a ver como "desarmar" algunos íconos de Excel que usamos en nuestras hojas y así obtener más objetos de ello.

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

lunes, 11 de julio de 2022

Excel y Access (I): Realizando nuestra primera conexión a un archivo Access

En muchas ocasiones, y durante años, he leído/visto preguntas relacionadas a cómo usar datos almacenados en Access, pero a través de Excel, así que hoy comenzaremos a ver cómo se hace eso paso a paso.

Lo primero es comentar que usaremos ADO para lo mencionado. Por si aún no saben lo que es ADO, son las iniciales de ActiveX Data Objects, que es un mecanismo para comunicarse con bases de datos y así poder trabajar con sus datos. Una de las ventajas es su compatibilidad con VBA y, además, permite conexiones con Access. También vamos a usar los Recordset, que son estructuras de datos cuya utilidad es la de almacenar información desde una tabla. Por último, para el manejo de datos usaremos SQL (por sus siglas en inglés Structured Query Language), que es un lenguaje de consulta estructurada que sirve para administrar y recuperar información de sistemas de gestión de bases de datos relacionales. Ojo, hay otras formas de hacer conexiones o utilizar otras propiedades y/o formas de manipular registros, pero yo prefiero las recomendadas y que usaré ahora. Ah, si bien ya he colocado ejemplos de todo esto en el blog e incluso he publicado un par de artículos sobre conexiones de Excel con MySQL, lo que haré a partir de hoy con Access será mucho más secuencial, estructurado y detallado a través de más de un artículo; de ese modo incluso podrían aplicarlo a otros tipos de bases de datos.

Ahora sí, regresando a Excel y Access, en esta ocasión, por ser la primera, básicamente vamos a establecer la conexión a una base de datos de Access, para eso lo que haremos ahora es activar la referencia a “Microsoft ActiveX Data Object 6.1 Library”, en donde el 6.1 puede variar dependiendo de tu versión de Office y/o la librería que desees usar.

Lo primero que haremos será declarar la variable (de objeto) que usaremos para la conexión:

Dim cnn As ADODB.Connection

Luego daremos valor a esa variable asignándole una conexión:

Set cnn = New ADODB.Connection

Del objeto conexión de ADO, lo que nos interesa son dos propiedades y un método: ConnectionString, Provider y Open, respectivamente (para ver otras puede entrar aquí: Enlace).

Cuando hablamos de Provider o proveedor, hacemos referencia a un conjunto de bibliotecas que se utiliza para comunicarse con una fuente de datos. En este caso vamos a usar un archivo Access del tipo *.accdb llamado "Ejemplo", por lo que necesitaremos tener el instalado “Microsoft.ACE.OLEDB.12.0”. Si de casualidad no lo tienen, pueden descargarlo de aquí: Enlace. A la propiedad Provider vamos a darle justamente dicho valor.

Para la propiedad ConnectionString podemos fácilmente recurrir a esta web para adaptar a nuestra necesidad: Enlace.

En el caso de método Open, basta llamarlo para establecer la conexión con el origen de datos.

Entonces, dicho eso, y en el supuesto que vamos a trabajar con el archivo Excel en la misma carpeta que nuestro archivo Access, esta parte quedaría así:

With cnn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "data source=" & ThisWorkbook.Path & "\Ejemplo.accdb"
    .Open
End With

La cantidad de líneas incluso podrían ser menos, pero eso ya queda como tarea para ustedes ya que ko importante hoy es aprender y que se entienda todo.

Podríamos tener todo junto de este modo:

Option Explicit 
'Todo Sobre Excel 
'Abraham Valencia 
'https://abrahamexcel.blogspot.com/ 
'https://www.facebook.com/TodosobreExcelAV/ 
'https://twitter.com/Todosobre_Excel 
'https://www.youtube.com/channel/UCxEe3aA5uGrtYDdboBT_ptg 
'Lima, Perú 
'Julio del 2022 

Sub MiPrimeraConexion()

Dim cnn As ADODB.Connection

Set cnn = New ADODB.Connection

With cnn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "data source=" & ThisWorkbook.Path & "\Ejemplo.accdb"
    .Open
End With

MsgBox "Conexión realizada con exito", vbOKOnly, "Todo Sobre Excel"

cnn.Close 'Esto cierra la conexión pero no es obligatorio ponerlo para este caso

Set cnn = Nothing 'Esto descarga la variable, pero en realidad el End Sub también lo hace
 
End Sub

Entonces amigos y amigas, hoy hemos aprendido a conectar, sé que probablemente estén con ansiedad de seguir, pero vamos paso a paso, aspí que eso es todo por hoy. Hasta la próxima!

Abraham Valencia
Lima, Perú

viernes, 8 de julio de 2022

Mis redes favoritas de Excel (I) #TIPSTSE3

Hoy quiero recomendar algunas redes de Excel, parte de mis favoritas, sobre todo de gente que considero mis amigos/as. Vean y entérense de foros, grupos de Facebook, blog y canales de Excel.

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

lunes, 4 de julio de 2022

Excel e historia (V): La función "oculta" SIFECHA

Quiero comenzar diciéndoles que, tal como se lee en el título, hoy vamos a hablar un poco de la historia de Excel y SIFECHA; si ustedes lo que desean es ver cómo funciona dicha función, miren por aquí: Enlace. Eso sí, Antes de pasar a hablar de la función SIFECHA por si misma, vamos a recordar a algunas cosas sobre Excel y sus funciones ya que incluso quizá haya personas que no saben lo que pasaré a narrar.

Para crear Excel, Microsoft se basó en su programa Multiplan, primera hoja de cálculo desarrollada por Microsoft, en 1982, y que no había podido superar a Lotus 1-2-3 en posicionamiento y ventas. El 30 de septiembre de 1985, Microsoft puso en venta la primera versión de Excel (1.0) para las Macintosh (MAC) de Apple; esta versión de Excel mantenía funciones que ya se usaban en Multiplan, teniendo ellas incluso el mismo nombre y tipo de funcionabilidad (AVERAGE, COUNT, etc.) y manteniendo la compatibilidad con dicho programa. Asimismo, para que Excel sea compatible con Lotus 1-2.3, se incluyeron algunas funciones de dicho programa con el mismo nombre y funcionabilidad (ACOS, ASIN, etc.), en un intento de comenzar a lograr la migración de los usuarios/as de dicho programa hacia Excel, pudiendo usar sus propios archivos previamente creados en Lotus.

Ahora sí, volvamos a SIFECHA. Por años hemos sabido que SIFECHA es una función que existe en Excel desde hace algunos años, que es útil, que fue documentada en Excel 2000 y después por años dejada de lado por Microsoft, aunque hoy sí está en la ayuda en línea (Enlace), además aún hoy podemos seguir usándola, aunque no está en la lista de funciones del Excel ni puede ser usada con la herramienta “Insertar función” y no hay descripción alguna que nos dé la “Intellisense” cuando usamos dicha función. Todo eso podría tratar de explicarse cuando recordamos, como nos dijo Microsoft por años, que finalmente SIFECHA es una función “heredada” de Lotus 1-2-3, pero lo raro es que el año 1985, Lotus 1-2-3 no tenía una función así y si revisamos Excel 1.0, tampoco existía, entonces ¿No que fue heredada de Lotus 1-2-3 como se hizo con varias otras funciones de dicho programa que se incluyeron en Excel 1.0?

Pues lo que ocurrió fue lo siguiente. En 1987 Microsoft lanza al mercado Excel 2.0, con la particularidad de que dicha versión funcionaba en el sistema operativo Windows, mientras Lotus 1-2-3 seguía siendo solo compatible con D.O.S. A inicios de 1990, Windows se iba haciendo más popular al igual que Excel. Recién en esos años Lotus Software incursiona en Windows con su Lotus 1-2-3/W (para Windows), incluyendo nuevas herramientas y funciones a comparación de sus versiones para D.O.S. A pesar de ellos, el mercado estaba cada vez más copado por Excel.

En junio de 1993 Lotus Software lanza Lotus 1-2-3 para Windows Release 4, versión mejorada que incluía varias nuevas decenas de funciones y herramientas, con lo que pensaban competir con Excel. La particularidad de dicha versión es que incluía la función SIFECHA (DATEDIF) como una de las novedades. Por esos meses ya Microsoft anunciaba el lanzamiento de su siguiente versión de Excel, la cual aún estaba en revisión. Esos meses el equipo de Microsoft que veía lo nuevo para Excel, decide integra a SIFECHA para mantener la compatibilidad de dicha función de Lotus 1-2-3 con el programa, por lo que cuando Excel 5.0 ve la luz el 01 de octubre de 1993, incluía dicha función, aunque no se le menciona en las guías de Microsoft ni se incluía en su Ayuda, pero sí es comentada por varios usuarios y en algunas revistas, incluso por personal de Microsoft. Es bueno mencionar que las funciones heredadas de Lotus 1-2-3 y Multiplan en la versión 1.0 de Excel, sí estaban incluidas en guías y ayudas de Excel. Justamente eso lleva a Microsoft a documentar dicha función en Excel 2000, aunque, como ya comenté, igual se retiró dicha documentación en versiones posteriores.

Hoy en día SIFECHA sigue estando vigente en todas las versiones de Excel posteriores a la 5.0, pero Microsoft sigue sin ofrecernos facilidades para usarla en nuestras hojas y al parecer eso no cambiará, es en la práctica una función “oculta”, aunque les adelanto que no es la única.

Espero les haya gustado, hasta la próxima.

Abraham Valencia
Lima, Perú

miércoles, 29 de junio de 2022

Foros y grupos de Excel ¿Ayudar o trabajar para otras personas? (II)

Hay muchos grupos y foros sobre Excel que buscan ayudar a usuarios y usuarias de tan buen programa, pero ¿Toda la gente que ingresa a ellos busca ayuda o que le hagan todo el trabajo o la tarea? ¿Hacen bien aquellos/as que finalmente sí le hacen todo eso a los demás? ¿Ayuda o trabajar gratis para otros/as? ¿Qué opinan ustedes?

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

viernes, 24 de junio de 2022

Agilizar archivos de Excel que tienen imágenes en sus hojas #TIPSTSE2

Como usuarios o usuarias de Excel, solemos cometer muchos errores que hacen que nuestros archivos se vuelvan de gran tamaño, ocupando muchos megas y, además, convirtiéndose en difíciles de manejar o muy lentos. Hoy vamos a dar a conocer algunos tips para evitar eso, en este caso es una alternativa para agilizar los archivos de Excel que tienen muchas imágenes.

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

martes, 21 de junio de 2022

Gráficos con color condicional

Creo que todos/as saben que cuando usamos gráficos podemos cambiar los colores de ellos y/o de algunas de sus partes a través de las herramientas que Excel nos brinda, claro, esto hay que hacerlo de forma manual o a través de macros, lo primero hace que nos tomemos un poco más de tiempo y lo segundo, pues, no todos quieren y/o saben usarlas. Hablando de colores, no es inhabitual que a veces se quiera aplicar colores dependiendo de los valores de los campos de los gráficos, algo así como aplicar un formato condicional y se necesite que sea de forma automática, Excel no tiene una herramienta que haga algo así, pero usando columnas auxiliares se puede lograr. Ah, bueno, podría hacerse con macros para no usar columnas auxiliares, pero la idea es no necesariamente usarlas.

Para el ejemplo usaremos una Tabla con alumnos y notas, suponiendo que la escala de notas va del 0 al 20, en donde se aprueba con 11 como mínimo y deseamos pintar de un color los aprobados y de otro color los desaprobados.

Vamos a agregar dos columnas auxiliares, una para los desaprobados y otra para los aprobados. En la columna “Desaprobados” agregaremos la siguiente fórmula:

=SI([@Nota]<=10;[@Nota];0)

En la columna “Aprobados” será la siguiente fórmula:

=SI([@Nota]>=11;[@Nota];0)

Si hicimos todo bien deberíamos tener algo así ahora:

Como los ceros (0) no nos interesan, vamos a sombrear los datos de las columnas de Desaprobados y Aprobados y usando “Formato de celdas…” ahí vamos a ir a la pestaña “Número” y en “Categoría” elegiremos “Personalizada” e ingresaremos lo siguiente:

0;;;

Ah, no olvidar aquí, así como en las fórmulas anteriores, que yo uso punto y coma (;) como separador de argumentos/listas, si tú usas coma (,) solo reemplaza. Dicho eso, continuemos.

Ahora lo que vamos a hacer es sombrear la columna de alumnos y usando la tecla Control (Ctrl) vamos a su vez a sombrear/seleccionar las columnas de desaprobados y aprobados.

Ahora vamos a insertar un gráfico, en mi caso he elegido el de columnas en 2D apiladas. Deberían tener como resultado algo así, en dondelo importante es que cada grupo tiene un color distinto en sus respectivas columnas.

Evidentemente ustedes pueden cambiar a gusto los detalles del gráfico final.

Pueden hacer esto mismo con varios tipos de gráficos, pero en algunos casos, por ejemplo, en lugar del formato personalizado sugerido para evitar los ceros (0), quizás sea mejor usar la función NOD y en algunos otros casos posiblemente tengan que superponer las columnas para evitar espacios grandes entre ellas por dichos ceros. Una última cosa, no será tan simple con todos los tipos de gráficos, por eso sobre todo para estos casos recomiendo las columnas 2D, pero por supuesto que eso ya será elección de cada quien.

Aquí el ejemplo: Enlace.

Espero les sea útil, hasta la próxima.

Abraham Valencia
Lima, Perú

lunes, 20 de junio de 2022

El futuro del VBA de Excel

¿Cuál es el futuro del VBA de Excel? La semana pasada conversamos ese tema con grandes amigos, así que los/as invito a ver dicha interesante conversación y opinar sobre ello.

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

viernes, 10 de junio de 2022

Excel e historia (IV): Los Diálogos de Excel 5.0

Ya hemos hablado de la aparición del VBA con Excel 5.0 (1993), así como hemos visto varios detalles de su historia, pero de lo que no dimos detalles son de los llamados, hoy en día, “Diálogos de Excel 5.0” que incluso pueden ser usados en versiones más modernas de Excel.

Inicialmente se llamaban “Hoja de diálogo” (Dialog Sheet”) y se insertaban al igual que las hojas y son formularios que pueden ser controlados con VBA.

Además de estos diálogos, se incluyen con objetos llamados “Controles” (Hoy “Controles de formularios”) que pueden ser insertados en las hojas o en los Diálogos (que son finalmente formularios) e incluso puede ser controlados también con VBA. Los controles en la versión 5.0 de Excel se veían así (sin la indicación de los nombres, evidentemente):

Imagen tomada de internet

De los 16 botones/controles que vemos ahí, 12 aún se encuentran en una opción similar en las versiones actuales de Excel.

Tres de ellos son partes de un grupo de la pestaña “Programador” de la Cinta de Opciones de versiones actuales.

Y uno (“Toogle Grid”) de dicho botones fue eliminado ya que era solo para alinear los controles. No es tema de hoy hablar sobre las propiedades, y otros, de dichos controles (lo que podría hacer en otros artículos).

Cuando se insertaban estos Diálogos en el libro de Excel, en automático traían dos botones, uno llamado “Aceptar” (“OK”) y otro llamado “Cancelar” (“Cancel”), los que incluso se siguen incluyendo en todas las versiones posteriores de Excel, incluidas las actuales.

Con Excel 95 (7.0) se mantienen los Diálogos con apenas mínimos cambios en sus propiedades y eventos de los controles. Excel 97 (8.0) trae como novedad los Userform de VBA que permiten objetos ActiveX, con lo que rápidamente se van dejando de lado el uso de los Diálogos. Todas las versiones posteriores, incluyendo Excel 2021 y Excel 365, siguen incluyendo, por compatibilidad, dichos Diálogos, los que pueden ser incluidos al dar clic derecho a cualquier pestaña de cualquier hoja, luego eligen “insertar…” y una vez hecho eso esta vez eligen “Diálogo de Excel 5.0”. Aquí un ejemplo: Enlace.

Hasta la próxima.

Abraham Valencia
Lima, Perú

miércoles, 8 de junio de 2022

Algunos errores que hacen lentos y “pesados” nuestros archivos de Excel #TIPSTSE1

Como usuarios o usuarias de Excel, solemos cometer muchos errores que hacen que nuestros archivos se vuelvan de gran tamaño, ocupando muchos megas y, además, convirtiéndose en difíciles de manejar o muy lentos. Hoy vamos a dar a conocer algunos tips para evitar eso.

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú

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ú