Table of Contents

[RD-VBAL]: VBA Language Platform Specification

Note

Cette section n'est disponible qu'en anglais.
This section is only available in English.

This specification describes the RDCore Language Platform and SDK; its inspirational source material is the MS-VBAL Open Specification. See RD-VBAL §1.0 Introduction.

RD-VBA is an implementation of the MS-VBAL specification that is independent from its historical MS-VBA runtime host. RD-VBAL is the name of the specification and documentation of the language server platform. It includes the RD-VBA language core, but covers more than the language specification alone.

🎯 The formalization of RD-VBAL is a work in progress.

This specification follows the technical prose style of its inspirational Open Spec source material.


Table of Contents


Conventions

Section numbers

Sections Numbering
Chapters 1–4; the overview sections 5.0 and 6.0; section 6.2 RD-VBAL's own numbering.
Chapters 5 and 6, except 5.0, 6.0 and 6.2 Mirrors MS-VBAL: RD-VBAL §N is about MS-VBAL §N.
An RD-VBA addition that is a variant of an MS-VBAL member A child number of that member. GetJsonSettings is §6.1.2.8.1.7.1, a variant of GetAllSettings (§6.1.2.8.1.7).
An RD-VBA addition with no MS-VBAL counterpart The next number after the last MS-VBAL sibling, marked 🧩. Several such additions are numbered in alphabetical order. Erl is §6.1.2.7.1.14 and the Err function is §6.1.2.7.1.15 (Information module); ErrObject.StackTrace is §6.1.3.2.2.7 (Err class properties).
A section number without a prefix An RD-VBAL section. An MS-VBAL section is always written with the MS-VBAL prefix, as in MS-VBAL §5.4.2.3.

Notes

Note Meaning
Reserved. This section has no content yet. The section only reserves its number. In chapters 5 and 6, a reserved page still names the MS-VBAL section it corresponds to. When the content lives on another page, a See … line after the note links that page.
Not implemented. … A limitation: what RD-VBA does not implement, and what happens instead when that is known.

Markers

Marker Meaning
🎯 An RD-VBA objective, or a deliberate RD-VBA departure from MS-VBA.
🧩 An extension point, or an RD-VBA addition to MS-VBAL.
👉 A consequence worth calling out.
✅ Valid.
❌ Invalid.

Intellectual Property Rights Notice for Open Specifications Documentation

Important

This documentation IS NOT A REVISION of the MS-VBAL specification.

The publisher of the RDCore platform project and of this present documentation, is claiming the rights described in the following paragraph of the Intellectual Property Rights Notice for Open Specifications Documentation section (emphasis added):

Copyrights. This documentation [MS-VBAL] is covered by Microsoft copyrights. Regardless of any other terms that are contained in the terms of use for the Microsoft website that hosts this documentation, you can make copies of it in order to develop implementations of the technologies that are described in this documentation [MS-VBAL] and can distribute portions of it in your implementations that use these technologies or in your documentation as necessary to properly document the implementation. You can also distribute in your implementation, with or without modification, any schemas, IDLs, or code samples that are included in the documentation. This permission also applies to any documents that are referenced in the Open Specifications documentation.

✅ Challenge: Accepted.


Revisions

Date Version Description
2026-06-25 1.0 Initial public version
2026-09-06 1.1 §2.3.1.2 session services; §2.5.2.1.2 array values; §3.2.0.1 numeric literal types; §5.6.9.2 effective type; §5.5.1.2 let-coercion dispatch and the MS-VBAL divergence principle; §2.5.2.1.3 UDT values
2026-09-09 1.2 §2.6 diagnostic code families and help URLs; §2.6.5 diagnostics pipeline
2026-09-13 1.3 §3.4.0 statement node families: §3.4.1 block, §3.4.2 simple and §3.4.3 file statements
2026-09-23 1.4 §3.5.0 instructions: §3.5.1 InstructionList, §3.5.2 Instruction, §3.5.3 lowering, §3.5.4 execution; §5.4.3.8–9 Let and Set statements
2026-09-24 1.5 §5.3.1.11 procedure invocation, ByRef binding, return values, named and Optional arguments; §5.4.3.1 hoisted locals
2026-09-25 1.6 §5.3.1.11 ParamArray; §2.3.1.2 zero-size storage; §2.5.2.1.5 Variant values; §5.5.1.2, §5.5.2.2, §5.6.9.2, §5.6.9.4, §5.6.13, §5.4.2.4 Variant operands; §5.6.9.5 Variant String/Numeric comparison; §6.1.1.16 VbVarType; §5.4.2.10 Null selector; §5.5.1.2.1 DateSerial flag
2026-09-26 1.7 §6.0.1 symbol injection; §6.1.1 predefined enums; §6.1.2.7 Information and §6.1.2.7.1.14 Erl; §6.1.3.2 Err class and §6.1.3.2.2.7 StackTrace; §5.2.3 Enum and UDT scoping; §2.3.1.3 name resolution; §6.1.2.10 Math; §6.1.2.3 Conversion and CLngPtr; §6.1.2.11 Strings; §2.4.1 LongPtr; §2.0.2 rdcore/host/symbols/define and rdcore/session/execute; §2.6 diagnostic titles; §3.5.1 line numbers
2026-09-27 1.8 §5.4.5 file statements; §3.4.3 Lock/Unlock node; §2.5.2.1.3 UDT field store and sizes; §6.1.2.11.1.22 Len/LenB; §6.0 Variant parameters; §5.4.3.6–7 LSet/RSet
2026-09-27 1.9 Sections split into pages of their own; chapters 5 and 6 aligned with MS-VBAL numbering; statement semantics moved from §3.5.4 to §5.4; duplicate section numbers fixed. See the section map below.
2026-09-30 1.10 §6.1.2.6 Financial; §6.0.1 StdLibArrayAttribute; §6.1.2.11.1.22 Date parameters at external dispatch; §5.4.3.3 ReDim runtime semantics, bounds as expressions, Option Base; §5.4.3.4 Erase runtime semantics; §5.3.1.10 the implicit Class interface, Initialize/Terminate, As New and default instances; §5.4.2.20 RaiseEvent, §5.3.1.8 event handlers, §5.2.3.1.2 WithEvents, §5.2.4.3 Event; §2.6.2 VBC09322, VBC09323
2026-10-01 1.11 §2.6.2 VBC09324, VBC09325, VBC09326; §5.2.3.1.2 WithEvents types, §5.2.4.3 event names, §5.3.1.8 handler validity; §5.6.13.1 ByVal arguments, VBC09327; §5.4.2.20 ByRef event parameters that are not variables, ByVal in a RaiseEvent; §5.2.4.2 Implements directives and §5.3.1.9 implemented name declarations: static semantics (VBC09328–VBC09330) and dispatch through an interface-typed variable; §5.4.3.8 member and array-element assignment; §2.5.2.1.2 declared arrays (bounds, kind and element type to the host); §6.1.2.13 the hidden module: Array (keyword and library member), Input$, Width, ObjPtr

