MS Access Form Not Working — Complete Fix Guide for Corruption, Events, Locking & Blank Forms

By the team at Hire Access Developer — 15+ years fixing production Microsoft Access systems for US businesses. Last updated: .

When an MS Access form stops working, you are dealing with one of three distinct failure modes — and the fix for each is completely different. This guide covers all of them with step-by-step instructions: forms opening blank, form object corruption, VBA event handlers that won't fire, forms not saving to the table, recordset locking, subform errors, and UI freezing. Read the diagnostic section first to identify which category you're in before attempting a fix.

What causes MS Access form failures?

Access form failures fall into three buckets. Identify the bucket before you start fixing — applying the wrong remedy wastes hours and can worsen corruption.

  • Front-end / object corruption — the form document inside the .accdb is damaged. Symptoms: form won't open, opens to a blank white screen, controls disappear, properties reset on save, or the form throws "there is no field in the recordset" on fields that exist. The underlying tables are healthy; only the form object is damaged.
  • Data-link / recordset failure — the bound query, linked table, or ODBC connection has a problem. Symptoms: form opens but shows no data, throws an error on navigation, won't save edits back to the table, or freezes while loading records. The same failure appears in a datasheet of the same table — the form is just where you see it.
  • VBA / event code failure — the form renders correctly but buttons do nothing, combo boxes don't cascade, or validation doesn't run. Event handlers have been broken by a compile error, control rename, or a prior runtime error that left the VBA project in break mode.

3-step quick diagnostic

Run these three checks in order. Stop when you've identified the bucket — then jump to that fix section below.

  1. 1Open the same data in a plain datasheet. In the Navigation Pane, double-click the table or query that the form is bound to. If the data loads fine there but the form still fails — you're in bucket ① (form object corruption). If the datasheet also shows errors or no data — you're in bucket ② (data-link failure).
  2. 2Run Debug → Compile VBAProject (Alt+F11 → Debug → Compile). If compilation stops on a red-highlighted line, you have a VBA compile error. A compile error silences all event handlers in the entire project — not just the broken module. Fix the compile error first before diagnosing anything else.
  3. 3Check for an active break mode in the VBA IDE. Open the VBA IDE (Alt+F11). If the title bar says "Microsoft Visual Basic for Applications — [Break]" or a line is highlighted in yellow, the project is paused. Click Run → Reset to clear it. A VBA project stuck in break mode silently refuses to fire any event handlers.

Fix: MS Access form opens blank

A blank Access form is one of the most searched problems — and it has five distinct causes that each require a different fix. Work through them in order.

Cause 1 — Data Entry property set to Yes

When Data Entry = Yes, the form opens to a new blank record only and shows no existing data. This is intentional for data entry forms but is often set accidentally.

Fix: Open the form in Design View → Property Sheet → Data tab → set Data Entry to No. Save and reopen.

Cause 2 — A filter is hiding all records

A saved filter or a filter applied in the form's Open event can exclude all records, producing a blank form with no error message.

Fix: While the form is open, go to Home → Advanced → Clear All Filters. Also check the form's Filter property in Design View (Property Sheet → Data → Filter) and clear any hardcoded filter expression.

Cause 3 — RecordSource query returns no records

The query or table bound to the form exists, but it returns zero rows — so the form correctly shows nothing.

Fix: Open the RecordSource query directly (Design View → Property Sheet → Data → RecordSource → click the "..." button → Run). If it returns no records, the WHERE clause is the problem, not the form.

Cause 4 — Trusted location / macro security blocking On Open

If Access blocked macro content when you opened the database, the form's On Open or On Load event may not have run — and if that event populates the RecordSource dynamically, the form stays blank.

Fix: File → Options → Trust Center → Trust Center Settings → Trusted Locations. Add your database folder. Reopen the database and click "Enable Content" if the security bar appears.

Cause 5 — Corrupt form object

If all the above check out and the form still opens blank, the form object itself may be corrupt. See the Form Corruption section below for the recovery sequence.

