Pure-Python static analysis for Excel VBA
Project description
pyVBAanalysis
Static analysis for Excel VBA. It reads your macros and reports likely bugs and the errors the VBA compiler would catch, without opening Excel or running any code.
Point it at a workbook or a set of exported module files, and it returns the problems it finds, each with the exact line and a plain explanation.
What it checks
It looks for more than a hundred kinds of problem, including:
- Type errors, such as assigning a string to a
Longor passing the wrong type to a procedure. - Undeclared variables and calls to procedures or members that do not exist.
- Code the VBA compiler rejects: duplicate declarations, a missing
Option Explicit, malformed statements, or aDeclarethat lacksPtrSafeon 64-bit Office. - Likely run-time failures, such as dividing by a constant zero or a type mismatch from a bad conversion.
It only reports a problem when it can prove one, and stays quiet otherwise, so the output does not bury you in false alarms.
Install
pip install pyvbaanalysis
Python 3.10 or later. Nothing else to set up.
Use it from Python
Analyze a workbook:
from pyvbaanalysis import analyze_workbook
for module, problems in analyze_workbook("Budget.xlsm").items():
for p in problems:
print(module, p.severity.value, p.code, p.message)
Analyze a single module's source:
from pyvbaanalysis import analyze_module
source = "Sub Test()\n Dim n As Long\n n = \"oops\"\nEnd Sub\n"
for p in analyze_module(source):
print(p.code, p.message)
Each result has a code, a message, a severity (error, warning, or
information), and a span giving the character offsets in the source.
Analyze several exported files together, so references between them resolve:
from pyvbaanalysis import analyze_loose_files
analyze_loose_files(["Module1.bas", "Sheet1.cls", "UserForm1.frm"])
Use it from the command line
pyvbaanalysis Budget.xlsm
pyvbaanalysis ./exported_modules --format json
pyvbaanalysis Budget.xlsm --only Sheet1
A path can be a workbook, a folder of exported .bas / .cls / .frm files, or a
single file. The command exits 1 when it finds problems and 0 when the code is
clean, so it drops into a CI check.
Scope
This analyzes Excel VBA. It does not run macros and does not need Excel installed. Word and PowerPoint are not supported.
Documentation
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyvbaanalysis-1.0.0.tar.gz.
File metadata
- Download URL: pyvbaanalysis-1.0.0.tar.gz
- Upload date:
- Size: 553.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2bff09647b735adedd15ce391680a76edf9228639d75b0e4d062c3e3686f6e6
|
|
| MD5 |
f6480adce728654a6d8672a02ceabdae
|
|
| BLAKE2b-256 |
1d7a4940473661e82e10d875c804cc4269c2e0bf3c4c1ef11e8a61bda1c181eb
|
Provenance
The following attestation bundles were made for pyvbaanalysis-1.0.0.tar.gz:
Publisher:
publish.yml on WilliamSmithEdward/pyVBAanalysis
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyvbaanalysis-1.0.0.tar.gz -
Subject digest:
b2bff09647b735adedd15ce391680a76edf9228639d75b0e4d062c3e3686f6e6 - Sigstore transparency entry: 1881126148
- Sigstore integration time:
-
Permalink:
WilliamSmithEdward/pyVBAanalysis@6c2343514fc6ff57fdd14d7aa7ea222a6686f0ed -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/WilliamSmithEdward
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6c2343514fc6ff57fdd14d7aa7ea222a6686f0ed -
Trigger Event:
release
-
Statement type:
File details
Details for the file pyvbaanalysis-1.0.0-py3-none-any.whl.
File metadata
- Download URL: pyvbaanalysis-1.0.0-py3-none-any.whl
- Upload date:
- Size: 503.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3505b65906357cd503babe501822a0938e20e3de4d334e98e55acd6d2c11c492
|
|
| MD5 |
e6014579dd79ae68c6f0dc300ee69ec6
|
|
| BLAKE2b-256 |
ead36a9d5c957f8ab876475738e0635251537e4d0b3632f330b7feb78d503ead
|
Provenance
The following attestation bundles were made for pyvbaanalysis-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on WilliamSmithEdward/pyVBAanalysis
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyvbaanalysis-1.0.0-py3-none-any.whl -
Subject digest:
3505b65906357cd503babe501822a0938e20e3de4d334e98e55acd6d2c11c492 - Sigstore transparency entry: 1881126321
- Sigstore integration time:
-
Permalink:
WilliamSmithEdward/pyVBAanalysis@6c2343514fc6ff57fdd14d7aa7ea222a6686f0ed -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/WilliamSmithEdward
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6c2343514fc6ff57fdd14d7aa7ea222a6686f0ed -
Trigger Event:
release
-
Statement type: