Limitations of Access 365 Edge Browser Control (and What to Use Instead)
Microsoft's Edge Browser Control replaced the dead IE WebBrowser control in Access 365, and on the surface it looks like the upgrade every VBA developer was waiting for: Chromium rendering, modern CSS, real JavaScript. Then you sit down to build something and find out the VBA surface is four methods, one event, no DOM access, no JSON helpers, and nothing for Excel, Word, or VB6. This page documents what the control actually exposes, where it breaks in practice, and the alternative.
What the Access 365 Edge Browser Control Actually Exposes
According to Microsoft's own documentation, the control's VBA-facing API is:
Navigate(URL)— go to a URL.Refresh— reload the page.ExecuteJavascript(code)— run JS in the page (fire-and-forget).RetrieveJavascriptValue(expr)— evaluate JS and return a value.LocationURLproperty (read, not fully reliable).DocumentCompleteevent (one, not the 59 the legacy control had via binding).
That's the entire surface. Everything else you used to do with WebBrowser.Object.Document in the old control is gone — WebView2 has no Object property, so Microsoft did not port MSHTML-style DOM access into the new control. The result is a Chromium engine with a VBA API smaller than what VB6 had in 1998.
The Gaps That Matter in Real Projects
1. No DOM access from VBA
You can't read an element's value, click a button by ID, or submit a form directly from VBA. You can only run JavaScript and hope the result round-trips cleanly through RetrieveJavascriptValue — which multiple developers have reported is unreliable with timing-dependent content and requires non-standard quirks like omitting trailing semicolons.
2. No JSON engine
Every VBA project that talks to a modern web page talks to JSON. The Edge control gives you no parse/stringify helpers, no path queries, no type coercion. Either you hand-roll a parser in VBA, or you push every piece of data through ExecuteJavascript string concatenation and pray about escaping.
3. One event
DocumentComplete tells you the page is loaded. That's it. There is no navigation-started event, no navigation-failed event, no download event, no new-window event, no web-message-received event, no auth-required event, no process-crashed event. Anything event-driven has to be polled from VBA.
4. Trusted Domains whitelist required
The Edge control's Trusted Domains property is not optional hardening — it is a prerequisite. Every URL in a redirect chain must be pre-registered. Miss one (say, an IdP's callback origin) and the flow silently fails. Changes only take effect after closing and reopening the control. This makes it unusable for anything that hits real-world redirects (OAuth, SSO, CDN-hosted login pages).
5. Access-only
Excel VBA developers cannot use the Edge Browser Control. Neither can Word VBA, PowerPoint VBA, or VB6. It is shipped as an Access form control and exposes no standalone COM surface.
6. Documented bugs
Reports from production users include: file paths with spaces not resolving, cannot switch between https://msaccess/ local content and live URLs without reloading the form, right-click crashes in some builds, 2048-character limit on ControlSource assignments from VBA, and Edge keyboard shortcuts not honored.
Comparison: IE WebBrowser vs Access Edge Browser Control vs LiteView2
All three controls render web content inside a VBA host. That is where the similarity ends. This table is based on Microsoft's own documentation for the Edge Browser Control and the LiteView2 feature manifest.
| Capability | IE WebBrowser | Access Edge Control | LiteView2 |
|---|---|---|---|
| Rendering engine | MSHTML (IE11 legacy) | Chromium (WebView2) | Chromium (WebView2) |
| VBA method count | Many (via .Object) |
4 | 450+ |
| VBA events | Many | 1 (DocumentComplete) |
59 |
| DOM access from VBA | Yes (MSHTML DOM) | No | Yes (28 DOM helpers) |
| VBA ↔ JavaScript messaging | Limited | One-way ExecuteJavascript |
PostWebMessage, host objects, registered callbacks |
| JSON engine | None | None | ILV2Json — parse, path query, stringify |
| Multiple browser instances | One per control | One per control | Pool of N, shared or isolated profiles |
| InPrivate / profile isolation | No | No | Yes |
| Print to PDF / screenshot capture | No | No | Yes (PrintToPdf, CaptureScreenshot) |
| Download control (pause/resume/cancel) | No | No | Yes |
| Cookie / cache management | Partial | No | Yes |
| Proxy support | System-wide only | No | Yes (per-browser) |
| Trusted Domains required for navigation | No | Yes (whitelist every URL) | No (optional) |
| Works in Excel VBA / Word VBA / VB6 | Yes (with quirks) | Access only | Yes — Excel, Access, Word, PowerPoint, VB6 |
| Registration-free deployment | No | No (requires MS365) | Yes (no regsvr32, no admin) |
| Active development | Frozen | Slow | Active |
What LiteView2 Enables That the Edge Control Does Not
The capability gap translates into concrete things you can ship:
- Full DOM access from VBA — read, write, click, focus, scroll, submit, check element existence, get/set attributes, by ID, name, or CSS selector. See the ILiteView2Ctrl API reference.
- Bidirectional VBA ↔ JavaScript messaging — post JSON messages from VBA to the page, register VBA callbacks invokable from JavaScript, expose host objects directly to the V8 runtime.
- Native JSON parsing via ILV2Json — parse once, query many, with compiled paths for hot loops. Works standalone, without WebView2.
- Push a DAO/ADO recordset to a web page as JSON in one call (
PushRecordset), no file exports, no middleware. - Run in Excel, Word, PowerPoint, and VB6, not just Access.
- Registration-free deployment — ship the OCX next to your
.accdbor.xlsm, noregsvr32, no admin rights, no installer. - 59 events covering navigation, DOM changes, downloads, authentication, process lifecycle, and screen capture — see the events reference.
Example: Things You Cannot Do With the Access Edge Control
Two short VBA snippets that would not work with Microsoft's control. Both work in Access, Excel, Word, and VB6 with LiteView2.
Read a page element and write a value — no .Object.Document required
Dim lv As New LiteView2.BrowserPool
Dim idx As Long
idx = lv.CreateInControl("https://example.com/form", Me.Frame1)
' Wait for load (59 events to choose from in real code)
Do While lv.IsLoading(idx): DoEvents: Loop
' Read a field, write to another, click submit — all from VBA
Dim email As String
email = lv.GetElementValueById(idx, "user-email")
lv.SetElementValueById idx, "summary-email", email
lv.ClickElementById idx, "btn-submit"
Parse a JSON response from a fetch call without hand-rolling a parser
Dim json As Object
Set json = CreateObject("LiteView2.Json")
Dim raw As String
raw = lv.ExecuteScriptWithResult(idx, _
"fetch('/api/orders').then(r => r.text())")
Dim handle As Long
handle = json.Parse(raw)
Dim total As Double
total = json.GetValueH(handle, "summary.total_usd")
Dim firstCustomer As String
firstCustomer = json.GetValueH(handle, "orders[0].customer.name")
Neither of these is possible with Navigate + Refresh + ExecuteJavascript + RetrieveJavascriptValue alone. The DOM helpers come from the ILiteView2Ctrl interface; JSON parsing comes from ILV2Json.
fetch example in the Access Edge Control, it would also need every URL in the response chain (CORS preflight, redirects, CDN) pre-registered in the Trusted Domains table, and require a form reload after any change. LiteView2 navigates and fetches any URL by default.
Evaluate LiteView2
LiteView2 ships as a single OCX. Drop it next to your database or workbook, paste a short bootstrap module, and call CreateInControl. Free 30-day trial, no installer, no admin rights, no registry writes.
Works in Access, Excel, Word, PowerPoint, and VB6 • 32-bit and 64-bit • Registration-free deployment • Invoice / Payoneer billing on request
Related Reading
- ILiteView2Ctrl API reference — 270+ methods for navigation, DOM, JavaScript, printing, and screenshots.
- 60+ VBA WebView2 event handlers — everything the Edge Control's single
DocumentCompleteevent does not cover. - ILV2Json — VBA JSON parser and engine — parse, query, and stringify JSON without a WebView2 dependency.
- IBrowserPool reference — run multiple isolated browsers from one control.
- LiteView2 product overview.