VBA Internals: Decimal Variables and Pointers In Depth

July 17, 2013 in VBA

Decimal Variants The Decimal type is special. It’s a structure that takes 14 bytes. Essentially it’s a 96-bit (12-byte) signed integer, plus a 1-byte scaling factor and a 1-byte sign. The scaling works just like the Scale attribute of a SQL Decimal, indicating the number of significant base-10 digits that appear after the decimal. Although the scale is a whole byte, valid values are only 0 to 28. Likewise the only valid values for the sign byte are 0 (positive) or 1 (negative). Note that all other non-Variant built-in types in VBA take 8 or fewer bytes; they all fit
…read more

VBA Internals: Variant Variables and Pointers in Depth

July 5, 2013 in VBA

Pointers and memory for Variant variables In the Component Object Model (COM) Automation framework, the VARIANT structure provides a wrapper for passing around any type of data, and a suite of manipulation functions facilitate using the VARIANT as a platform-level dynamically-typed variable. I say platform-level because the structures, enumerations, and functions that implement VARIANTs exist at the Windows API level. Any language — including those that are not dynamically typed — can use the API to accomplish something like dynamic types. VBA does provide dynamically typed variables, and calls them Variants, just like the supporting structures in the COM API.
…read more

VBA Internals: What’s in a variable

May 6, 2013 in VBA

Language designers and runtime authors are always telling us to ignore implementation details. For the most part, including for VBA, that’s good advice. But sometimes you need or want know how things really work under the covers. In VBA this often arises when importing windows API functions which require pointers. To really understand pointers in VBA you first have to understand variables in VBA. In this article I’ll delve into the gritty implementation details of variables in VBA. VBA background Language vs runtime: An aside on terminology The VBA language and the VB runtime are not technically the same thing.
…read more