miércoles, 18 de marzo de 2020

Entrevista a Sergio Alejandro Campos Hernández - MVP Excel

Hace ya más de diez años conocí en los foros de Excel a Sergio Alejandro Campos Hernández. En aquel entonces Facebook no era tan usado y mucho menos para difundir Excel o responder preguntas acerca de aquel programa. Aún recuerdo cuando fue nombrado por primera vez MVP (2012), sinceramente me dio mucha alegría y le escribí para felicitarlo y me dijo que cuando yo había sido MVP, había sido una de las personas que lo inspiró. Aunque yo me retiré de los foros por mucho tiempo, él sí mantuvo el entusiasmo permanente, sigue siendo MVP y sin duda es una de los más conocidos y mejores conocedores de VBA y Excel que tiene Latinoamérica solo basta recordar que prácticamente no hay usuario/a de Excel que no conozca su web: Enlace

En esta época en que cada vez Excel acepta más datos y/o permite trabajar con más de ellos usando las herramientas Bi, y cuando vuelven muchos a anunciar la “muerte del VBA” o a creer que JavaScrit/TypeScript terminarán con dicho lenguaje, Sergio nos da su importante opinión y definitivamente nos sigue alentando a usar Excel y VBA y sobre todo a recordar que “el límite es tu imaginación”. Les dejo aquí una interesante entrevista que le hice y que sé los seguirá inspirando a aprender más de Excel.

1- ¿Cuándo comenzaste a usar Excel y cuándo es que te diste cuenta que era tu favorito?

Cuando tenía 17 años entré a trabajar de Auxiliar de almacén en una fábrica de calzado. En esas fechas no tenía conocimientos de computación y cualquier cosa que mis compañeros hicieran en la computadora que tenía Windows 95, se me hacía maravillosa.

Como todo lo que veía en la computadora se me había desconocido, pero a la vez interesante, fue que decidí tomar un curso de Informática básica, donde vimos desde Office, pasando por programación hasta diseño Web, una repasada de todo en año y medio.

Un día, cuando ya conocía algo de informática, pero muy poco de Excel, uno de mis compañeros abrió un archivo que tenía muchos botones. Me dijo “aquí vas a ingresar esta cantidad y luego aprietas este botón”. Cuando lo hice, vi que todo se movía, datos por aquí y por acá; pareciera que la computadora se había vuelto loca. Como en Office 95 la programación de macros estaba en una hoja de Módulo, fue que sin querer abrí esa hoja y vi muchas palabras en inglés. Era código VBA. Ese fue el momento.

2- ¿Qué es lo que más te gusta de Excel?

Me gustaría comenzar diciendo que realmente poco no me gusta de Excel, porque ha sido mi herramienta principal desde hace muchos años. Pero respondiendo la pregunta, te diría que me gusta que siempre va un paso adelante. Herramientas o funcionalidades que el mercado necesita, se implementan en Excel. Si bien no todo se puede hacer en Excel, Microsoft se encarga de hacer de alguna u otra manera pegárselo para que sí se pueda. Ya hemos visto cómo Excel se robó Power Pivot de SQL Server.

Tengo una máxima “cuando me piden algo, primero veo si lo puedo realizar en Excel”.

3- En el "eterno" debate de si Excel debe ser usado como base de datos o no ¿consideras que Excel ganó la batalla gracias a la incorporación de Power Query y Power Pivot?

No sé si decir que Excel ganó la batalla, pero sí se decir que Microsoft le está dando super poderes con los complementos Power. Es claro que Excel no es una base de datos, pero de cierto modo y para proyectos pequeños podemos hacer alguna serie de trucos con fórmulas Tablas dinámica, macros, para “simular” que nuestra información se guarda en una base de datos.

Sin embargo, con Excel sí podemos trabajar con datos provenientes de una base de datos, ya que tenemos la facilidad de usar conectores hacia los motores más famosos de base de datos, y hacer que Excel funcione como un Front End.

La información crece a niveles brutales y en ciertas ocasiones Excel es superado cuando deseamos trabajar con archivos o tabla de millones de registros, y por más que tengamos un buen equipo de cómputo o Excel de 64 bits, simplemente es imposible. Es aquí donde entran los complementos de Power Query para transformar datos y Power Pivot para modelarlos.

4- ¿Qué y/o quiénes te animaron a convertirte en MVP?

Me gusta esta pregunta. Fíjate que fue un proceso de auto motivación, te cuento. A raíz de que conozco Excel, a la par conozco los Foros de Microsoft. En la época de los 90’s y a principios de los 2 mil, los foros eran un lugar muy concurrido para hacer todo tipo de preguntas relacionadas con productos de Microsoft. No existía Facebook ni Youtube, por lo que para buscar expertos los lugares eran contados.

