lunes, 15 de octubre de 2018

¿Excel como base de datos?

Microsoft Excel es una hoja de cálculo y según los datos conocidos sigue siendo el programa más usado de la famosa suite Microsoft Office. Millones, de personas usan Excel como base de datos y muchos se apoyan en VBA pasa simular tener sus propios sistemas de venta, de facturación, etc. ¿Está mal eso? No necesariamente, aunque finalmente para una misma cantidad de datos Excel ocupará más espacio que un programa como Access, que es parte de la misma suite y que en realidad es el programa que debería usarse, de preferencia, para cosas como las mencionadas.

Cuando finalmente se opta por Excel como base de datos, es muy habitual que se cometan muchos errores que al final perjudican a los propios usuarios. Lo clásico es que para una misma base de datos se usan diferentes archivos. En muchas ocasiones, por ejemplo, para ventas o compras, he visto cosas de este tipo, en donde tienen un archivo por año:

Y dentro de esos archivos tienen normalmente una hoja por mes::

Siendo todos los archivos iguales. Por supuesto que cada hoja tiene los mismos campos. Otro ejemplo:

Entonces, se puede tener, para tres años entre ventas y compras, unos seis archivos y en total unas 72 hojas ¿una bicoca, cierto? Aunque no es nada comparado a casos como este:

En este caso, para tres años tendríamos 72 archivos y 864 hojas ¿qué les parece? Y eso contando solo hojas de datos cuando sabemos bien que muchos tienes además hojas para facturar, reportes, etc. Ahora, imagínense intentar hacer consolidados, ver ventas o compras por mes o año o entre fechas, o ver datos solo de ciertos clientes, etc. Hay que copiar/pegar datos, abrir y cerrar archivos, ubicar cada archivo necesario, etc. generando muchas veces perdida de tiempo, perdida de datos, archivos que se pueden ir corrompiendo y varias otras cosas más.

Entonces, idealmente ¿cómo se tendría que hacer? Pues en general es suficiente con un solo archivo y con una hoja para los datos, podría colocarse un campo para el tipo (venta o compra) y una columna de fechas para que de ese modo con filtros o tablas dinámicas (u otra herramienta) se puedan tener datos específicos por periodos de tiempo o clientes.

Les aseguro que de ese modo les será mucho más fácil manejar sus datos y en otra hoja pueden hacer sus reportes usando quizá VBA o funciones tipo “BuscarV”, aunque recordemos que Excel, a diferencia de Access, no tiene una herramienta automática para generarlos por lo que habrá que usar bastante el ingenio (y por supuesto leer mucho).

Espero haberlos ayudado. Hasta la próxima.

Abraham Valencia

domingo, 30 de septiembre de 2018

Microsoft Excel 2019

Microsoft Office 2019 es la nueva versión de la suite de Microsoft Office. Dicha suite fue anunciado el 6 de septiembre del 2017 y ha sido lanzada ya oficialmente el día 24 de septiembre de 2018.


En el caso de Excel se han incluido nuevas funciones, más tipos de gráficos,  elementos visuales mejorados, mejoras en Power Pivot y varias cosas más. Otra de las novedades más es esperadas son las anunciadas "Funciones Personalizadas" que son distintas a las que se crean con VBA, ya que la base será JavaScript y además estarán sincronizadas entre todos los dispositivos en donde se tenga instalado el Excel.


Eso sí, la nueva suite solo podrá ser usada en Windows 10 (y en Mac OS) y no en versiones anteriores por lo que si deseas utilizarla no te quedará de otra que actualizar tu sistema operativo.

Entonces, ya lo saben, a prepararse para la nueva versión de Excel.

Eso es todo por ahora pero estaremos atentos a más novedades. Hasta la próxima.

Abraham Valencia

jueves, 30 de agosto de 2018

Microsoft Outlook desde Excel (IV): Enviar hojas y el libro activo por correo

