You open a spreadsheet and Excel greets you with "[Compatibility Mode]" next to the file name in the title bar. Half the ribbon options are grayed out. You try to save and Excel asks if you want to keep the format or switch to a different one. You click around confused, and eventually just leave the file as-is.
This is one of the most common Excel frustrations — and one of the most misunderstood. Compatibility mode isn't a bug. It's Excel telling you something important about your file. Here's what it means, what it costs you, and how to get out of it cleanly.
Compatibility mode activates automatically whenever Excel opens a file saved in an older format — primarily .xls (the Excel 97–2003 format). The title bar shows [Compatibility Mode] as a warning that you're working with a file that can't use all of Excel's modern features.
This isn't cosmetic. It has real consequences:
XLOOKUP, FILTER, and UNIQUE can't be usedThe reason is simple: the .xls format was finalized in 2003. Microsoft can read it, but they won't add new features to a format they deprecated over 20 years ago.
You might wonder: why doesn't Excel just automatically convert old files to .xlsx when you open them? Because that would be destructive. Silently changing a file's format could break things — VBA code, ActiveX controls, formulas that behave differently across formats, and shared workflows that depend on the file remaining in .xls form.
Microsoft's conservative choice is the right one. The problem is that many people work in compatibility mode indefinitely without realizing the risks are accumulating.
Worth knowing: Windows 10 reaches end of life in October 2025. Organizations upgrading to Windows 11 or migrating to Microsoft 365 are already discovering that .xls files that "always worked" are now failing — especially those with VBA macros or ActiveX controls. The compatibility mode warning is the early sign that your files are on borrowed time.
For simple files without macros, the fix is straightforward:
.xls file in Excel.xlsThat's it — for simple files. The problem is most files that have been in production for years are not simple.
This is the biggest gotcha. If your .xls file has macros and you save it as plain .xlsx, Excel will warn you that VBA code cannot be saved in the macro-free format. If you proceed, you lose all your macros.
The correct target format for files with macros is .xlsm (Excel Macro-Enabled Workbook). But even saving to .xlsm doesn't guarantee the macros will work correctly afterward — especially if they use 32-bit API declarations that break in 64-bit Office.
For a detailed walkthrough of the VBA compatibility problem, see our guide on VBA macros that stop working after a conversion or upgrade.
ActiveX controls — buttons, list boxes, spin buttons embedded in the worksheet — are a common feature of older Excel workbooks. They're supported in both .xls and .xlsx, but their behavior can change subtly after conversion. Some controls fail to render. Some trigger different events. Some stop working entirely on Windows 11 due to security policy changes.
If your workbook uses ActiveX controls, test every one of them in the converted file before declaring success.
Workbooks that link to other .xls files by path will have broken links after conversion if the source files haven't also been converted. Excel stores the full file path and extension in the formula — change the extension and the link breaks.
Our guide on finding and fixing external Excel links covers how to audit and update these before converting.
Some functions that existed in Excel 97–2003 were renamed or replaced in later versions. Most still work under their old names as compatibility aliases, but a few behave differently. Always verify calculated values in the converted file match the original.
If you have one or two files, the manual Save As approach works. If you have dozens or hundreds — accumulated over years of business operations — manual conversion becomes a project, not a task.
IT teams often reach for PowerShell to automate this:
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
Get-ChildItem "C:\LegacyFiles" -Filter "*.xls" | ForEach-Object {
$wb = $excel.Workbooks.Open($_.FullName)
$newPath = $_.FullName -replace '\.xls$', '.xlsx'
$wb.SaveAs($newPath, 51) # 51 = xlOpenXMLWorkbook
$wb.Close($false)
}
$excel.Quit()
This works for simple files. It will silently fail or corrupt files with macros (SaveAs format 51 is not macro-enabled). And if Excel throws an error mid-batch, the script may leave files in a partially-converted state with no audit trail.
For a full comparison of PowerShell batch conversion vs. a dedicated tool, see Batch Convert .xls Files to .xlsx — PowerShell vs LegacyLeaps.
LegacyLeaps scans all your .xls files and tells you exactly which ones have macros, ActiveX controls, or external links — before you convert a single file.
Run the Free ScanBefore converting any file, run Excel's built-in Compatibility Checker:
.xls fileThis checker is designed for going the other way (saving modern features back to old formats), but it gives you a useful signal. If the checker finds nothing, your file is probably simple enough to convert with Save As. If it finds ActiveX controls or complex formatting, expect manual cleanup.
A better pre-conversion audit is to open the VBA editor (Alt+F11) and look for:
Declare Function or Declare Sub statements — these are 32-bit API calls that need to be updated for 64-bit OfficeCreateObject or GetObject with COM referencesOur VBA audit checklist walks through this process step by step.
| File contents | Target format | Conversion method | Risk level |
|---|---|---|---|
| Data only, no macros | .xlsx | File > Save As | Low |
| Macros, no API calls | .xlsm | File > Save As | Medium — test macros |
| Macros with 32-bit API calls | .xlsm | Update VBA first, then convert | High — VBA rewrite needed |
| ActiveX controls | .xlsm or .xlsx | Convert, then test all controls | Medium — test thoroughly |
| External links to other .xls files | .xlsx after updating links | Update links first | Medium — broken links after |
| 50+ files | .xlsx / .xlsm | LegacyLeaps batch conversion | Managed — audit first |
Don't declare success until you've checked:
For a complete checklist, see our Excel Migration Validation Checklist.
Excel enters compatibility mode whenever you open a file saved in an older format — primarily .xls (Excel 97–2003). It does this automatically to signal that not all modern features will be available. The only way to permanently exit compatibility mode is to convert the file to .xlsx or .xlsm format.
A simple Save As will preserve most macros if you target .xlsm. If you save to plain .xlsx, Excel will strip all VBA code. The subtler risk is that macros with 32-bit API declarations will compile but fail to run in 64-bit Office. See our PtrSafe fix guide for the specific VBA changes needed.
Technically yes, but the risk grows over time. Excel's support for .xls is not guaranteed in future versions, and enterprise environments upgrading to Windows 11 or Microsoft 365 are already reporting .xls files that previously opened fine now failing. The longer you wait, the more likely a Windows or Office update breaks something.
The Compatibility Checker (File > Info > Check for Compatibility Issues) scans your workbook for features not supported in older Excel formats. When converting from .xls to .xlsx, it tells you what the old format couldn't support that the new one will handle differently.
LegacyLeaps scans your .xls files, identifies macro and ActiveX issues, and converts your files to .xlsx or .xlsm while preserving everything that matters — including VBA code. 100% money-back guarantee if anything is lost.
Download Free ScannerPractical fixes for legacy Excel and Access problems. No spam.