One of the most persistent myths around VBA is that code review is impractical. Because VBA lives inside binary Excel files, many teams assume that reviewing changes is either impossible or not worth the effort. As a result, changes slip into production without scrutiny, bugs are reintroduced, and knowledge remains locked inside individual developers’ heads. In reality, meaningful diffing and code review are not only possible for VBA projects — they are transformative once implemented correctly. The key is to stop thinking of the workbook as the unit of change and start thinking of exported code as the reviewable artifact.
This post explains how to make VBA code diffable, reviewable, and discussable in a way that scales beyond a single developer.
Reviewing changes by opening two Excel files side by side is a losing battle. VBA editors do not show structural differences clearly, UserForms hide meaningful changes behind property grids, and even small edits become difficult to spot. Worse, workbook-level comparison mixes concerns. Code changes are tangled together with formatting differences, saved state, and invisible metadata. Reviewers are forced to trust the developer instead of the evidence.
Once code is exported, this problem disappears almost entirely.
When modules, classes, and forms are exported consistently, they become plain text files. Plain text is reviewable. It can be diffed, commented on, versioned, and discussed. At that point, reviewing VBA code becomes no different from reviewing any other language. The tooling already exists. What changes is the discipline.
Consistency is the foundation. Modules must be exported in a predictable way, stored in a stable folder structure, and committed with minimal noise. When this is done well, diffs become small, readable, and trustworthy.
The biggest enemy of meaningful diffs is unnecessary change. VBA developers often unknowingly create noise by reformatting code, renaming controls casually, or exporting forms that have not actually changed.
Clean diffs require restraint. Formatting should be stable. Naming conventions should be respected. Changes should be scoped to the problem being solved.
This discipline pays dividends during review. When reviewers trust that a diff only shows intentional changes, they read more carefully and comment more constructively.
UserForms are the most intimidating part of VBA diffing, but they are far from impossible to review. Exported .frm files contain both layout definitions and code. While layout changes can look verbose, they are still deterministic.
The key is to focus reviews on intent rather than syntax. If a button was added, renamed, or repositioned, that change should be explained in the commit message. Reviewers can then skim the layout section and focus on the behavioral code beneath it.
Over time, teams develop a shared literacy around what “normal” UserForm diffs look like.
In VBA-heavy environments, code review often matters more for shared understanding than for catching bugs. Excel systems tend to live for years, quietly accumulating complexity. Without review, that complexity becomes tribal knowledge.
Review forces developers to explain why something was done, not just what was done. It surfaces assumptions, reveals hidden dependencies, and spreads ownership across the team. This is particularly important in Excel, where the original author is often the only person who truly understands the system.
Effective reviews focus on risk. Does this change affect user inputs? Does it alter calculation logic? Does it interact with external systems? Does it introduce performance or compatibility concerns? Nitpicking style issues can wait. What matters is whether the change could break workflows or introduce subtle errors. This mindset keeps reviews lightweight and sustainable, rather than adversarial or exhausting.
Reviews should be tied to branches and releases, not ad-hoc edits. A feature branch is reviewed before it merges. A hotfix is reviewed before it ships. A release branch is reviewed before it becomes production. This structure creates a natural checkpoint without slowing development. It also creates an audit trail that answers difficult questions later: who approved this change, and on what basis? In regulated or high-risk environments, this trail is invaluable.
Introducing code review into an Excel-centric team often feels uncomfortable at first. Developers worry it will slow them down or expose mistakes. In practice, the opposite happens.
Once reviews become normal, quality rises, rework drops, and confidence increases. Developers take more care with changes because they know someone else will read them. Bugs are caught earlier, when they are cheaper to fix. Most importantly, Excel stops being “that fragile thing only one person understands” and becomes a shared asset.
Build pipelines make VBA projects reproducible. Versioning makes them predictable. Branching makes parallel work possible. Diffing and review are what hold it all together. Without them, mistakes slip through silently. With them, changes become deliberate, visible, and explainable.
At this stage in the series, VBA has crossed a line. It is no longer an informal scripting environment. It is a governed, reviewable codebase — exactly where long-lived Excel systems need to be.
Cat On A Spreadsheet
Cat On A Spreadsheet