Microsoft Access · VBA

It has run the business since 2011.
Nobody wants to touch it.

Access applications do not fail on a date. They accumulate — more rows, more workstations, more little fixes made by whoever was around — until one ordinary Tuesday the file will not open and the office stops. You almost never need to replace one. You need to know which part is actually load-bearing.

The situation

If two or three of these are true, it is later than you think.

It has run the business for a decade and nobody wants to be the person who opens it.

Somebody has to be “out of the database” before somebody else can do a thing.

It has to be compacted and repaired on a schedule, and everyone treats that as normal.

It broke the week the office moved to new laptops, or to Microsoft 365.

The person who wrote the VBA left, and the forms are the only documentation.

You are being quoted for a full rewrite and you cannot tell whether you need one.

Why it degrades

Three ceilings, and none of them announce themselves.

Two gigabytes. That is the hard limit on a single Access file. An application collecting orders since 2011 gets there eventually, and when it does the failure is not a polite warning — it is a file that will not open on a morning when it has to.

The network. Access does not talk to a server; it holds a live lock on a file over a share. That is fine on a wired office LAN and increasingly not fine over Wi-Fi, a VPN or a NAS that sleeps. A dropped connection is not a retry. It is corruption, and the reason “compact and repair” became a ritual.

The office around it. Access applications are unusually sensitive to changes that have nothing to do with them: a move to 64-bit Office breaks API declarations written before it existed, an update removes a reference, a control the original developer used stops shipping. The application did not change. Everything around it did.

What gets inspected

Eight questions specific to Access.

These sit alongside the thirteen general domains — access, backups, security, obligations — that every health check covers regardless of what the system is written in.

01

Is it split?

A front end of forms and code on each workstation, a back end of tables on the server. If it is one file being opened by several people over a share, that is the single largest cause of the corruption you have been living with — and it is also the cheapest thing on this list to fix.

02

How close is it to 2 GB?

That is a hard ceiling per file, not a guideline. An application that has been accumulating rows since 2011 can be much closer than anyone realises, and the failure when it arrives is not graceful.

03

Where does the back end actually live?

A mapped drive, a NAS, a folder someone shares from their own machine, a laptop on Wi-Fi. Access holds a live lock over that connection, so a dropped packet is not a retry — it is a corrupted file.

04

Do the VBA references still resolve?

“Missing reference” after an Office update is the usual way a working application stops working overnight. We list every reference, its version, and whether it still ships.

05

Is it tied to 32-bit Office?

API declarations written before 64-bit Office need PtrSafe and correct pointer types. Move the office to 64-bit and an untouched application starts failing on the declarations alone.

06

Can the code be got out at all?

An .accdb is a binary blob — you cannot diff it, and it has almost certainly never been in version control. We export every module and form to text so that, for the first time, the logic is readable outside Access.

07

What is it linked to?

Linked tables, ODBC sources, Excel files it reads, folders it writes to, the Outlook automation nobody remembers writing. These are the things that break silently when a path changes.

08

How many people really use it at once?

Access is honest at a handful of concurrent users on a local network and unhappy well before the number people expect — especially across a VPN.

What usually happens next

The most common honest answer is not a rewrite.

Split it and move the back end. Tables on the server, forms and code on each machine. For an unsplit database on a flaky share this is days of work and it removes most of the corruption risk on its own. It is where a majority of these engagements end.

Move the data to SQL Server and keep the front end. This is the bypass in its most literal form: the tables move, the Access application links to them instead, and the forms, reports and VBA people have used for a decade carry on unchanged. Microsoft ships a migration assistant for exactly this. The 2 GB ceiling and the file-lock corruption both disappear, and nobody has to learn anything new.

Replace it. Sometimes right — usually when the forms themselves are the problem, or when what the business needs now is genuinely different from what it needed in 2011. If that is the verdict, the report says so with the arithmetic rather than assuming it.

Retire it. A surprising number of Access applications are doing a job that an off-the-shelf product now does properly. When that is the case we will say so, and the engagement ends there.

Find out which one it is

Triage is one day and needs no access to the file.

$1,500, a conversation and what is visible from outside — enough to say whether a full health check is worth booking. The check itself is $3,500 and produces a report you keep whatever you decide next.