Fix: Access form corruption (won't open, crashes, missing controls)

Access form corruption means the form document object stored inside the .accdb has been damaged. Symptoms include: the form won't open at all (clicking does nothing), Access crashes when opening it, controls disappear or revert to defaults, event procedure names get rewritten, or you see "there isn't enough memory to perform this operation" when the file isn't actually low on memory.

Compact & Repair rarely fixes form corruption — it addresses file-level bloat, not object-level damage. The correct approach is to rebuild the form in a clean database.

Step-by-step recovery for corrupt Access forms

  1. 1Back up immediately. Copy the .accdb file before touching anything. Name it with today's date. Every recovery step below should be done on this copy, not the live file.
  2. 2Disable Name AutoCorrect before anything else. File → Options → Current Database → uncheck Track name AutoCorrect info and Perform name AutoCorrect. This feature silently renames event procedures when you rename controls, and it actively worsens recovery if left on. Apply and close options.
  3. 3Try exporting the form as text. In the VBA IDE (Alt+F11), open the Immediate Window (Ctrl+G) and run: Application.SaveAsText acForm, "YourFormName", "C:\temp\form_export.txt". If this succeeds, you have a readable backup of the form definition that you can use to reference property settings during rebuild.
  4. 4Create a new blank database. File → New → Blank Database. Give it a new name. This becomes your clean recovery shell.
  5. 5Import all objects except the corrupt form. External Data → New Data Source → From Database → Access. Select your damaged .accdb. Import: all tables, all queries, all forms except the corrupt one, all reports, all modules, all macros. Click OK.
  6. 6Recreate or re-import the corrupt form. For simpler forms: try importing the corrupt form into the new database — sometimes the import process strips the corruption. For complex forms: rebuild from scratch using the exported text file as your property reference. This takes longer but produces a cleaner result.
  7. 7Run Debug → Compile VBAProject and Compact & Repair. Verify clean compile, test all key workflows, then compact the new database before deploying.

Fix: VBA event handlers not firing

When you click a button or change a combo box and nothing happens — no error, no response — the VBA event handler is not running. This is almost never a mystery; it's always one of five traceable causes.

Cause 1 — VBA project in break mode

If a previous error was thrown and not handled, VBA enters break mode and stops responding to all events until you reset it.

Fix: Open the VBA IDE (Alt+F11). If the title bar shows "[Break]" or a line is highlighted in yellow, click Run → Reset (or press the square Stop button). Close and reopen the form.

Cause 2 — Control name doesn't match the Sub name

The event procedure naming convention is rigid: a control named cboCustomer must have a procedure named exactly Sub cboCustomer_AfterUpdate(). If you renamed the control (or Name AutoCorrect renamed it incorrectly), the wiring breaks silently.

Fix: In Design View, click the control → Property Sheet → Other tab → check the Name. Then in the VBA IDE, verify the Sub name matches exactly. Also check the Event tab in Property Sheet — the event should show [Event Procedure], not be blank.

Cause 3 — Compile error silencing all events

A single compile error anywhere in the project silences all event handlers everywhere — not just the module with the error. The form looks normal but no events fire.

Fix: Alt+F11 → Debug → Compile VBAProject. Fix every compile error before testing events. This is the most commonly overlooked cause.

Cause 4 — Form fails during Open/Load before events register

If the Form_Open or Form_Load event throws an error that's swallowed by On Error Resume Next, the form may open in a partial state where later events (AfterUpdate, Click, etc.) are never registered.

Fix: Temporarily change On Error Resume Next to On Error GoTo 0 in Form_Open and Form_Load. Reopen the form — the real error will surface.

Cause 5 — Break on All Errors is set

VBA IDE → Tools → Options → General → Error Trapping. If set to "Break on All Errors," VBA stops on handled errors too — which can stop event chains mid-execution without a visible message.

Fix: Set to "Break on Unhandled Errors" for production; use "Break on All Errors" only during active debugging sessions.

Fix: MS Access form not updating the table (not saving data)

You enter data, navigate away, and the changes disappear — the table is unchanged. This is a distinct failure from form corruption and has its own set of causes.

Step-by-step diagnosis

  1. 1Check Allow Edits and Allow Additions. Design View → Property Sheet → Data tab. Confirm Allow Edits = Yes and (if adding new records) Allow Additions = Yes. These are sometimes set to No intentionally for read-only views but are accidentally left that way.
  2. 2Check if the RecordSource is an updatable query. Queries that contain DISTINCT, GROUP BY, aggregate functions (Sum, Count), TOP, or are based on non-primary-key subqueries are not updatable. Access shows the data but silently refuses to write edits back. Fix: base the form on the underlying table directly, or add a primary key to the recordset that Access can use to write back.
  3. 3Check for a BeforeUpdate event that cancels the save. In the VBA IDE, search for Cancel = True in BeforeUpdate procedures. If validation logic sets Cancel = True, the save is silently aborted. Add a MsgBox before the Cancel line to confirm this is firing.
  4. 4Verify the database is not open read-only. Title bar shows "(Read-Only)" if Access opened the .accdb in read-only mode. Causes: another user has the database open exclusively, the file is on a read-only network share, or NTFS permissions deny Write to the current user. Check the .laccdb file to see who holds the lock.
  5. 5For linked SQL Server tables — verify the ODBC link is active. If the linked table points to SQL Server via ODBC and the connection dropped, edits appear to succeed in the form but fail to write to SQL Server. Check by opening the linked table directly — if it errors, relink via Linked Table Manager.

Fix: Access form recordset locking errors

Lock errors on forms show up as "This record has been changed by another user since you started editing it," "You don't have exclusive access to the database," or the form freezing while trying to save. These are data-tier problems that the form surface makes visible.

Common recordset locking causes and fixes

SymptomCauseFix
Write conflict dialog on every saveTwo users editing same record; optimistic lock expiredSet Record Locks = Edited Record for hot rows; refresh interval tuning
Form hangs after clicking SaveWide dynaset + slow network = long page lock holdNarrow the RecordSource; add index on join columns; test on Ethernet
.laccdb grows and never shrinksUnclosed DAO Recordsets leaking session entriesAudit OpenRecordset calls — every open needs a Close in error path
Subform requery locks parentSubform requeries on every navigation triggering parent lockRequery subform only on meaningful parent change, not Form_Current

Fix: MS Access form freezing and UI flickering

Access UI freezing and flickering are caused by the UI thread waiting on engine I/O or by too many repaint operations being triggered in sequence. Before you restructure the form design, identify which operation causes the freeze.

Most common causes of Access form freezing

  • Cascading combo box requeries — one combo's AfterUpdate event requeries two or three others, each hitting the database synchronously on the UI thread. Add DoCmd.Echo False at the top and DoCmd.Echo True at the bottom of the chain, but more importantly, reorder requeries to fire only what changed.
  • Form_Current or Form_Resize calling Repaint — these events fire on every record navigation. A Repaint or Requery call inside them means every arrow key press hits the database.
  • Timer interval too short — a form timer set to 1000ms (1 second) that requeries a linked SQL Server table will generate 60 ODBC roundtrips per minute per open form. Set timers to the minimum refresh interval that makes business sense (often 30–60 seconds).
  • Wide RecordSource loading unnecessary columns — a bound form on SELECT * FROM tblOrders (50 columns, 200,000 rows) will page slowly over a network share. Narrow the RecordSource to only the columns the form actually displays.
  • Network latency (Wi-Fi / VPN) — see Environmental Causes section below. Test on Ethernet first.

Diagnosing which event causes the freeze

Add a temporary Debug.Print Now() & " — EventName" line to each suspected event (Form_Current, Form_Resize, combo AfterUpdate). Open the Immediate Window (Ctrl+G) while using the form. The timestamps show you which event fires most and how long gaps exist — long gaps indicate that event is blocking the UI thread.

Fix: Access subform errors and not displaying data

Subforms have their own property layer on top of the parent form. When a subform stops showing data or throws errors, the problem is almost always in the link fields — the join between parent and child form.

  1. 1Check Link Master Fields and Link Child Fields. Click the subform control in Design View → Property Sheet → Data tab. Verify Link Master Fields (field on the parent form) and Link Child Fields (field on the subform's recordsource) are both set correctly and the field names match exactly, including capitalization. A blank Link Child Fields causes the subform to show all records regardless of the parent.
  2. 2Verify the child field exists in the subform's RecordSource. Open the subform's RecordSource query in Design View. Confirm the Link Child Field is included in the query output — it must be a column in the result set, not just used in a WHERE clause.
  3. 3Check for a RecordSource error in the subform. Open the subform directly from the Navigation Pane (not through the parent). If it throws an error or shows no data when opened standalone, the subform's own RecordSource is the problem — fix the query before debugging the link.
  4. 4Check the subform control's Enabled and Visible properties. If a VBA event on the parent form sets Me.sfrmOrders.Visible = False or Me.sfrmOrders.Enabled = False conditionally, the subform may be hidden in some states. Search VBA code for the subform control name.

Form error code quick lookup

CodeMessageLikely cause on a form
2450Can't find the referenced formVBA code references Forms!FormName but that form isn't open; check open state before referencing
2101Setting not valid for this controlSetting a property that doesn't apply to this control type; check control type before setting
2105Can't go to specified recordDoCmd.GoToRecord with a record number that doesn't exist; form RecordSource is empty
2115Macro or function set to Before Update / property can't be carried outBeforeUpdate Cancel=True or a validation rule blocking the save while code tries to move focus
2501Action was cancelledA macro or event set Cancel=True on Open/Load; check On Open event for error handling with Resume Next that swallows a cancellation
3075Expression not valid in queryBroken ControlSource or RowSource expression after a field was renamed in the table; rebuild the query
3151ODBC connection to [server] failedLinked SQL Server table lost its connection mid-requery; validate DSN and network path

Environmental causes of Access form problems

Many Access form problems that look like code bugs are actually caused by the environment the database runs in. Fixing VBA without fixing the environment means the problem returns after the next user change, Office update, or network event.

Wi-Fi and VPN

Office build channel mismatch

Users on different Office 365 update channels (Current Channel vs Monthly Enterprise) run different versions of the ACE engine. A form that works on Current Channel may fail on Semi-Annual Channel if a bug was introduced and patched in one channel but not yet deployed to another. Standardize all users on the same channel via Group Policy or the Office Deployment Tool.

Antivirus scanning the .accdb

Endpoint protection products that scan .accdb files on open or write can cause forms to freeze during saves, introduce file locking conflicts, or trigger error 2501 (action cancelled) when the AV intercepts a write. Add the Access backend directory to your AV exclusion list and test whether form freeze frequency drops.

NTFS permissions

The user account needs Read, Write, and Create permissions on the folder containing the backend .accdb. Create is required for ACE to write the .laccdb lock file. If Create is missing, ACE throws before your event handlers run — making it look like a form problem when it's a permissions gap.

Professional stabilization

Self-service fixes work for isolated incidents. When the same form failures recur after every Office update, or when form corruption is spreading to multiple objects, you need a structural assessment — not another Compact & Repair cycle.

We stabilize production Access form systems for US businesses: payroll entry forms, inventory management, client billing, and custom workflow systems. Our approach: reproduce the failure on your exact topology, identify the root cause category, and deliver a written fix sequence with regression criteria before your next business cycle.

  • Same-day triage for production form failures
  • Corruption recovery without data loss
  • VBA event audit and clean rewrite
  • Ground-up form rebuilds when patch mode isn't enough

Frequently asked questions

Why is my MS Access form not working?
MS Access forms fail for three distinct reasons that each have different fixes: (1) Front-end object corruption — the form document is damaged; fix by rebuilding in a clean database. (2) Data-link failure — the bound recordset, query, or ODBC connection has a problem; fix by diagnosing the query directly. (3) VBA/event failure — compile errors, control name mismatches, or break mode are blocking event handlers; fix by compiling clean and resetting VBA state.
Why does my Access form open blank with no data?
Check in this order: (1) Data Entry property set to Yes — change to No. (2) A filter hiding all records — Home > Advanced > Clear All Filters. (3) RecordSource query returns zero rows — open the query directly and check its WHERE clause. (4) Trusted location / security blocking On Open event — add to trusted locations. (5) Form object corruption — rebuild in a clean database.
How do I fix a corrupted Access form?
Disable Name AutoCorrect first (File > Options > Current Database). Back up the .accdb. Export the form as text using Application.SaveAsText. Create a new blank database. Import all objects except the corrupt form. Rebuild the form from scratch or import it from the damaged database and repair properties manually. Run Debug > Compile VBAProject and Compact & Repair before redeploying.
Why are my Access form buttons not working?
Buttons not responding are almost always caused by: (1) VBA project in break mode — click Run > Reset in the VBA IDE. (2) A compile error silencing all events — run Debug > Compile VBAProject and fix all errors. (3) The button's On Click event property is blank or the Sub name doesn't match the button's Name property. (4) The form's On Open event threw an error that prevented later event registration.
Why is my Access form slow or freezing?
Form freezing is usually caused by: wide RecordSource queries loading too many rows over a network share, cascading combo requeries on Form_Current (fires on every navigation), a timer interval that's too short for the network latency, or Wi-Fi/VPN transport adding latency to every I/O operation. Test on a wired Ethernet connection first — if performance improves significantly, the problem is network transport, not the form design.

Tell us the failure mode — not the mood

Send the error code (or symptom), the form name, and whether the fault follows the query when you open it in a datasheet. We respond with what we'd prove first.

Free Access Audit