Legacy File Migration Checklist
Everything to do before, during, and after migrating .xls and .mdb files
Before You Migrate
Step 1: Inventory Your Files
- Run a directory scan for all .xls, .xlsb, .xlsm, .mdb files on your system or network
- Note the file size, last modified date, and owner for each file
- Flag files not opened in 12+ months as "low priority / archive"
- Flag files opened within the last 90 days as "active / migrate first"
Step 2: Audit for Macros and Code
- Open each .xls file and press Alt+F11 — check for VBA modules, class modules, or UserForms
- If macros exist: file must be saved as .xlsm (not .xlsx) to preserve them
- Note any
Declare Function or Declare Sub statements — these need PtrSafe updates for 64-bit Office
- For .mdb files: open VBA editor and document any module names and API declarations
Step 3: Check for ActiveX Controls
- Review each Excel sheet for embedded controls (combo boxes, buttons, calendar pickers)
- Review each Access form for ActiveX dependencies
- OCX/DLL-based controls may require re-registration after migration
- Note any custom ActiveX controls from third parties — check if 64-bit versions exist
Step 4: Document Linked Files and External References
- Check for Excel external references (Data > Edit Links)
- Check for Access linked tables (External Data > Linked Table Manager)
- Map which files depend on which — convert dependencies first
- Note any ODBC connections or external database links
Step 5: Back Up Everything
- Copy all original files to a backup location before converting anything
- Confirm backup is complete and files open correctly from the backup location
- Note the backup path and date — keep backups for 90 days after migration
During Migration
Excel Files (.xls → .xlsm or .xlsx)
- If file has macros: Save As > Excel Macro-Enabled Workbook (*.xlsm)
- If file has NO macros: Save As > Excel Workbook (*.xlsx)
- NEVER save a macro-enabled .xls as .xlsx — macros will be permanently deleted
- Use a new filename — do not overwrite the original
- Fix all
Declare Function/Declare Sub statements by adding PtrSafe keyword
- Update pointer-sized types from
Long to LongPtr for API declarations
Access Databases (.mdb → .accdb)
- Open in Access 2007/2010/2013: Database Tools > Access Database
- Save with a new name — do not overwrite the original .mdb
- Check for reserved word conflicts in table/field names (
Name, Date, Status, Text)
- Bracket reserved words in all SQL queries:
[Name], [Date], etc.
- Fix any
Declare statements in VBA (PtrSafe, as above)
- Run Compact and Repair on the new .accdb after conversion
After Migration — Validation
Excel Validation
- Open both old .xls and new .xlsm/.xlsx side by side
- Verify row and column counts match on every sheet
- Spot-check 10–15 complex formulas — confirm matching output
- Check for new errors: #REF!, #NAME?, #VALUE!, #N/A that weren't there before
- Press Alt+F11 — confirm all VBA modules, forms, and class modules are present
- Run each macro and confirm it executes without errors
- Test all form controls (buttons, dropdowns, checkboxes)
- Verify conditional formatting rules apply correctly
- Test all chart and pivot table refresh functions
- Confirm named ranges resolve correctly
Access Validation
- Open and test each form — verify all controls load and respond
- Test each query — verify results match the original .mdb output
- Run all reports — verify data populates correctly
- Test all VBA macros and event handlers
- Relink all linked tables (External Data > Linked Table Manager)
- Verify data row counts match between old .mdb and new .accdb
- Test multi-user access if applicable (open from two workstations simultaneously)
- Confirm security settings (Trusted Location, or re-sign the database)
Sign-Off
Original files archived to