web analytics

Convertir una ruta a formato UNC con VBA

A veces, sobretodo en entornos corporativos con varios equipos, necesitaremos referirnos a archivos que están en alguna unidad de red, y puede ser que para varios de dichos equipos la unidad de red asignada a ese recurso no sea la misma (M:, N:, J: …) por ello es inviable que, por ejemplo, desde una base de datos que guarda rutas intentemos encontrar algunos archivos que para cada uno de los equipos está en una ubicación diferente, aunque físicamente estén en el mismo lugar.

Leer mas…Convertir una ruta a formato UNC con VBA

Vinculación dinámica de tablas con VBA: Separando Front-End de Back-End

Una vez tuve que hacer una aplicación Access que sería usada en diferentes sitios simultáneamente, enseguida me imaginé el lío en el que me metía para poder mantener al día de bugs y mejoras las bases de datos en las tres diferentes ubicaciones, hasta entonces siempre había realizado aplicaciones que se ejecutaban en el mismo lugar, en local o en la misma red, y de la cual sólo me tenía que preocupar de un archivo, pero lo de hacerlo para tres redes inaccesibles una a otra y cada una con sus datos ya era más complicado. Implicaba que cada cambio realizado, por tonto que fuera, requería ser actualizado en las 3 diferentes ubicaciones, trabajo por triplicado vamos, una pérdida de tiempo.

La solución pasó por separar los datos (Back-End) de la interface gráfica (Front-End), así si realizaba algún cambio en la aplicación, que sería el 99% de las veces en el Front-End, solamente debería hacerlo una vez, ya que sería ese archivo de Front-End el que distribuiría y después cada uno de los usuarios sólo debería vincularlo con sus propias tablas de datos (Back-End)

Leer mas…Vinculación dinámica de tablas con VBA: Separando Front-End de Back-End

Error de DLL DAO 3.6 en Access 2010 64bit

Si trabajamos con Microsoft Access 2010 en su versión de 64bit e intentamos cargar la referencia Microsoft DAO 3.6 Object Library (también pasará con la referencia Microsoft DAO 3.51 Object Library) nos dará error en la carga de la librería (me gusta mas llamarlo librería que biblioteca).

Por lo que he estado leyendo por varios sitios es un problema de que la dll de DAO 3.6 no está preparada para trabajar en 64bit, y por lo que parece no lo estará nunca, es precisamente en Office 2010 cuando existe una versión de 64bit por primera vez.

Leer mas…Error de DLL DAO 3.6 en Access 2010 64bit

Plantilla para controlar los cambios en un archivo Excel con VBA

Una vez me pidieron si era posible controlar los cambios que se realizan en un libro Excel sin que el usuario lo sepa, como siempre digo, es solo cuestión de tiempo, con Office y VBA se pueden hacer muchísimas cosas antes de llegar a un límite que difícilmente se alcanzará en un entorno ofimático normal, no hablamos de un ERP para gestionar un negocio de millones de euros ni de un videojuego de última generación, hablamos de ofimática, escribir, calcular y presentar, y para estos menesteres y para el común de los mortales las macros con VBA son más que suficiente.

Obviamente, Excel incorpora un sistema de control de cambios (p.e. aquí), pero además de ser más obvio para el usuario nos obliga a compartir el libro y nos puede limitar en ciertas funciones, pero por otro lado este método con VBA me provocó un problema importante y es que no se pueden deshacer los cambios, cada vez que se ejecuta código VBA la pila de deshacer (undo stack para los amigos) se vacía, y en este tipo de plantilla que se ejecuta VBA todo el rato es un problema, incluso los usuarios mas avezados se darán cuenta que algo sucede con la opción deshacer, desgraciadamente se tiene que decir aquello tan manido de:  «no es un bug es una feature«, hay soluciones más o menos completas para parchear esta característica que pasan por hacer un copia del estado del libro antes de ejecutar la macro, pero como tampoco me acababa de gustar y no tenia tiempo no lo programé.

