Why does your Excel file show #VALUE! when you try to refresh the Access link? Why does the connection vanish after saving and reopening? Why does it work on your laptop but break when shared with Finance?
The answer is almost always the same: Excel isn’t failing — the connection string is lying. It looks right. It tests successfully. But it’s pointing to a copy of the Access file you don’t control — or worse, a path that only exists on your desktop.
The Problem
You’ve got an Access database named sales_tracker.accdb, sitting in C:\Users\Sarah\Documents\DB\. Your team uses it daily to log orders, inventory changes, and customer notes. You build a dashboard in Excel (Sheet1) pulling sales totals by region. Everything works fine — until you email the workbook to Leo in Procurement.
He opens it, clicks Data > Refresh All, and gets this:
"The Microsoft Access database engine could not find the object 'Orders'. Make sure the object exists and that you spell its name and the path name correctly."
That error isn’t about missing tables. It’s about broken trust between Excel and Access — specifically, how Excel stores where the .accdb lives.
| Region | Q1 Sales | Q2 Sales | Last Updated |
|---|---|---|---|
| North America | $124,760 | #REF! | 2024-02-28 |
| EMEA | $89,140 | #VALUE! | 2024-03-01 |
| APAC | $112,350 | #N/A | 2024-03-02 |
| LatAm | $67,820 | #REF! | 2024-02-29 |
| Global Total | $394,070 | #VALUE! | 2024-03-02 |
Notice how Q2 columns collapse. That’s not bad formulas — those cells are linked to an external query. And once the path breaks, Excel stops trying. It doesn’t warn you. It just returns errors silently.
The Solution
The fix isn’t more complex — it’s more precise. You need to replace the hardcoded local path with a relative one — and force Excel to re-evaluate the source every time. Here’s how, step-by-step:
- Go to Data > Queries & Connections (Alt+A, Q). In the pane, right-click your query (e.g., "Orders_by_Region") and select Edit.
- In Power Query Editor, go to Home > Advanced Editor (Alt+H, E). Look for the line starting with
Source =. It’ll look like this:Source = Access.Database("C:\Users\Sarah\Documents\DB\sales_tracker.accdb", [CreateNavigationProperties=true]) - Replace the full path with a relative one using
Excel.CurrentWorkbook()trick. Paste this instead:Source = Access.Database(File.Contents("sales_tracker.accdb"), [CreateNavigationProperties=true]) - Click Done. Then go to File > Options > Trust Center > Trust Center Settings > External Content and set Enable all Data Connections (required for File.Contents).
- Save the Excel file in the same folder as
sales_tracker.accdb. Now when Leo opens it, Excel finds the .accdb by name — not by C:\ drive location.
The beauty of this approach is that File.Contents() treats the Access file like any other binary asset — no registry lookups, no user profile dependencies. It just reads the file beside the workbook. What makes this elegant is that it works even if the folder moves — as long as both files stay together.
| Region | Q1 Sales | Q2 Sales | Last Updated |
|---|---|---|---|
| North America | $124,760 | $138,920 | 2024-03-15 |
| EMEA | $89,140 | $94,370 | 2024-03-15 |
| APAC | $112,350 | $119,080 | 2024-03-15 |
| LatAm | $67,820 | $71,540 | 2024-03-15 |
| Global Total | $394,070 | $423,910 | 2024-03-15 |
Now Q2 values populate cleanly — and refresh works on any machine with both files present. Bonus: If you rename the Access file to sales_v2.accdb, just update the name inside File.Contents("...") once — no re-linking required.
Going Further
You’re not stuck with static pulls. Once the link is reliable, you can add layers:
- Parameterized queries: Create a cell (say, F1) with a region name like "EMEA". In Power Query, go to Manage Parameters > New Parameter, then reference it in your SQL statement:
SELECT * FROM Orders WHERE Region = "&RegionParam&". - Incremental refresh: Add a column in Access called
LastModified(DateTime). In Power Query, filter rows where[LastModified] >= DateTime.LocalNow() - #duration(7,0,0,0)— pulls only last week’s changes. - Merge with Excel tables: Have a local Excel table of sales reps (A1:C25) and merge it into your Access query on
RepID. No VLOOKUP needed — just Home > Merge Queries and chooseJoin Kind = Left Outer. - Auto-refresh on open: Right-click the query in Queries & Connections, choose Properties, check Refresh data when opening the file. Warning: Only do this if the Access file is always available.
Surprising tip: You can embed the Access file directly into Excel — yes, really. Save the .accdb as a binary object (Insert > Object > Create from File > Browse), then use Binary.Buffer() in Power Query to read it. Not recommended for large DBs, but flawless for <5MB files under version control.
When NOT to Use This
This method shines for departmental reporting — but fails catastrophically in these cases:
- Shared network drives with permission splits: If Finance has Read/Write to
\\server\db\but Marketing only has Read, Excel will crash on their machines — even with correct paths. Use ODBC with stored credentials instead. - Access files over 250 MB: Excel chokes loading them via
File.Contents(). Export key tables to CSV first, or switch to SQL Server Express. - Split databases (front-end/back-end): If your Access file links to another .accdb for tables, Excel sees only the front-end forms/macros — not the real data. You must point to the back-end .accdb directly.
- Access 2003 (.mdb) with Unicode fields: Older engines misread UTF-8 characters. Convert to .accdb or pre-process with a VBA script that exports clean CSV.
If your team uses SharePoint or Teams, skip Access entirely — publish the tables to Excel Online via Export > SharePoint List, then connect Excel to that list. It’s slower to set up, but zero path headaches.
Keyboard Shortcuts
| Action | Shortcut | Notes |
|---|---|---|
| Open Queries & Connections pane | Alt + A, Q | Fastest way to manage all external links |
| Open Advanced Editor in Power Query | Alt + H, E | Essential for editing M code directly |
| Refresh all queries | Alt + A, R, A | Doesn’t prompt — runs silently |
| Refresh active worksheet only | Alt + A, R, W | Safer when some queries shouldn’t auto-refresh |
| Open Connection Properties | Alt + A, C, P | Where you toggle “Refresh on Open” |