lunes, 30 de julio de 2018

Excel y Google Drive

Definitivamente una de las “nubes” más usadas para compartir archivos hoy en día debe ser “Google Drive” y definitivamente muchos usuarios de Excel también la usan para compartir y/o trabajar archivos con otras personas, priorizando incluso su uso por sobre “OneDrive” y/o Excel Online.

Lo que muchos/as no saben es que cuando se carga un archivo de Excel en “Google Drive” y se intenta abrir en línea, lo que dicha “nube” hace es convertir dicho archivo en una “Hoja de Cálculo de Google” que es, en estricto, otro programa y por ende otro formato de archivo, es decir, deja de tener formato de Excel a pesar de que el aspecto es muy similar e incluso los nombres de muchas funciones son iguales (Google las hizo así por cuestiones de compatibilidad), lo que no es de extrañar dado que ambos son el mismo tipo de programa: Hojas de cálculo (y sí, la “Hoja de Cálculo de Google” lo que hizo es tomar el nombre en base al tipo de programa).

Algo importante es no olvidar que así haya compatibilidad entre programas, eso de ningún modo asegura que las características y/o fórmulas usadas permanezcan y/o funcionen tal cual lo hacen en Excel una vez que las tenemos en “Google Drive” y queremos usarlas en línea. Una característica que no es compatible, son las macros de Excel, ya que el lenguaje usado en ellas es el VBA mientras que la “Hoja de Cálculo de Google” usa Google Apps Scripts como lenguaje de programación. Una de las preguntas más recurrentes en los foros es justamente el uso de las macros de Excel en archivos colocados en “Google Drive” pero como quizás ya entendieron, pues no, no se pueden usar.

Entonces ¿es conveniente para los usuarios/as de Excel usar “Google Drive”? Pues para compartir archivos, es decir cargar y descargar, es totalmente apto como casi toda “nube”, pero si se trata de trabajar en conjunto, pues ya saben que, al no ser los mismos programas, así como hay compatibilidades también hay limitaciones y por supuesto si se trata de macros, no hay forma de hacerlas compatibles.

Hasta la próxima.

Abraham Valencia

domingo, 15 de julio de 2018

Whatsapp y Excel

Desde el cada vez mayor uso de Whatsapp no es raro que en los foros de Excel muchas persona busquen un modo de interactuar entre ambos; cada vez hay más preguntas al respecto pero ¿se puede lograr algo así realmente? Si bien no es complicado lograr que, sobre todo, a través de VBA Excel interactúe con otros programas de Office e incluso con otros de Microsoft (como Internet Explorer por ejemplo) con relativa facilidad, no necesariamente ocurrirá lo mismo con otros programas y, lamentablemente para los que buscan lograrlo, por lo menos hasta el momento Whatsapp es uno de ellos.

¿Eso quiere decir que no existe forma alguna de combinar el uso de ambos? Si bien ni Whatsapp Web ni la versión móvil permiten conexiones con VBA hay algunas alternativas que sugieren algunas personas. Una es usar la API de Whatsapp como sugiere Christian Delgado von Eitzen:

Enlace1

Otra alternativa es usar el método "SendKeys" de VBA, a sabiendas de la inestabilidad y dilemas que esto puede traer. Aquí les dejo una alternativa de Jairo Martinez:

Enlace2

Entonces, aquí les dejo ambas a ver si cumplen las expectativas que ustedes tengan respecto al tema. Hasta la próxima.

Abraham Valencia

sábado, 30 de junio de 2018

Microsoft Outlook desde Excel (III): Alertas a través del correo electrónico

Como ya he comentado en otros artículos, en los foros/comunidades de Excel entre las preguntas más frecuentes están las relacionadas a cómo enviar mensajes de correo electrónico a través de Macros de Excel. Muchas de dichas preguntas incluso tienen carácter más puntual y no es raro que las personas pregunten por “alertas” automáticas cuando, por ejemplo, se cumplen ciertas fechas que se consideran límites. En esta ocasión vamos a dar algunos consejos para esos casos y usando Microsoft Outlook.

Primero, por si acaso, recordemos como enviar mensajes a través de Outlook: Enlace_1, luego también recordemos como enviar mensajes masivos: Enlace_2, algo que nos será útil en esta ocasión. Ahora vamos a suponer que tenemos los siguientes datos:

Lo que vamos a hacer que la macro se active a través de evento “Open” del libro, por lo que pondremos lo siguiente en el módulo del libro (que lleva por defecto el nombre “ThisWorkBook”):

Private Sub Workbook_Open() 
Call EnviarAlertas
End Sub  
De ese modo la macro se activará automáticamente al abrir el archivo. Luego, a través de un bucle (For – Next) recorremos la columna de la fecha de vencimiento y si es inferior al día en que se abrió el archivo, entonces se enviará un mensaje de correo a la persona recordándole su deuda. Incluiremos una copia para uno mismo. En la columna “E” (“Notificado”) agregaremos un “Sí” después de que se envíe el mensaje, de ese modo al volver a abrir nuevamente el archivo, a través de un “If” se verificará dicha columna y de haber dicha palabra (ojo, cualquiera en realidad en éste caso), a esa persona no se le volverá a enviar el mensaje.

