Skip to main content

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 Long or 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 a Declare that lacks PtrSafe on 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyvbaanalysis-1.1.0.tar.gz (560.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyvbaanalysis-1.1.0-py3-none-any.whl (508.0 kB view details)

Uploaded Python 3

File details

Details for the file pyvbaanalysis-1.1.0.tar.gz.

File metadata

  • Download URL: pyvbaanalysis-1.1.0.tar.gz
  • Upload date:
  • Size: 560.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyvbaanalysis-1.1.0.tar.gz
Algorithm Hash digest
SHA256 12fca013f764a9cbc6e7e8e5ef0f299e3168af8b555cf07f8736c7b32572480a
MD5 5bf82e89b97a42c0d29483d6f5f4b3b3
BLAKE2b-256 2176ffba18a914968ee7aabbe43ff250ece20f8f10adc44a4e0bac0f7d3560e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvbaanalysis-1.1.0.tar.gz:

Publisher: publish.yml on WilliamSmithEdward/pyVBAanalysis

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvbaanalysis-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyvbaanalysis-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 508.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyvbaanalysis-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 67a38c098775b1a350b39afff3b60a1d36e979b17e4f0c55c95c545fbcfaab6f
MD5 bd786b2dc0c333ea4d48bcb3d954061c
BLAKE2b-256 95a4b92f49cc9e0e037d33adc9c3ef168ad35c8b96bf8c4a16b8d185cbd36772

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvbaanalysis-1.1.0-py3-none-any.whl:

Publisher: publish.yml on WilliamSmithEdward/pyVBAanalysis

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page