Microsoft Access Analyzer & Refactoring Tool
Comprehensive workflow for analyzing, exporting, refactoring, and re-importing Microsoft Access database applications without manually adding export modules to each project.
When to Use This Skill
Use this skill when the user asks to:
- Analyze an Access database (.accdb or .mdb file)
- Export Access objects for version control or code review
- Refactor Access VBA code in a modern editor (VS Code)
- Apply changes back to the original Access database
- Create backups before making changes
- Understand the structure of an Access application
IMPORTANT: Always ask user if they want to export table data (Step 2) before running export scripts.
Core Workflow
Phase 1: Backup
Always create a timestamped backup before any operation:
DatabaseName_BACKUP_yyyyMMdd_HHmmss.accdb
Phase 2: Export All Objects
Export the complete Access application to a structured folder:
Exportacion_yyyyMMdd_HHmmss/
├── 00_RESUMEN_APLICACION.txt # Overview and inventory
├── 01_Tablas/ # Table structures (DDL)
│ ├── Access/ # Access DDL per table
│ │ ├── CLIENTES.txt
│ │ ├── PEDIDOS.txt
│ │ └── ...
│ └── SQLServer/ # SQL Server DDL per table
│ ├── CLIENTES.txt
│ ├── PEDIDOS.txt
│ └── ...
├── 02_Consultas/ # Queries as .sql files
├── 03_Formularios/ # Forms + VBA code
├── 04_Informes/ # Reports + VBA code
├── 05_Macros/ # Macro definitions
└── 06_Codigo_VBA/ # All VBA modules (.bas/.cls)
Key Features:
- UTF-8 encoding for perfect VS Code compatibility
- Spanish characters (á, é, í, ó, ú, ñ) preserved correctly
- Each table exported as individual DDL file (Access AND SQL Server formats)- Optional table data export (estructura sola o estructura + datos)- Individual .sql files for queries
- Complete VBA module extraction
- Table structure documentation with types and properties
Phase 3: Analysis & Refactoring
Once exported, analyze and refactor in VS Code:
- Review code quality and patterns
- Identify dependencies and relationships
- Apply refactoring patterns
- Add comments and documentation
- Fix bugs or improve logic
- Modernize code structure
Phase 4: Re-import (When User Requests)
Import modified code back into Access:
- Validate exported files haven't been corrupted
- Create new backup before import
- Import VBA modules
- Import query definitions
- Import form/report code
- Verify all imports successful
How to Execute
Step 1: Locate Access File
Ask user for the path to the .accdb or .mdb file, or search workspace.
Step 2: Ask About Table Data Export
CRITICAL: Always ask the user BEFORE running any export script:
�Deseas exportar los DATOS de las tablas junto con la estructura?
[S] S� - Exporta estructura + datos (.table + .tabledata)
�til para: backups completos, migraci�n de datos
[N] NO - Exporta solo estructura (.table �nicamente)
�til para: control de versiones Git, refactorizaci�n
When to recommend each option:
- Use
-ExportTableData:$false (NO) for: code analysis, refactoring, Git version control
- Use
-ExportTableData:$true (S�) for: complete backups, data migration, archival
Step 3: Create Backup
# Example
Copy-Item "C:\path\to\database.accdb" "C:\path\to\database_BACKUP_20260128_143000.accdb"
Step 4: Export Using VBA Module (with user's data choice)
The skill includes [ExportTodoSimple.bas](./references/ExportTodoSimple.bas) module that handles the complete export process.
Two approaches:
A) Temporary Injection (Recommended)
- Open Access database programmatically
- Temporarily import ExportTodoSimple module
- Execute
ExportAll subroutine
- Remove temporary module
- Close database
B) PowerShell Automation with Git (RECOMENDADO) Use the [access-export-git.ps1](./scripts/access-export-git.ps1) script.
IMPORTANT: Pass the -ExportTableData parameter based on user's answer from Step 2:
# If user chose NO (solo estructura)
.\access-export-git.ps1 -DatabasePath "path\to\db.accdb" -ExportTableData:$false
# If user chose S� (estructura + datos)
.\access-export-git.ps1 -DatabasePath "path\to\db.accdb" -ExportTableData:$true
The script will:
- Opens AccessAnalyzer.accdb tool database
- Calls
RunCompleteExport with the exportTableData parameter
- Exports to persistent folder:
{DatabaseName}_Export
- Initializes Git repository in export folder (if not exists)
- Creates .gitignore (excludes .ldb, backups, errors)
- Crea automáticamente
REFACTORING_PLAN.md con checklist y tracking
- Commits all changes with timestamp
- Shows git diff stats
- Pregunta si quiere abrir VS Code automáticamente
Ventajas del workflow Git:
- ✅ Historial completo de cambios
- ✅ Detección automática de archivos modificados
- ✅ Rollback a versiones anteriores
- ✅ Solo importa lo que cambió (más rápido y seguro)
- ✅ Plan de refactorización incluido
Step 5: Open in VS Code
Al exportar con access-export-git.ps1, se pregunta automáticamente:
¿Abrir en VS Code para refactorizar? (S/N)
O manualmente:
code "path\to\Exportacion_folder"
Step 6: Analyze & Refactor
- Start with
REFACTORING_PLAN.md - Plan generado automáticamente con:
- Inventario de objetos exportados - Checklist de refactorización por fases - Template para documentar cambios - Notas para código problemático
- Review
00RESUMENAPLICACION.txt for database overview
- Explore
06CodigoVBA/ for main business logic
- Review queries in
02_Consultas/
- Check forms/reports for UI logic
Usando control de versiones Git:
- Modifica los archivos .bas o .txt que necesites refactorizar
- Guarda cambios en VS Code
- Git detectará automáticamente los archivos modificados
Step 7: Re-import Inteligente (Solo Cambios)
Use [access-import-changed.ps1](./scripts/access-import-changed.ps1) para importar solo lo modificado:
# Modo dry-run (ver qué se importaría)
.\access-import-changed.ps1 -TargetDbPath "C:\path\to\db.accdb" `
-ExportFolder "C:\path\to\db_Export" `
-DryRun
# Importación real
.\access-import-changed.ps1 -TargetDbPath "C:\path\to\db.accdb" `
-ExportFolder "C:\path\to\db_Export"
Cómo funciona:
- Detecta archivos modificados con
git diff --name-only HEAD~1 HEAD
- Clasifica por tipo: Consultas, Formularios, Informes, Macros, Módulos VBA
- Crea backup automático antes de importar
- Importa SOLO los objetos que cambiaron
- Muestra progreso con OK/ERROR por cada objeto
- Genera reporte final con count de importados y errores
- Pregunta si quiere abrir Access automáticamente para verificar cambios
Ventajas:
- ✅ Solo importa lo modificado (evita errores en objetos que funcionan)
- ✅ Mucho más rápido (3 objetos vs 621 totales)
- ✅ Menor riesgo de romper objetos que no tocaste
- ✅ Backup automático por seguridad
- ✅ Apertura automática de Access para validar
REFACTORING_PLAN.md - Plan Automático
Al exportar con access-export-git.ps1, se genera automáticamente un Plan de Refactorización que incluye:
Contenido del Plan
- 📊 Inventario - Conteo automático de todos los objetos exportados
- 🎯 Objetivos - Checklist editable de metas de refactorización
- ✅ Checklist por Fases:
- Análisis (revisar resumen, identificar módulos principales) - Planificación (priorizar, definir estándares) - Ejecución (refactorizar módulos, optimizar queries) - Validación (dry-run, importar, probar)
- 📝 Registro de Cambios - Template para documentar cada modificación
- 🔝 Notas de Refactorización:
- Código problemático encontrado - Dependencias identificadas - Queries que necesitan optimización
- 🚀 Comandos Git - Referencia rápida de comandos útiles
- 📌 Próximos Pasos - Guía de workflow
Uso del Plan
- Editar objetivos según necesidades
- Marcar checkboxes conforme avanza (
- [x])
- Documentar cada cambio en registro
- Añadir notas sobre problemas encontrados
- Versionar con Git (historial de planificación)
Important Notes
Cu�ndo Exportar Datos vs Solo Estructura
Exportar SOLO estructura (-ExportTableData:$false):
- ? Control de versiones Git (archivos m�s peque�os)
- ? An�lisis de esquema de base de datos
- ? Refactorizaci�n de c�digo VBA y queries
- ? Documentaci�n de estructura
- ? Comparaci�n de versiones de esquema
- ?? Los archivos
.tabledata no se versionan bien en Git (grandes, binarios)
Exportar estructura + datos (-ExportTableData:$true):
- ? Backup completo antes de migraciones
- ? Transferir datos entre entornos
- ? Archivar estado completo de la aplicaci�n
- ? An�lisis de datos reales
- ? Testing con datos de producci�n
- ?? Archivos m�s grandes, commit Git pesado
Recomendaci�n general: Para workflows de refactorizaci�n con Git, usa -ExportTableData:$false. Solo incluye datos para backups espec�ficos fuera de Git.
UTF-8 Encoding
All exports use UTF-8 encoding. VS Code will display Spanish characters perfectly:
- ✅ Acentos: á, é, í, ó, ú
- ✅ Ñ and other special characters
- ✅ No manual encoding changes needed
VBA Access Requirements
Access must allow programmatic access to VBA project:
- File → Options → Trust Center → Trust Center Settings
- Enable "Trust access to the VBA project object model"
Limitations
- Cannot export binary objects (images, OLE objects)
- Form/report visual layout exported as text (not editable visually)
- Macros exported as definitions (not executable outside Access)
- Linked tables show connection info only
Safety
- Always creates backup before operations
- Non-destructive exports (original database unchanged)
- Import creates new backup before applying changes
- Logs all operations for traceability
Scripts Reference
[access-export-git.ps1](./scripts/access-export-git.ps1) ⭝ RECOMENDADO
Exportación automatizada con control de versiones Git integrado.
Usage:
# Pregunta interactivamente sobre exportar datos
.\access-export-git.ps1 -DatabasePath "C:\export\test\appGraz.accdb"
# Solo estructura (sin datos) - ideal para Git
.\access-export-git.ps1 -DatabasePath "C:\export\test\appGraz.accdb" -ExportTableData:$false
# Estructura + datos - backup completo
.\access-export-git.ps1 -DatabasePath "C:\export\test\appGraz.accdb" -ExportTableData:$true
# Con idioma espec�fico
.\access-export-git.ps1 -DatabasePath "C:\export\test\appGraz.accdb" -Language "EN"
Par�metros:
-DatabasePath: Ruta al archivo .accdb/.mdb (obligatorio)
-ExportTableData: $true = estructura + datos, $false = solo estructura (pregunta si se omite)
-Language: Idioma de exportaci�n (ES/EN/DE/FR/IT, default: ES)
-ExportFolder: Carpeta destino (default: {DatabaseName}_Export)
Caracter�sticas:
- Pregunta interactivamente si exportar datos de tablas (si no se especifica par�metro)
- Exporta a carpeta persistente:
{DatabaseName}_Export
- Inicializa repositorio Git automáticamente
- Crea .gitignore para archivos temporales (.ldb, backups, errors)
- Commit automático con timestamp
- Muestra estadísticas de archivos exportados
Returns: Carpeta de exportación con Git inicializado
[access-import-changed.ps1](./scripts/access-import-changed.ps1) ⭝ RECOMENDADO
Importación inteligente que solo importa archivos modificados detectados por Git.
Notas recientes (importacion robusta):
- Soporta consultas en
.sql (crea QueryDef directamente).
- Elimina comentarios de linea
-- antes de crear la consulta.
- Permite seleccion manual con
-Interactive o por nombre (-QueryNames, -ModuleNames, -FormNames, -ReportNames, -MacroNames).
- Abre Access despues de liberar COM para evitar ventana en blanco o bloqueo.
- Para modulos/clases usa VBE (requiere "Trust access to the VBA project object model").
Usage:
# Dry-run (ver qué se importaría)
.\access-import-changed.ps1 -TargetDbPath "C:\path\to\db.accdb" `
-ExportFolder "C:\path\to\db_Export" `
-DryRun
# Importación real
.\access-import-changed.ps1 -TargetDbPath "C:\path\to\db.accdb" `
-ExportFolder "C:\path\to\db_Export"
Características:
- Detecta cambios con
git diff HEAD~1 HEAD
- Solo importa objetos modificados (no todo)
- Backup automático antes de importar
- Progreso detallado por objeto (OK/ERROR)
- Reporte final de importados/errores
Returns: Count de objetos importados y errores
[access-import.ps1](./scripts/access-import.ps1)
Re-import all exported objects back to Access (importación completa).
Usage:
.\access-import.ps1 -TargetDbPath "C:\path\to\db.accdb" -ImportFolder "C:\export"
# Con idioma específico
.\access-import.ps1 -TargetDbPath "C:\path\to\db.accdb" -ImportFolder "C:\export" -Language "EN"
Características:
- Backup automático antes de importar
- Compatible con carpetas multiidioma
- Sin interrupciones (sin MsgBox)
- Importa completo: queries, forms, reports, macros, VBA
Returns: Import log with success/failure details
[access-backup.ps1](./scripts/access-backup.ps1)
Create timestamped backup of Access file.
Usage:
.\access-backup.ps1 -DatabasePath "C:\path\to\db.accdb"
Returns: Path to backup file
Common Patterns
Pattern 1: Workflow Completo con Git (RECOMENDADO)
# Claude pregunta PRIMERO:
# "�Deseas exportar los DATOS de las tablas? (S/N)"
# Usuario responde: "N" (solo estructura para Git)
# 1. Primera exportaci�n con Git (solo estructura - ideal para control de versiones)
cd C:\Users\juanjo_admin\.copilot\skills\access-analyzer\scripts
.\access-export-git.ps1 -DatabasePath "C:\export\test\appGraz.accdb" -ExportTableData:$false
# 2. Abrir en VS Code
cd C:\export\test\appGraz_Export
code .
# 3. Refactorizar archivos en VS Code
# - Edita módulos .bas en 06_Codigo_VBA/
# - Modifica consultas .txt en 02_Consultas/
# - Guarda cambios
# 4. Ver cambios detectados por Git
git status
git diff
# 5. Crear commit con cambios
git add -A
git commit -m "Refactorización: mejorar lógica de X"
# 6. Ver qué se importaría (dry-run)
cd C:\Users\juanjo_admin\.copilot\skills\access-analyzer\scripts
.\access-import-changed.ps1 -TargetDbPath "C:\export\test\appGraz.accdb" `
-ExportFolder "C:\export\test\appGraz_Export" `
-DryRun
# 7. Importar SOLO lo modificado
.\access-import-changed.ps1 -TargetDbPath "C:\export\test\appGraz.accdb" `
-ExportFolder "C:\export\test\appGraz_Export"
# 8. Si algo salió mal, rollback con Git
cd C:\export\test\appGraz_Export
git log --oneline # Ver historial
git revert HEAD # Deshacer último commit
# O restaurar backup: appGraz_BACKUP_timestamp.accdb
Pattern 2: Quick Analysis (Sin Git)
User: "Analyze this Access database: C:\project\inventory.accdb"
Claude asks: "�Deseas exportar los DATOS de las tablas? (S/N)"
User: "N" (solo necesito analizar c�digo)
1. Create backup
2. Export structure only (-ExportTableData:$false)
3. Open in VS Code
4. Show 00_RESUMEN_APLICACION.txt
5. Provide high-level overview
Pattern 3: Backup Completo con Datos
User: "Create a complete backup with data for migration"
Claude asks: "�Deseas exportar los DATOS de las tablas? (S/N)"
User: "S" (necesito los datos para migraci�n)
1. Create timestamped backup of .accdb file
2. Export with -ExportTableData:$true
3. Archive export folder for migration
4. Document table structures and data formats
Pattern 4: Refactor Specific Module
User: "Refactor the invoice calculation module"
1. Export if not already done
2. Locate module in 06_Codigo_VBA/
3. Analyze code
4. Suggest improvements
5. Apply refactoring when approved
6. Re-import when user confirms
Pattern 5: Version Control Setup
User: "Set up version control for this Access app"
1. Export complete structure
2. Initialize git repository in export folder
3. Create .gitignore for Access-specific files
4. Create initial commit
5. Document workflow for team
Pattern 6: Database Documentation
User: "Document this Access database"
1. Export all objects
2. Analyze table relationships
3. Map query dependencies
4. Document form workflows
5. Generate comprehensive markdown documentation
Reference Files
- [ExportTodoSimple.bas](./references/ExportTodoSimple.bas) - Complete VBA export module (original)
- [AccessObjectTypes.md](./references/AccessObjectTypes.md) - Reference for Access object types and properties
- [VBA-Patterns.md](./references/VBA-Patterns.md) - Common VBA patterns and refactoring guidelines
Troubleshooting
"Cannot access VBA project"
Solution: Enable "Trust access to the VBA project object model" in Access Trust Center settings.
"Export creates garbled characters"
Solution: Verify UTF-8 encoding in exported files. Re-export if necessary.
"Import fails for specific objects"
Solution: Check import log for specific errors. Some objects may need manual intervention.
"Database is locked/in use"
Solution: Close all Access instances and try again. Check for .laccdb lock files.
Security Considerations
- Never commit database files (.accdb) to version control
- Backup before any destructive operation
- Review imported code before executing in production
- Keep backups in separate location from source
- Use source control for exported text files only