Converting a single .xls file to .xlsx is straightforward. Converting 500 of them — while preserving every VBA macro, every external reference, every ActiveX control — is a different problem entirely.
This is the migration that trips up IT teams. They start with a script, discover it strips macros on file 47, and have to backtrack. Or they use a cloud converter, upload the first batch, and realize midway through that nothing with code came through intact.
What follows is the complete scale migration workflow: five phases, covering everything from initial inventory to production cutover. If you follow this process, you won't lose macros. You'll also have an audit trail, a validated output set, and a clean rollback path if anything goes wrong.
Single-file migration is forgiving. You can open the result, flip through the sheets, run a couple macros manually. You'll catch problems immediately.
At scale, you can't manually inspect 500 files. Problems hide. A macro that silently fails only surfaces when someone tries to run it three weeks after the migration. By then, the original .xls may have been deleted, or the migration log may not identify which files had VBA.
Scale migration requires upfront classification, automated validation, and explicit verification before you consider the job done.
Before any conversion, enumerate every .xls and .xlsm file in scope. You need to know:
The fastest way to get this data: run LegacyLeaps's free scan on your file set. It produces a structured report showing every macro, ActiveX object, and external dependency across your entire file inventory — in minutes, not days.
Sort your files into three groups. Each needs a different migration path:
In most organizations, Tier 1 makes up 60-70% of files. Tier 2 is 25-35%. Tier 3 is typically 5% or fewer. The triage report from your scan tells you exactly where each file lands.
Run migration on each tier separately:
Tier 1 (PowerShell, no macros):
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
Get-ChildItem "C:\migration\tier1\" -Filter "*.xls" | ForEach-Object {
$wb = $excel.Workbooks.Open($_.FullName)
$outPath = "C:\migration\output\" + $_.BaseName + ".xlsx"
$wb.SaveAs($outPath, 51) # 51 = xlOpenXMLWorkbook (no macros)
$wb.Close($false)
Write-Host "Converted: $($_.Name)"
}
$excel.Quit()
Tier 2 (LegacyLeaps batch mode, with macros):
Point LegacyLeaps at your Tier 2 folder. It will:
Important: Run Tier 2 on a copy of your files, not originals. Keep originals archived in read-only storage throughout the migration project.
LegacyLeaps's scanner classifies every .xls and .xlsm file in your inventory — macros, ActiveX, external links — so you can triage before you migrate.
Try the Free ScanValidation is where most migrations skip a step and pay for it later. Run all of these before calling the migration complete:
For every Tier 2 file, compare the VBA module count in the source .xls against the output .xlsm. A mismatch means code was lost.
# Quick module count check via COM
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$source = $excel.Workbooks.Open("C:\migration\tier2\report.xls")
$srcModules = $source.VBProject.VBComponents.Count
$source.Close($false)
$output = $excel.Workbooks.Open("C:\migration\output\report.xlsm")
$outModules = $output.VBProject.VBComponents.Count
$output.Close($false)
$excel.Quit()
if ($srcModules -ne $outModules) {
Write-Warning "Module count mismatch: $srcModules source vs $outModules output"
}
Pick 10-15 representative files from Tier 2 — the most complex ones, and a random sample. Open each in Excel 365 (64-bit) and run the primary macro. This catches runtime errors that static analysis misses.
For files with formulas, compare key cell values between source and output. Changes in calculated values indicate formula references broke during conversion.
Files with external workbook links will show #REF! errors if the linked files weren't migrated first or the paths changed. Run Excel's Edit Links audit on each file that had external references in your triage report.
Once validation passes, move validated output files to production locations. Follow this sequence:
Rollback plan: If a production issue surfaces post-cutover, the archive is your safety net. Document where it lives, who has access, and how long it will be retained. Don't rely on backups alone — backups can lag, archives are immediate.
| Mistake | What Happens | How to Avoid |
|---|---|---|
| Saving as .xlsx instead of .xlsm | All VBA modules silently stripped | Let LegacyLeaps choose format based on content, or use format 52 in PowerShell |
| Running PowerShell on Tier 2 files | Macros survive format, but 64-bit incompatibilities remain | Use LegacyLeaps for any file with VBA code |
| Skipping Phase 4 validation | Broken macros surface in production weeks later | Never skip module count verification and spot testing |
| Deleting originals at cutover | No rollback path if issues surface | Archive originals for 30 days minimum before cleanup |
| Migrating all files in one batch before validating | A systemic issue affects every file before you detect it | Validate a pilot batch of 20-30 files before running the full set |
Processing speed depends heavily on file complexity and your hardware. Rough benchmarks:
A 500-file migration with mixed content typically runs in 4-8 hours of processing plus 2 hours of validation. A 2,000-file migration is a weekend project — run batch processing overnight and validate the next morning. We've seen manufacturing teams complete 2,000+ file migrations in a single weekend using this workflow.
The entire workflow depends on accurate inventory data. If you don't know which files have macros, you can't triage. If you can't triage, you can't choose the right migration path for each file.
LegacyLeaps's free scan was built specifically to solve Phase 1. Point it at a folder, and it produces a structured report showing macro presence, VBA module count, ActiveX objects, and external links for every file — in minutes. That report drives every decision in the workflow that follows.
Download LegacyLeaps and run the free scan on your file inventory. You'll have your triage report in minutes — and you'll know exactly what Tier 2 looks like before you start converting anything.
Download Free ScannerPractical fixes for legacy Excel and Access problems. No spam.