En esta ocasión seguiremos trabajando con Microsoft Outllok pero ahora lo que veremos es como enviar hojas de un libro o incluso el propio libro como archivo adjunto del mensaje de correo. Voy a suponer que ya leyeron este artículo: Enlace, así que solo diré que para enviar el libro de Excel que es el activo en ese momento, bastará agregar una línea para adjuntarlo, además de lo habitual en estos casos. Con dicha línea lo que haremos es usar la propiedad “FullName”, que devuelve el nombre del libro incluyendo la ruta de su ubicación. De ese modo en el correo se adjuntará el archivo (siempre y cuando se haya guardado). Entonces, prueben esto:

Sub EnviarMensajeOutlook()
Dim OutlookApp As Outlook.Application
Dim objItem As MailItem 

Set OutlookApp = CreateObject("Outlook.Application") 
Set objItem = OutlookApp.CreateItem(olMailItem) 

With objItem
     .To = "abraham.valencia@gmail.com" 'Para
     .Subject = "Adjuntando archivo" 'Asunto
     .Body = "Estamos adjuntando un archivo" 'Cuerpo
     .Attachments.Add ActiveWorkbook.FullName
     Application.Wait (Now + TimeValue("00:00:03")) 'Tiempo para adjuntar
     .Send 'Enviar 
End With 

Set OutlookApp = Nothing 
Set objItem = Nothing 

End Sub 

Quizá no sea necesario enviar el libro completo sino solo la hoja activa. De ser así, guardaremos la hoja activa como archivo, lo adjuntaremos y lo eliminaremos de inmediato, en el supuesto de que no lo necesitamos posterior al envío:

Sub EnviarMensajeOutlook() 

Dim OutlookApp As Outlook.Application 
Dim objItem As MailItem 

Set OutlookApp = CreateObject("Outlook.Application") 
Set objItem = OutlookApp.CreateItem(olMailItem) 

ActiveSheet.Copy 
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\Temporal.xlsx" 
ActiveWorkbook.Close 

With objItem
     .To = "abraham.valencia@gmail.com" 'Para
     .Subject = "Adjuntando archivo" 'Asunto
     .Body = "Estamos adjuntando un archivo" 'Cuerpo
     .Attachments.Add ThisWorkbook.Path & "\Temporal.xlsx"
     Application.Wait (Now + TimeValue("00:00:03")) 'Tiempo para adjuntar
     .Send 'Enviar 
End With 

Kill ThisWorkbook.Path & "\Temporal.xlsx" 

Set OutlookApp = Nothing 
Set objItem = Nothing 

End Sub 

De no desear que sea la hoja activa la que se envíe, basta indicar, en la línea respectiva, que hoja queremos copiar:

Sheets(“Hoja45”).Copy 

O incluso puede ser un archivo con solo algunas de las hojas del libro:

Sheets(Array("Hoja1", "Hoja4")).Copy 
En el Array pueden ir más hojas, no solo dos, por si acaso. Y eso es todo por hoy. Nos "vemos".

Abraham Valencia

miércoles, 15 de agosto de 2018

Campeonato Mundial de Microsoft Excel (2018)

Kevin Dimaculangan, adolescente de tan solo 15 años de Florida (EE.UU.), superó a más de 760 mil competidores de todo el mundo y ha ganado el Campeonato Mundial de Microsoft Excel además de ganar US$7,000.

Dimaculangan empezó a aprender Microsoft Excel como un pasatiempo apenas el año 2017 y gracias a la importancia que le da su colegio a que los estudiantes se certifiquen en manejo de software, y al aliento de uno de sus profesores, llegó al campeonato mundial.

Postuló para obtener una certificación en Microsoft Excel el año pasado. De 1,000 puntos posibles obtuvo los 1,000 puntos. Decidió certificarse a nivel experto y obtuvo la misma puntuación. Esto lo ha llevado a enseñarle a sus compañeros e incluso a varios de sus profesores.

Este año demostró ser el mejor campeonato organizado por Certiport, donde compitió contra jóvenes de entre 13 y 22 años y se coronó como el campeón mundial de Microsoft Excel.

Abraham Valencia