En los foros todos podían realizar preguntas y también todos podían contestar, pero Microsoft daba distintivos a los que respondían más preguntas.

No se me olvida que cada que preguntaba algo, había una persona que ‘siempre contestaba’ (literal usaba comillas simples a diestra y siniestra). Esa persona era Héctor Miguel Orozco. Para mí, Héctor era el super héroe, porque parecía que se sabía todas las respuestas. Pero Héctor no estaba solo, también estaba KL y obvio Abraham Valencia. Era como una lucha de poderes, a ver quién respondía más preguntas.


Junto a cada respuesta venía el nombre y un título. Hubo unas siglas que me llamaron la atención, MVP. Luego averigüé que era un tipo de galardón que Microsoft otorgaba a las personas que desinteresadamente apoyaban a la comunidad, para este caso, respondiendo preguntas en los foros. Luego supe que no era la única manera.

Pasado un tiempo ya tenía clarísimo qué era ser un MVP y yo quería formar parte de ese selecto grupo. Combinaba mi participación en los foros entre preguntando y respondiendo preguntas.

Para llegar a ser MVP comprendí que tenía que ayudar a la comunidad, y una de las maneras de hacerlo era teniendo un sitio. En el año 2010 decido crear un Blog en la plataforma de Wordpress y comenzar a subir tutoriales sobre las preguntas de los foros o preguntas que me hacían mis compañeros de oficina. Cuando tenía más de un año con el sitio, decido promoverme como MVP y para el 2012 ya lo había logrado.

 

5- ¿Qué recomiendas hacer a otras personas que quieren también ser MVP?

Ser MVP no es fácil, sobre todo porque se debe tener un compromiso de aportar conocimiento a la comunidad, sin esperar nada a cambio, es como un servicio social.

A mí me motiva el saber que pertenezco a un grupo de personas con la actitud de ayudar, de aportar con mi granito de arena al conocimiento masivo, pero también sé que tengo que ser disciplinado porque hay que tener una constancia en las contribuciones.

Mi recomendación es que sean pacientes y compartan conocimiento. Ah, y háganse amigo de un MVP, pero no para que sea quién les responda sus preguntas, sino para que sea su mentor en el camino hacia ser MVP.

6- Microsoft anunció el fin de VBA con su versión 6.3, pero luego sacaron VBA 7.0 y 7.1. Lo mismo ocurrió con la aparición de VSTO. Ahora con la aparente priorización de Microsoft por trabajar en la nube ¿crees qué VBA llegó ahora sí a su fin?

(Risas)

Sinceramente no creo. Ismael Romero, MVP, dijo que seguramente nos tocará jubilarnos y VBA seguirá vivo.

La fuerza de VBA es toda la comunidad de usuarios que estamos generando proyectos con este lenguaje, y creo que sería una decisión arriesgada matarlo.

Por otro lado, VBA actualmente es una opción más para desarrollar en Office. Con la llegada de .NET Microsoft decide impulsar VSTO para crear aplicaciones de Office desde Visual Studio y en años recientes, con el tema Nube, toma el camino correcto introduciendo lenguajes como JavaScipt, TypeScript y Phyton al set de plataformas para desarrolladores de Office.

Ya lo he visto en mis videos, independiente el tiempo de vida que le quede a VBA, debemos ser innovadores y mirar hacia el futuro, ver las nuevas necesidades y aprender cosas nuevas.

7- ¿Consideras qué quiénes programamos en VBA y Excel, ahora estamos obligados a aprender a hacerlo con leguajes como JavaScript y sus "derivados" como TypeScript y otros lenguajes habituales para web?

No lo veo como obligación, más bien como una alineación de objetivos. Si estás cómodo desarrollando en VBA y te es suficiente para lo que necesites en tu empleo o para tus clientes, no está mal quedarse ahí.

Por otro lado, si estás en un sector que es empujado hacia otras plataformas como la nube, no tenemos opción más que actualizarnos.

También todo dependerá de qué alcance quieras que tengan tus desarrollos. Si quieres que sean siempre para escritorio usa VBA y conoce algún lenguaje .NET como Visual Basic o C#; si quieres que tus desarrollos sean compatibles tanto en escritorio como Web, mira hacia JavaScript, TypeScript y cualquier otro lenguaje que nos permita tener este tipo de convergencia.

8- ¿Algún mensaje final para los aficionados a Excel?

En mi opinión, la clave para dominar Excel es ser creativos. Para un problema siempre hay más de una solución.

No escatimen en su desarrollo profesional y en su capacitación. Existen muchas maneras de aprender, tenemos sitios Web, canales de Youtube, plataformas de pago, etc.

Y como siempre digo “el límite es tu imaginación”.

--------------------------------------------------------------------

Abraham Valencia

