Realizando “benchmark” en el rendimiento del código en VBA – Pte 2

Estándar

Tal como mencione en la parte anterior de este artículo, comparto con ustedes la clase desarrolla para medir el tiempo que toma una macro, loop, rutina o función en ejecutarse. Dicha clase tiene como nombre: “clsTimer”. La cual nos permite obtener el tiempo consumido en minutos, segundos y milisegundos

Un ejemplo de cómo usar dicha clase seria:

Sub test()
Dim oTimer As clsTimer
Dim i As Long
Dim contador As Long
Set oTimer = New clsTimer
oTimer.StartTimer
For i = 1 To 400000000
contador = contador + 1
Next
MsgBox oTimer.GetElapsedTime(Seconds) & " segundos!", vbInformation
End Sub

Comparto el enlace con el ejemplo y el módulo de clase para que puedan usarlo en sus propios proyectos. Ejemplo

MXUtilities Ver 1.5

Estándar

Estoy de regreso con la versión 1.5 del complemento MXUtilities a la cual se le han corregido algunos bugs para Excel 2013. Como novedad este complemento incorpora tres nuevas funcionalidades:

  1. Poder prorratear un total en un conjunto contiguo de celdas
  2. Poder prorratear una cantidad en un conjunto de celdas visibles
  3. Poder descargar el audio en formato MP3 de algunos videos de Youtube

Las dos primeras utilidades serán de gran ayuda para todos aquellos que trabajen en contabilidad y finanzas. Cabe mencionar que se debe ser cuidadoso ya que al hacer uso de estas do herramientas no se podrán deshacer los cambios.

La tercera será de gran entretenimiento para todos aquellos que deseen descargar una canción de su gusto a formato MP3 desde Youtube. Esta utilidad puede que no funcione para todos los videos y solo se pueden descargar como máximo 7 minutos de audio.

MXUtilities Ver 1.5

Utilizar Access como aplicación de soporte para mejorar el acceso multiusuario a los datos

Estándar

Desde la versión 2007 de Excel, se cuenta con más de un millón de filas, una mejora sustancial de la versión 2003 donde solo se contaban con 65 mil, pero aunque parezca que un millón puede ser suficiente, en algún momento se tiene que admitir que, aunque Excel es el mejor producto del mundo, ha llegado el momento de pasarse a Access y aprovecharse de los archivos ACCDB de Access.

Incluso antes de que tenga que se tenga un millón de filas, otra razón irresistible para utilizar archivos de datos ACCDB es permitir el acceso multiusuario a los datos sin los dolores de cabeza asociados a los libros compartidos.

Excel ofrece una opción para compartir un libro, pero automáticamente pierde un número de importantes características Excel cuando lo hace. Después de compartir un libro, no se puede utilizar subtotales automáticos, tablas dinámicas, agrupaciones, escenarios, protección, autoformato, estilos, imágenes, añadir gráficos o insertar hojas.

Al utilizar la interfaz de Excel VBA y almacenar los datos en una base de datos ACCDB, tiene lo mejor de dos mundos. Tiene la potencia y flexibilidad de Excel y la posibilidad de acceso multiusuario disponible de Access.

ACCDB es el nuevo formato de archivo oficial tanto de Microsoft Access como de Microsoft Visual Basic (en versiones anteriores, el formato era MDB). Esto significa que se puede desarrollar una solución Excel que lea y escriba de un ACCDB para clientes que no tengan Microsoft Access. Por supuesto, ayuda si como desarrollador tiene una copia de Access, porque puede utilizar la interfaz de Access para configurar tablas y consultas.

Caso Práctico

Linda y Virginia son dos compradoras de una cadena minorista de tiendas. Cada mañana importan datos de las cajas registradoras para obtener la información actual de ventas y el inventario para 2000 referencias. Durante el día, cualquier compradora puede incorporar transferencias de inventario de una tienda a otra. Sería ideal si Linda pudiera ver las transferencias pendientes incorporadas por Virginia y viceversa.

Cada compradora tiene una aplicación Excel con VBA ejecutándose en su escritorio. Ambas importan los datos de la caja registradora y tienen rutinas VBA que facilitan la creación de informes de tabla dinámica que les ayudan a tomar decisiones de compra.

Tratar de almacenar los datos de la transferencia en un archivo Excel común genera problemas. Cuando la compradora trata de escribir en el archivo Excel, el archivo se convierte en sólo lectura para la otra compradora. Con un libro compartido, Excel deshabilita la posibilidad de crear tablas dinámicas y esto es necesario en nuestra aplicación.