Entonces, dicho todo eso, nuestra macro debería quedar así:

Sub EnviarAlertas() 
Dim OutlookApp As Outlook.Application 
Dim objItem As MailItem 
Dim UltimaFila As Long, x As Long 
Dim FechaV As Date 

Set OutlookApp = CreateObject("Outlook.Application") 
Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row 

For x = 2 To UltimaFila
     Let FechaV = Range("D" & x).Value
     If FechaV < Date And Range("E" & x).Value = "" Then
         Set objItem = OutlookApp.CreateItem(olMailItem)
         With objItem
             .To = Range("B" & x).Value
             .cc = "tucorreo@correo.com"
             .Subject = "Deuda vencida"
             .Body = "Estimado/a señor/a " & Range("A" & x) & " su cuota de " & FormatCurrency(Range("C" & x).Value) & " venció el día " & Range("D" & x).Value
             .Send
         End With
         Set objItem = Nothing
         Range("E" & x).Value = "Sí"
     End If
Next x
Set OutlookApp = Nothing
MsgBox "Cuentas revisadas"
End Sub  

No olvides activar la referencia a "Microsoft Outlook 15.0 Object Library" en el editor de VBA (en donde el 15.0 puede variar dependiendo de tu versión de Excel).

Y listo, eso es todo en esta ocasión, solo adáptalo a tus necesidades. Hasta la próxima.

Abraham Valencia

jueves, 28 de junio de 2018

Microsoft Outlook desde Excel (II): Enviar mensajes masivos

Entre las preguntas más seguidas que se encuentra en los foros de Excel están aquellas relacionadas al envío de mensajes de correo electrónico a través de macros. Hay mucha información en internet al respecto, tanto usando Microsoft Outlook como usando la librería “Collaboration Data Objects” (CDO). En esta ocasión vamos a centrarnos en usar Microsoft Outlook.
Si bien, como ya mencioné, hay mucha información respecto al envío de mensajes, no necesariamente es tan fácil encontrar cosas específicas como el realizar envíos masivos y además adjuntando algún archivo y precisamente eso es lo que mostraremos como hacer.

Lo primero es que, por si acaso, den una leidita a esto: Enlace. Ahora, vamos a suponer que tenemos los datos, incluyendo el correo electrónico, de aquellas personas a las que queremos enviar el mensaje. Los datos para el ejemplo tendrán: Nombre, correo, fecha (de un supuesto reporte), ruta (del supuesto archivo/reporte pdf).

Sabemos entonces en que columna está cada tipo dato. Vamos a suponer también que las filas de datos pueden ir incrementándose, por lo que será necesario averiguar la última fila de manera automática para lo que usaremos la variable “UltimaFila”. Como son varios registros usaremos un bucle del tipo “For – Next” que comience a recorrer todo desde la fila 2 ya que la 1 es la de los encabezados.

Como ya expliqué en otro artículo, cuando se usa el objeto "Outlook", y justamente se nota más cuando se hacen envíos masivos, lo que ocurre es que se van colocando los mensajes en la "Bandeja de salida" así que es recomendable que se tenga el Microsoft Outlook configurado para el envío automático cuando se abre/cierra para que el proceso continúe cuando se use otra vez dicho programa ya que probablemente la macro no termine de enviar los mensajes. Igual vamos a usar “Application.Wait” para que haga una pausa de 10 segundos a la macro y esperar que sea tiempo suficiente para que adjunten los archivos por completo y se envíe el mensaje antes de que siga el bucle (que irá acumulando en la “fila” de la bandeja de salida del Outlook).

Entonces, dicho todo eso, nuestra macro debería quedar así:
Sub EnviarMensajeOutlook()

Dim OutlookApp As Outlook.Application 
Dim objItem As MailItem 
Dim UltimaFila As Integer, x As Integer 

Set OutlookApp = CreateObject("Outlook.Application") 
Let UltimaFila = Cells(Rows.Count, 2).End(xlUp).Row 

For x = 2 To UltimaFila 
Set objItem = OutlookApp.CreateItem(olMailItem) 
With objItem     
  .To = Range("B" & x).Value     
  .Subject = "Reporte de compras"     
  .Body = "Estimado/a señor/a " & Range("A" & x) & " le enviamos el repote del día " & Range("C" & x).Value     
  .Attachments.Add Range("D" & x).Value      
Application.Wait (Now + TimeValue("00:00:10"))          
  .Send 
End With 
Set objItem = Nothing 
Next x 

Set OutlookApp = Nothing 
MsgBox "Todo enviado" 

End Sub 

No olvides activar la referencia a "Microsoft Outlook 15.0 Object Library" en el editor de VBA (en donde el 15.0 puede variar dependiendo de tu versión de Excel).

Y listo, eso es todo, solo adáptalo a tus necesidades. Hasta la próxima.
Abraham Valencia