miércoles, 15 de enero de 2020

Exportando archivos Excel a PDF (II)

Hace varios meses expliqué, para aquellos/as que recién inician en este mundo del VBA, cómo convertir archivos Excel en PDF (Enlace), pero considero que algunas cosas quedaron en el aíre y espero hoy sí no dejar nada de lado.


Una de las primeras cosas que la gente pregunta es si existe la posibilidad de que, a través del método ExportAsFixedFormat, se pueda cambiar la configuración de las páginas u hojas que queremos convertir en PDF. La respuesta es no. Dicho método no tiene parámetros para lograr eso porque las características de configuración de las hojas de Excel están determinadas por las de la impresora activa, es decir, depende de los driver de dicha impresota o impresoras. Entonces, cosas como los tamaños de página disponibles no dependen del Excel ni del ExportAsFixedFormat, sino, de la impresora. Entonces, para tener una hoja en vertical u horizontal, con el tamaño de márgenes que necesitemos o con páginas A4, A3, etc., tenemos que realizar dichos cambios antes de mandaar a exportar en PDF. Si queremos que dichos cambios sean a través de VBA, sugiero usar la grabadora de macros para obtener el códio (no olvidar depurarlo/mejorarlo), los colocamos previos a exportar y verán como el archivo PDF tendrá las mismas características que hemos dado previamente. Ah, repito, todo dentro de lo que permita la impresora; si la impresora no permite hojas A3, no podremos darle dicho tamaño, tendremos que usar una impresora que lo permita.


Otro de los temas habituales que veo en los foros y grupos es sobre cómo crear un archivo PDF pero solo usando algunas de las hojas del libro. Antes de ver la respuesta directa, miremos las opciones que nos da el mismo Excel. Vamos a la pestaña "Archivo", elijamos "Exportar", démosle clic al botón "Crear documento PDF/XPS" 

lunes, 7 de octubre de 2019

Interactuando con Microsoft Word (I): Enviar datos de Excel a Word (VBA)

En innumerables ocasiones he visto que mucha gente pregunta como enviar datos de Excel a Word, he de ser sincero y lo primero que se me viene a la cabeza es “que lo hagan desde Word usando Combinar Correspondencia”, pero en muchas de esas mismas ocasiones quieren y/o necesitan hacerlo desde Excel o en todo caso no solo enviar datos por partes sino más bien enviar incluso tablas o rangos completos. ¿Cuál es la solución? Definitivamente usar macros (VBA).

Para empezar, es importante aclarar que, si bien vamos a realizar la programación desde el entorno del VBA de Excel, como vamos a interactuar con Microsoft Word, lo que haremos es hacer referencias a los objetos de dicho programa, es decir, casi como usar el VBA desde el mismo Word. Dicho eso, lo primero que haremos es suponer que tenemos los siguientes datos:

Luego, como la idea es trabajar con Word, declararemos una variable respectiva y crearemos dicho objeto Word.

Dim MiappWord As Object 
Set MiappWord = CreateObject("Word.Application") 

Luego, como ya tenemos el Word listo, lo que haremos es crear un documento nuevo en blanco.

MiappWord.Documents.Add

Una vez hecho eso vamos a copiar el rango que necesitamos enviar a Word:

Hoja1.Range("A1:E97").Copy

Como ven ahí, en esta ocasión uso el nombre del módulo de la hoja para hacer referencia al rango de dicha hoja, no estoy usando ni Sheets ni WorkSheets ¿por qué? En realidad, es una buena forma de hacer referencia a las hojas sobre todo cuando más de una persona usa el archivo ya que si cambian el nombre de la hoja, y por ejemplo dice Sheets(“Hoja1”), dicha instrucción de VBA dejaría de servir, haciendo referencia al módulo de la hoja hay mayor garantía de que no se cambie (no es que nadie sapa como hacerlo, claro). Pero mejor volvamos a lo nuestro.

Como ya tenemos los datos en el portapapeles, ahora lo que haremos es pegarlos en Word, para ello utilizaremos el método PasteExcelTable que pega celdas de Excel en Word. Más referencias aquí: Enlace. Entonces, usaremos lo siguiente:

MiappWord.Selection.PasteExcelTable False, False, False

Ahora haremos visible el Word para ver el resultado.

MiappWord.Visible = True

Si leyeron el enlace recomendado, verán que lo que hemos hecho es pegar las celdas de Excel copiadas, manteniendo el formato de origen, por lo que debemos tener lo siguiente en nuestro archivo Word:

Vamos a probar diversas opciones del método sugerido, pero en cada ocasión vamos a insertar una página nueva en Word para que se note cada vez que pegamos los datos. Al método sugerido, vamos a agregarle un par más para que prueben. Comentaré en el código que es lo que hace cada uno.

