Capabilities
Model and Field System
Define models using typed fields (TextField, DateField, PositiveIntegerField, etc.) through a built-in user form interface.
The Addin generates required class modules, constructors, and Getter/Setter properties automatically, allowing you to work with records as real objects instead of raw worksheet rows.
The Addin generates required class modules, constructors, and Getter/Setter properties automatically, allowing you to work with records as real objects instead of raw worksheet rows.
Multiprocessing
Long-running Excel work runs in a background Excel worker while you keep working in your own workbook.
Database Records
Once a model exists (e.g. ApartmentUnit with number_beds, square_feet, rent_asking), records can be created immediately.
All Getter/Setter procedures are fully wired by default, allowing instances to be created, read, and updated without manual VBA plumbing.
All Getter/Setter procedures are fully wired by default, allowing instances to be created, read, and updated without manual VBA plumbing.
Database Record Sorting
Records can be sorted by one or more fields, including relational fields (ForeignKey), even when the sort column lives on a different worksheet.
This allows expressive, database-style ordering while remaining entirely Excel-native.
This allows expressive, database-style ordering while remaining entirely Excel-native.
Basic Fields
Basic field types enforce value correctness at the object level, reducing the need for repeated defensive checks throughout your code.
Available field types are listed here.
Available field types are listed here.
Relational Fields
ForeignKey and ManyToMany field types are supported, enabling expressive access patterns such as property.amenities.all().
Relational fields allow models to reference one another without duplicating data, bringing database-style relationships into worksheets.
Relational fields allow models to reference one another without duplicating data, bringing database-style relationships into worksheets.
Setting Registry
Some values do not belong to any specific model but still need persistence. The Setting Registry stores these values on a hidden worksheet with zero VBA edits.
Settings persist with the workbook itself, unlike Windows Registry storage, which is machine-specific and not portable.
Settings persist with the workbook itself, unlike Windows Registry storage, which is machine-specific and not portable.
Built-In Procedure Runners
The Addin ships with several built-in procedure runners that manage execution, error capture, and reporting consistently.
In essence, write a test function, and the Addin will discover and execute it whenever the "Test Workbook" Ribbon button is clicked. The benefit is you don't have to wire anything. You only write the test, validation, or reset function.
In essence, write a test function, and the Addin will discover and execute it whenever the "Test Workbook" Ribbon button is clicked. The benefit is you don't have to wire anything. You only write the test, validation, or reset function.
ErrorBank and Assertions
ErrorBank is the foundation for testing and validation. It provides expressive assertions such as AssertGreaterThan and rich failure messages that include context and values.
Multiple ErrorBanks can be merged together, which is how runners aggregate results across procedures.
Multiple ErrorBanks can be merged together, which is how runners aggregate results across procedures.
Generic Form Views
The Addin provides generic ListView, EditView, and CreateView forms for interacting with records.
Given a model and list of fields, the Addin renders compatible input controls, validates submitted values, and highlights violations directly in the form.
These forms are particularly useful for relational fields, where users must select from related records.
They are intended as a starting point rather than an end state.
Given a model and list of fields, the Addin renders compatible input controls, validates submitted values, and highlights violations directly in the form.
These forms are particularly useful for relational fields, where users must select from related records.
They are intended as a starting point rather than an end state.
Custom Forms
When building custom forms, submitted values are available immediately and can be assigned directly to model properties.
Invalid assignments (e.g. assigning text to an IntegerField) fail loudly, while bulk pre-validation can be requested before saving any values.
Type enforcement, validation, and persistence are handled centrally, eliminating large classes of repetitive worksheet code.
Invalid assignments (e.g. assigning text to an IntegerField) fail loudly, while bulk pre-validation can be requested before saving any values.
Type enforcement, validation, and persistence are handled centrally, eliminating large classes of repetitive worksheet code.
FormBuilder Class
Generic forms are built on top of FormBuilder. FormBuilder is also exposed directly for advanced use cases.
Unlike generic forms, FormBuilder allows inputs to save into multiple models at once, making more sophisticated workflows practical.
Unlike generic forms, FormBuilder allows inputs to save into multiple models at once, making more sophisticated workflows practical.
WhoaRefactoring Tool
The refactoring tool performs coordinated renaming across VBA code, modules, range names, and worksheet cells. For example, renaming a range will not only rename the range itself, but also any formula references.
Think of it as a workbook-aware Find and Replace with context.
Think of it as a workbook-aware Find and Replace with context.
Fixture Registry
The Fixture Registry saves named text blobs using Base64 compression on hidden worksheets. Text is decompressed transparently when retrieved.
Fixtures help keep workbook size manageable and enable the programmatic test runner to execute, even when your VBA project is locked.
Fixtures help keep workbook size manageable and enable the programmatic test runner to execute, even when your VBA project is locked.
Programmatic Row and Column Hide
Row and column visibility can be controlled programmatically as part of larger procedures or runners.
Direct AI Calls
Store an API key in the workbook and call OpenAI, Anthropic or Gemini directly from VBA. Each call returns a typed result: the response text, tokens used and estimated cost.
That lets you build repeatable AI steps into a workbook, with no chat window involved.
That lets you build repeatable AI steps into a workbook, with no chat window involved.
Prompt Interceptor
Test a prompt before you wire it into your workbook. Prompt Interceptor shows the prompt your code built and the model's response side by side, then runs your callback on that response with one click.
Progress Bar Utility
Displays progress feedback during execution. Adds runtime overhead but improves perceived responsiveness.
High-Resolution Timer
Provides fine-grained timing beyond VBA's built-in timers, allowing side-by-side performance comparisons.
Spell Currency
Converts numeric currency values into written English. Useful in valuation and reporting contexts.
ATTRIBUTION: this was obtained (and minimally adapted) from: www.ExcelDataPro.com
ATTRIBUTION: this was obtained (and minimally adapted) from: www.ExcelDataPro.com
GIS Feature Overview
Some GIS features use Google API keys, which are free under generous limits. All GIS capabilities are usable without paid services.
Geocoding Street Addresses
Geocoding transforms a street address into latitude and longitude coordinates, which serve as the basis for other GIS operations.
Requires a Google API key.
Requires a Google API key.
Distance Calculation (As the Crow Flies)
Given two coordinate pairs, distance is calculated mathematically using the Haversine formula.
This avoids API calls but loses precision over longer distances.
This avoids API calls but loses precision over longer distances.
Export Map Points to Google Earth
Converts coordinate lists into KML map files for Google Earth. Pins can be styled with colors, labels, and descriptive hover text.
Parse KML Polygons to Coordinates
Extracts coordinate data from polygons defined in Google Earth.
Primarily used with point-in-polygon operations.
Primarily used with point-in-polygon operations.
Point Within Polygon Boundary
Determines whether coordinates fall within a defined polygon. Useful for zoning, environmental studies, and property analysis.