Ni Linda ni Virginia cuentan con la versión profesional de Office, por lo que no tienen Access ejecutándose en sus PC.

La solución es generar una base de datos Access en un disco de red que puedan ver tanto Linda como Virginia.

La aplicación proporciona acceso multiusuario a ambas compradoras. Tanto Linda como Virginia pueden leer y escribir en la tabla al mismo tiempo. El único momento en el que podría ocurrir un conflicto es si ambas tratan de actualizar el mismo registro al mismo tiempo.

Los números de 2015

Estándar

Los duendes de las estadísticas de WordPress.com prepararon un informe sobre el año 2015 de este blog.

Aquí hay un extracto:

La sala de conciertos de la Ópera de Sydney contiene 2.700 personas. Este blog ha sido visto cerca de 24.000 veces en 2015. Si fuera un concierto en el Sydney Opera House, se se necesitarían alrededor de 9 presentaciones con entradas agotadas para que todos lo vean.

Haz click para ver el reporte completo.

Modelos de Acceso a datos DAO y ADO

Estándar

Microsoft Access admite dos modelos de objetos de acceso a datos: los tradicionales Objetos de Acceso a Datos (Data Access Objects – DAO) y los Objetos de Datos Activex (ActiveX Data Objects – ADO). ADO forma parte de los componentes de Microsoft (Microsoft Data Access Components – MDAC), que se dirige inicialmente al acceso de datos universal. DAO se dirige únicamente al motor de base de datos Jet. DAO era el modelo de acceso a datos exclusivo para los programadores Access desde Access 1.0 hasta Access 97. Por tanto, se encuentra completamente optimizado para el motor de base de datos Jet. Esta característica supone tanto su fuerza como su debilidad. Aunque DAO aún puede realizar unas pocas tareas con el motor Jet que resultan imposibles o muy complicadas con ADO, acceder a orígenes de datos distintos a Jet utilizando DAO puede resultar complicado o incluso imposible, dependiendo del contexto.

Continuar leyendo

MXUtilities Ver 1.4

Estándar

En el post “MX Utilities – El complemento de Excel que hace el trabajo más fácil” explico la idea de este complemento. Ahora les comparto la nueva versión la cual ofrece un menú más amigable para el usuario e incorpora nuevas herramientas para la gestión y manipulación de hojas de un libro.

mxutilities001

En breve espero estar compartiendo video tutoriales de lo que se puede hacer con este magnífico y práctico complemento que hace el trabajo más fácil.

Les comparto el enlace para la descarga del MXUtilities.

Utilidades para el programador VBA/Excel

Estándar

Todo buen programador debe evitar perder el tiempo en actividades repetitivas que fácilmente podrían realizarse o automatizarse de forma fácil y práctica, suena contradictorio leer esto. ¿Un programador haciendo cosas repetitivas y redundantes? Si, los programadores somos humanos después de todo y a veces no nos damos cuenta de que no solo se trata de estar codificando líneas y líneas de código, más aun si ya sabemos lo que queremos implementar y como funciona dicha implementación.

Es aquí donde debemos echar mano de los módulos y módulos de clase, los primeros nos servirán para agrupar código y el segundo igual pero con la ventaja de poder crear objetos desde cero o personalizar los ya existentes. Empecemos por ver el uso de los módulos. Siempre hemos usado los módulos estándar, es así donde reside el código de nuestras macros, tanto el creado por la grabadora de macros o el codificado manualmente.

En mi caso personal, decidí crear un módulo que contuviera funciones y procedimientos de uso general que pudieran ahorrarme el tener que escribir las mismas líneas de código una y otra vez en cada proyecto y si me funcionan a mi le pueden a funcionar a cualquier otro programador.

Al módulo decidí llamarlo “Utilities” y dentro de él residen por el momento 5 funciones y un procedimiento los cuales como programador me simplifican el trabajo, las cuales son:

  • IsInternetConnected

Validar si se cuenta con conexión a internet

  • IsFormLoaded

Validar si un formulario se encuentra cargado en memoria

  • SendMail

Enviar correo por medio de Outlook

  • MonthsNames

Devuelve el nombre de los meses del año

  • DictionaryFromRange

Crear diccionario a partir de los datos de dos rangos

  • MatrizFromDictionary

Reemplaza el contenido de una matriz con el contenido de un diccionario

Para poder hacer uso de estas herramientas en cada uno de sus proyectos, bastara con importar el modulo “Utilities”. Les comparto el libro con los ejemplos de cada una de las funciones.