With MiappWord
     'usar estilos de destino
     .Selection.PasteExcelTable False, True, False
     .Selection.InsertNewPage
     'vincular y mantener formato de origen
     .Selection.PasteExcelTable True, False, False
     .Selection.InsertNewPage
     'vincular y usar estilos de destino
     .Selection.PasteExcelTable True, True, False
     .Selection.InsertNewPage
     'imagen
     .Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
         Placement:=wdInLine, DisplayAsIcon:=False
     .Selection.InsertNewPage
     'conservar solo texto
     .Selection.PasteAndFormat (wdFormatPlainText)
 End With 

Para que esta última parte funcione sin mayor dilema, activen la siguiente referencia a Microsoft Word:

Si deseamos también podemos guardar el archivo.

MiappWord.ActiveDocument.SaveAs Filename:=ThisWorkbook.Path & "\miarchivo.docx"

Por último, podríamos tener una macro así ya con todo ordenado:

Sub EnviardatosaWord()

Dim MiappWord As Object 

Set MiappWord = CreateObject("Word.Application") 

MiappWord.Documents.Add 
Hoja1.Range("A1:E97").Copy 

With MiappWord
     'mantener el formato de origen
     .Selection.PasteExcelTable False, False, False
     .Selection.InsertNewPage
     'usar estilos de destino
     .Selection.PasteExcelTable False, True, False
     .Selection.InsertNewPage
     'vincular y mantener formato de origen
     .Selection.PasteExcelTable True, False, False
     .Selection.InsertNewPage
     'vincular y usar estilos de destino
     .Selection.PasteExcelTable True, True, False
     .Selection.InsertNewPage
     'imagen
     .Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
         Placement:=wdInLine, DisplayAsIcon:=False
     .Selection.InsertNewPage
     'conservar solo texto
     .Selection.PasteAndFormat (wdFormatPlainText)
     .ActiveDocument.SaveAs Filename:=ThisWorkbook.Path & "\miarchivo.docx"
     .Visible = True
 End With 

Application.CutCopyMode = False
Set MiappWord = Nothing 
MsgBox "Todo listo" 

End Sub 
Espero les sea útil. Hasta la próxima.

Abraham Valencia
Lima, Perú

Descargue el ejemplo de aquí

lunes, 30 de septiembre de 2019

Usando SOLVER para hallar los sumandos de un total

En ocasiones he visto en diversos foros y grupos (Facebook) de Excel que algunos/as usuarios/as tienen la necesidad de hallar los números cuya suma sirva para obtener un total buscado, es decir, necesitan hallar los sumandos de una suma o total.  Aunque hay varias formas de hacerlo (ninguna es simple) en esta ocasión vamos a usar el complemento SOLVER. Manos a la obra.

Empecemos colocando algunos valores en el rango A1:A10.

Por si no se dieron cuenta la suma de todos esos valores da 960 por ende, el total que buscaremos no debe superar ese número.

Ahora nos vamos a situar en A1 y le daremos un formato condicional con la opción de “Nueva regla de formato” y ahí vamos a elegir “Utilice una fórmula que determine las celdas para aplicar formato” y en “Dar formato a los valores donde esta fórmula sea verdadera” vamos a colocar lo siguiente:

=B1=1

Esto es lo que deberíamos tener hasta el momento:

Ahí mismo con el botón “Formato” podemos aplicar, por ejemplo, un fondo de color rojo.

Le damos clic al botón “Aceptar” y luego del mismo modo al cuadro de dialogo anterior. Para no estar dando Formato Condicional a celda por celda, solo copiaremos el formato de este modo:


Ahora, para nuestro ejemplo, vamos a introducir la siguiente fórmula en B11:


Ahora activaremos la herramienta SOLVER, y en el cuadro de dialogo correspondiente vamos a llenar así:

Yo he colocado 600, pero evidentemente ustedes elegirán el número total de su conveniencia. Ahora le daremos clic al botón “Agregar” y en el nuevo cuadro de diálogo dejaremos así las opciones:

Hemos elegido “bin” (de binario) para que los resultados sean 0 (cero) o 1 (uno). Démosle clic a “Aceptar” y obtendremos esto:


Ahora clic a “Resolver” y en el siguiente diálogo igual en “Aceptar”.

Si todo salió bien las celdas con los valores que suman 600, estarán resaltadas con fondo de color rojo.

Prueben con diversos totales y verán que consiguen resultados similares. Ah, eso sí, el total debe ser un número cuyos sumandos se encuentren sí o sí en las alternativas a marcar; asimismo, si hay más alternativas cuyos sumandos den el mismo resultado, la herramienta usada en esta ocasión solo nos brindará un grupo. Igual sé que les será útil.

Abraham Valencia
Lima, Perú