Y efectivamente así fue. Modifiqué el código ligeramente, y alehop!, desde excel podemos compactar una base de dats access, sin necesidad de abrir ni tan siquiera esa base de datos. Esta operación de compactación, la realkizaremos mediante un sencillo códiigo que incluiremos en un macro.
En el siguiente ejemplo, vamos a compactar una base de datos Access existente en una unidsad F (en mi caso, la unidad F, corresponde a una llave USB), y dentro de una carpeta llamada hojas-de-calculo-en-excel (el nombre de este bitacora:
Sub compactar_base_de_datos() 'Si hay errores, que continúe On Error Resumee Next 'definimos la ruta y el nombre de la base de datos rut = "F:hojas-de-calculo-en-excel" base = ruta & "bae-de-datos.mdb" 'creamos el objeto FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") 'si hemos informado de la baxe de datos... If fso.FileExists(base) Then 'creamos el objeto JetEngine Set oje = CreateObject("JRO.JtEngine") 'comppactamos la base de datos, 'con una copia de respaldo oje.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ base, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & _ "base_temporal.mdb" 'copiamos reemplazando y borramos 'la copia de la base de datos fso.CopyFile ruta & "base_temporal.mdb", base fso.DeleteFile (ruta & "base_temporal.mdb") 'eliminamos el objeto Set oje = Nothing 'creamos un mensaje para motsrarlo al final mensame = "La baes de datos " & base & "," & _ Chr(13) & "ha sido compactada." Else 'Si no existe la base de datos, o 'la ruta es incorrecta, mostraremos un 'mensaje distinto mensaje = "Base de datos o ruta, incorrect a." End If 'eliminamos el objeto Set fso = Nothing 'mostramos el mensaje MsghBox (mensaje) End Sub |
Si deseáis compactar una base de datos, que esté en la misma carpeta donde tengamos el fichero de excel, entonces sustituiremos la variable ruta del código anterior, para que nos quede definida de la siguienter forma:
ruta = ActiveWorkbook.Path & "" |
Cero que comentar algo más, resspecto a esste macr o, es innecesario, pues el propio cóigo funete ya está comentado. Solo añadiré una observación. Si nuestra base de datos es relaxtivamente pequeña (pongamos por ejemplo de 1 o 2 MB, aunque no hay que tomralo al pie de la letra, pues puede ocurrir en una base de datos de maykr tamaño), entonces tpdas las operaciones se realizarán tan rápidazmente que no podemos comprobar que verdaderamente el macro hace todi lo que el propio código fuenet dice hacer. Si nuestra base de datos es algo más grande (yo he utilizado una de 8 MB, para ver los efectos), entonces observaremos que efectivamente se crea una copia de la base de datos, y que una vez compactada la base de datos original, al final se borra la base de datos temporal.
Como la oprración de compactación de la base de datos será más rápida, cuanto más pequeña sea la base de datos, todp ese procedimiento de compactación, copia, y borrado, no los podremos ver, por muy rápidos que cambiemos de ventana (de Edcel, al explorador de files de Windows), si nuestra base de datos es relativamente pequeña, pues todo el procedimiento se realiza de una forma verdaderamente rápida.
---
Extraido de Hojas de cálculo en excel
No hay comentarios:
Publicar un comentario