Section map (1.9)

Sections not listed keep their number. Pages that existed keep their file name.

Old RD-VBAL § New RD-VBAL §
1.1.1–1.1.6, on the 1.1 page 1.1.1–1.1.6, one page each
2.0.1, 2.0.2 (with 2.0.2.1–2.0.2.3), on the 2.0 page 2.0.1 and 2.0.2, one page each
2.2.3.2 RDCoreReference 2.2.3.2
2.2.3.2 RDCoreModule (duplicate number) 2.2.3.3
2.2.3.2.1 DocClassType Enum 2.2.3.3.1
2.2.3.3 RDCoreFile 2.2.3.4
2.3.1.2 Session Services: name resolution (ISymbolResolver, ResolveValue/ResolveType/ResolveQualifier, ScopeTreeSymbolResolver, CompositeSymbolResolver, ScopeTree, lookup order, reference priority, ModuleDirectives) 2.3.1.3 Name Resolution
2.3.1.2 Session Services: the services (IRuntimeSession, the three services, References, heaps, ISymbolProvider) 2.3.1.2
2.5.2.1.1–2.5.2.1.5, on the 2.5 page 2.5.2.1.1–2.5.2.1.5, one page each
2.6 Pipeline (unnumbered) 2.6.5 Diagnostics Pipeline
3.0.1.1 Annotation List (duplicate number) 3.0.1.1.1
3.0.1.2 Annotation 3.0.1.1.2
3.0.1.3 Annotation Arguments 3.0.1.1.3
3.1.1.2 VB_Exposed (duplicate number) 3.1.1.3
3.1.1.3 VB_GlobalNameSpace 3.1.1.4
3.1.1.4 VB_Customizable 3.1.1.5
3.1.1.5 VB_PredeclaredId 3.1.1.6
3.1.1.6 VB_Description 3.1.1.7
3.4.1–3.4.3, on the 3.4.0 page 3.4.1–3.4.3, one page each
3.5.1–3.5.5, on the 3.5.0 page 3.5.1–3.5.5, one page each
3.5.4 Execution: per-statement semantics 5.4.x.y, each statement's own page under 5.4; procedure invocation: 5.3.1.x under 5.3.1
4.1 VBIDE Synchronization, on the 4.0 page 4.1, own page
5.0.1.1 Simple Name Expressions 5.6.10
5.0.2.1 Operator Evaluation 5.6.9.2 (pipeline, effective type); arithmetic: 5.6.9.3; relational and the Variant String/Numeric exception: 5.6.9.5; logical: 5.6.9.8
5.0.2.2 Let-Coercion 5.5.1.2 (provider, strategies, frame stack); numeric: 5.5.1.2.1; banker's rounding: 5.5.1.2.1.1; Variant: 5.5.1.2.12
5.0.2.2 VarType and COM interop shape 6.1.1.16 VbVarType
5.0.2.3 Statement Evaluation 5.4
6.1 VBA Project, on the 6.0 page 6.1, own page
6.1.1 Symbol injection 6.0.1
6.1.1 The Err function shape 6.1.3.2
6.1.2 ErrObject.StackTrace 6.1.3.2.2.7 🧩
6.1.3 Information.Erl 6.1.2.7.1.14 🧩
6.1.4 Strings.Len/Strings.LenB 6.1.2.11.1.22
6.1.5 Modules: enums 6.1.1
6.1.5 Modules: procedural modules 6.1.2 and 6.1.2.1–6.1.2.13 (6.1.2.13 is not MS-VBAL's)
6.1.5 Modules: class modules 6.1.3 and 6.1.3.1–6.1.3.3
"MS-VBAL §6.2.1" VBScript RegExp 5.5 (no such MS-VBAL section) 6.2, RD-VBAL's own

⏭️ RD-VBAL §1.0 Introduction