How to disabling macros in excel trust center is not the same as removing them
- Step 1See what Trust Center actually does — In Excel, File, Options, Trust Center, Macro Settings. 'Disable with notification' blocks the macro on this machine only — the code stays in the file. This is the gap the stripper closes.
- Step 2Open the VBA Macro Stripper — On a Developer-tier account, open /excel-tools/excel-vba-macro-stripper. Lower tiers are blocked at run time with
VBA Macro Stripper requires Developer tier. - Step 3Drop the .xlsm you would otherwise just 'disable' — Drag in the macro-enabled file. The picker shows
.xlsx, .xls, .ods; choose the.xlsm. One file per run. - Step 4Run the strip — Click run. JSZip deletes
vbaProject.bin,vbaData.xml, andxl/macrosheets/from the package — the macro source is gone, not merely disabled. - Step 5Confirm the removal — The panel shows
N macro file(s) removedand lists the removed paths. This is proof the binary left the file, which Trust Center never does. - Step 6Distribute the .xlsx — Download
<file>-no-macros.xlsx. Because it is .xlsx, no recipient sees an Enable Content prompt and no macro can run on any machine.
Trust Center setting vs removing the binary
The two approaches solve different problems. Trust Center is local policy; the stripper changes the file. Use Trust Center as a safety net, and the stripper when the file must be macro-free for everyone.
| Aspect | Trust Center 'disable macros' | VBA Macro Stripper |
|---|---|---|
| Where it applies | Only the machine where the setting is configured | The file itself — travels everywhere it goes |
| Is the code still in the file? | Yes — xl/vbaProject.bin is untouched | No — the binary is deleted |
| Can a recipient run it? | Yes, if their settings allow or they click Enable Content | No — there is no code left to enable |
| File extension after | Still .xlsm | `.xlsx` (no Enable Content banner) |
| Excel 4.0 / XLM macros | Governed by a separate, often-overlooked setting | Removed (`xl/macrosheets/` deleted) |
| Reversible? | Yes — just change the setting back | Permanent for that output copy (original kept) |
What the stripper removes vs preserves
The tool opens the workbook as an OOXML ZIP with JSZip and deletes only macro-bearing parts by path match. Every other part is repacked byte-for-byte. Path matching is case-insensitive substring matching.
| Container part | Action | Why |
|---|---|---|
xl/vbaProject.bin | Removed | The compiled VBA project — every Sub, Function, UserForm, and class module lives here. Deleting it removes all VBA code. |
xl/vbaProjectSignature.bin / *vbaData.xml | Removed | Digital-signature stub and the VBA data manifest. Any path containing vbadata.xml is dropped so no orphaned macro metadata remains. |
xl/macrosheets/… | Removed | Excel 4.0 / XLM macro sheets. The stripper deletes this folder, so legacy XLM auto-open macros are removed alongside VBA — not just VBA. |
xl/_rels/workbook.xml.rels | Edited | The <Relationship … vbaProject …> entry is stripped so the workbook does not reference the now-deleted binary. |
xl/printerSettings/printerSettings*.bin | Preserved | Binary print settings are explicitly kept — only macro binaries are targeted, not every .bin. |
Worksheet XML, sharedStrings.xml, styles, charts, pivots | Preserved | All data, formulas, formatting, charts, and pivot tables are repacked unchanged. The output is a faithful copy minus the code. |
docProps/core.xml / docProps/app.xml | Preserved | Author, company, and revision metadata are untouched. Use the Core/App metadata wipers if you also need those gone. |
Tier access and file-size limits
The VBA Macro Stripper is gated to Developer tier and above (it throws VBA Macro Stripper requires Developer tier. on lower tiers). One file per run — there is no batch queue. Row limits do not apply: this is a binary ZIP operation, so reported input/output rows are always 0.
| Tier | Can run this tool? | Max file size | Files per run |
|---|---|---|---|
| Free | No — blocked | 5 MB (family cap) | 1 |
| Pro | No — blocked | 50 MB (family cap) | 1 |
| Pro-media | No — blocked | 200 MB (family cap) | 1 |
| Developer | Yes | 500 MB | 1 |
| Enterprise | Yes | 2 GB (streaming) | 1 |
Cookbook
Side-by-side demonstrations of what 'disabled' leaves behind versus what 'removed' actually produces.
Disabled-but-still-present: prove the code is in the file
With Trust Center set to disable, the macro will not run for you — but the binary is right there in the ZIP.
$ unzip -l budget.xlsm | grep -i vba xl/vbaProject.bin <- still present xl/_rels/workbook.xml.rels (references it) Trust Center 'disable': macro won't run HERE, but the code travels with the file unchanged.
Removed: the binary is gone after stripping
Run the same file through the stripper and the part no longer exists in the output.
After VBA Macro Stripper: Output: budget-no-macros.xlsx $ unzip -l budget-no-macros.xlsx | grep -i vba (no matches) Result panel: 1 macro file(s) removed.
The Enable Content loophole, closed
A recipient who clicks Enable Content on the disabled .xlsm runs the macro; on the stripped .xlsx there is nothing to enable.
Disabled .xlsm -> recipient clicks Enable Content -> macro RUNS Stripped .xlsx -> no banner, no vbaProject.bin -> nothing runs
XLM macros Trust Center may not even warn about
Excel 4.0 macros are governed separately; the stripper removes them regardless of any setting.
Input: legacy.xlsm xl/macrosheets/sheet1.xml <- XLM Result panel: 1 macro file(s) removed. Output: legacy-no-macros.xlsx (macrosheet gone)
Distribute a workbook nobody can re-enable
For a template you send company-wide, removal beats relying on every recipient's Trust Center being correct.
Send budget.xlsm: relies on each recipient's settings
Send the stripped .xlsx: cannot be re-enabled by anyone
-> after stripping, optionally run the App Metadata
Wiper (/excel-tools/excel-app-metadata-wiper)Edge cases and what actually happens
Trust Center 'disable' assumed to remove the macro
MisconceptionDisabling macros never alters the file. xl/vbaProject.bin stays in place and runs on any machine that allows it. Only deleting the binary — what this tool does — makes a workbook genuinely macro-free.
Recipient clicks Enable Content on a 'disabled' file
Macro runs — failureYour Trust Center setting does not travel with the file. A recipient who clicks Enable Content on the still-.xlsm workbook executes the macro in full. Stripping removes that possibility because there is no code left.
`.xlsx` that secretly contains a VBA project
RemovedA workbook renamed from .xlsm to .xlsx can still carry vbaProject.bin inside the ZIP — and Excel will still run it. The stripper matches by ZIP path, not extension, so it finds and removes the binary regardless of the file's name.
`xl/macrosheets/` present (Excel 4.0 / XLM macros)
RemovedXLM macros are a classic malware vector that does not live in vbaProject.bin. Because the stripper deletes anything under xl/macrosheets/, these are removed too — the findings list will name each macrosheet part it dropped.
Legacy `.xls` (BIFF8 binary) uploaded
Fails — not a ZIPA true legacy .xls is a compound binary file, not a ZIP, so JSZip.loadAsync throws and no output is produced. Open it in Excel and Save As .xlsm (or .xlsx) first to convert it to the OOXML ZIP format, then run the stripper.
Password-encrypted workbook uploaded
Fails — encryptedExcel encryption wraps the OOXML package in an OLE/CFB container, so JSZip cannot read it as a ZIP and loading fails. Decrypt in Excel (File, Info, Protect Workbook, remove the password) first, then strip the macros from the decrypted copy.
File had no macros at all
ExpectedNothing matches the macro filter, so the result reports 0 macro file(s) removed and you still receive a repacked .xlsx. It is a clean no-op, not a failure — handy as a confidence check that a file is already macro-free.
`docProps/app.xml` still lists the original editing app
By designThe stripper only removes macro parts; document metadata is preserved. If the editing-app fingerprint or author also needs to go, chain the App Metadata Wiper or the Core Metadata Wiper after stripping.
Run attempted on Free, Pro, or Pro-media tier
403 tier blockedThe processor checks the tier first and throws VBA Macro Stripper requires Developer tier. before any unzip happens. Upgrade to Developer or Enterprise to run it.
'Trusted Locations' or signed-macro trust relied upon
Still in the fileTrusting a location or a macro signature lets the code run more easily, not less — the vbaProject.bin is still present and a different machine may run it. If the goal is no macros at all, remove the binary rather than trusting it.
Frequently asked questions
Why is Trust Center 'disable macros' not enough?
It is a per-machine policy, not a file change. The macro code is still inside the .xlsm; it just does not run on your computer. On a machine with different settings, or after a click on Enable Content, the macro runs in full.
Does the macro code leave the file when I disable macros?
No. xl/vbaProject.bin is untouched by any Trust Center setting. Only deleting the binary removes the code — that is what this tool does.
Why does the output extension change to .xlsx?
The .xlsm extension is Excel's promise that the file may contain macros. Once the macro parts are gone, the honest extension is .xlsx. The tool names the result <original>-no-macros.xlsx.
Can a recipient re-enable a stripped file?
No. After stripping there is no vbaProject.bin to enable. The output is .xlsx, so Excel never shows an Enable Content banner for it on any machine.
Does it remove Excel 4.0 (XLM) macros too?
Yes. XLM macro sheets live under xl/macrosheets/, not in vbaProject.bin, and the stripper deletes that folder. Many tools that only target VBA leave XLM behind — this one removes both.
Does the macro code ever run while it is being removed?
No. The tool opens the workbook with JSZip and treats vbaProject.bin as opaque binary to delete. It is never loaded into a VBA host or interpreted, so an auto-open or Workbook_Open payload cannot fire during processing.
Will my formulas, charts, and formatting survive?
Yes. Cell values, formulas, data validation, named ranges, conditional formatting, charts, and pivot tables are all repacked unchanged. Only the macro parts are dropped.
Does it modify my original file?
No. The original on disk is never touched. The tool produces a separate downloaded copy, so you keep the macro-enabled source until you choose to delete it.
What exactly gets deleted?
Any ZIP entry whose path contains vbaproject.bin, vbadata.xml, or xl/macrosheets/ (case-insensitive), plus the vbaProject relationship in xl/_rels/workbook.xml.rels. Everything else is preserved.
What tier do I need?
Developer tier or higher. Free, Pro, and Pro-media accounts can see the tool but are blocked at run time with VBA Macro Stripper requires Developer tier.
Is the file uploaded anywhere?
No. Processing happens entirely in your browser tab. The bytes are read locally, unzipped in memory, repacked, and offered as a download. Nothing is sent to a server.
When should I just use Trust Center instead?
Use Trust Center as a local safety net for files you trust and want to keep as .xlsm. Use the stripper when a workbook must be macro-free for every recipient and machine. Note that macros are not the only payload that travels with a file — buried tabs do too (remove them with the Hidden Sheet Destroyer), as do risky references (review them with the External Link Auditor).
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.