Entonces hay que valorar que queremos, deshacer las cosas o secretismo, como en este caso se trataba más de investigar sobre el mal uso de un archivo Excel la opción fue hacerlo mediante VBA.

Leer mas…Plantilla para controlar los cambios en un archivo Excel con VBA

Recuperando el código VBA protegido de un archivo Excel 2003 con un Excel 2010

Llevaba un par de días buscando información para poder desbloquear un .xlsm que realicé hace ya un tiempo.

Lo de conocer la contraseña de desprotección de la hoja y el libro es trivial eso está más que explicado en cientos de sitios (como [1], [2] o [3]) y con una breve búsqueda lo encontramos, es tan sencillo como insertar una macro, pero ¿Y si no tenemos acceso al código VBA?

Mi problema era desproteger la contraseña que se introduce en el proyecto VBA, no podía ni acceder ni ver el código del archivo, había encontrado varios sitios en que lo explicaban (como [1], [2] o [3])  pero parecía no funcionar y algo tenía que ver que intentaba abrir un archivo .xlsm generado y protegido con Excel 2003 en un Excel 2010.

Leer mas…Recuperando el código VBA protegido de un archivo Excel 2003 con un Excel 2010

Plantilla de importación de datos de un sensor de visión OMRON FQ2

Hay veces en las que uno no dispone de las herramientas adecuadas para obtener información de manera eficiente y correcta y trabaja en base a suposiciones y sensaciones, es decir con criterios subjetivos, a falta de un sistema MES de adquisición de datos directamente en las líneas hay que aprovechar las cosas que ya hay para intentar conseguir algo de información del funcionamiento de la fábrica.

Tenemos instalada una cámara OMRON FQ2-D3X para detectar diversas anomalías de los productos que van saliendo de una de las máquinas de la línea de fabricación. La instalación de la cámara fue realizada en su momento por una tercera empresa, por tanto el conocimiento del software y el hardware era bastante bajo, parametrizar y ajustar la inspección y poca cosa más.

Leer mas…Plantilla de importación de datos de un sensor de visión OMRON FQ2

Importación de datos de consumo eléctrico de PowerStudio Scada a Excel (y II)

En mi post anterior me he quedado en esta cadena:

"http://192.168.1.54:8080/services/user/records.xml?var=" & _
Dispositivo & "." & vari & "?begin=" & FechaInicio & "?end=" & _
FechaFin & "?period=ALL" 

Veamos la construcción de esta llamada:

  • http://192.168.1.54:8080 Es la dirección del servidor donde se encuentra instalado el PowerStudio Scada, y el puerto 8080 donde enviaremos nuestra petición.
  • /services/user/records.xml? Según el Manual PowerStudio Scada esta petición nos devuelve los registros del dispositivo indicado, entre la fecha indicada y con la agrupación indicada que se definen en las siguientes variables:
    • Dispositivo: Es el nombre del dispositivo registrador (CVM) dentro del PowerScada.
    • vari: Es el tipo de medida que vamos a pedir (W,Wh,A,V,etc)
    • FechaInicio: Fecha inicial del periodo del cual queremos los datos.
    • FechaFin: Fecha final del periodo del cual queremos los datos.
    • period=ALL: agrupación de los datos que obtenemos.

Con todo esto hagamos un ejemplo y lo veremos más claro:

Leer mas…Importación de datos de consumo eléctrico de PowerStudio Scada a Excel (y II)

Importación de datos de consumo eléctrico de PowerStudio Scada a Excel (I)

Se puede decir que fué la primera vez que vi la necesidad de utilizar VBA de manera que mi trabajo fuera menos aburrido. Era un nuevo trabajo en una vieja empresa y, entre muchas otras tareas, debía extraer diariamente los datos de consumos eléctricos de manera que se supieran diariamente los ratios de consumo por unidades fabricadas.

Leer mas…Importación de datos de consumo eléctrico de PowerStudio Scada a Excel (I)