A professional-grade VBA automation tool for processing and analyzing data from Maintenance Management Systems (CMMS) with SCADA integration. Automate data downloads, filter maintenance orders, assign tasks to teams, and correlate SCADA alarmsβall from Excel.
This tool automates your daily CMMS workflow:
- Downloads data from your CMMS automatically using Chrome browser automation
- Processes and filters maintenance orders, issues, and SCADA alarm data in Excel
- Assigns tasks to team members using customizable algorithms
- Creates planning reports by correlating maintenance needs with SCADA alarm history
- Saves you hours of manual copying, filtering, and report generation
- π Automated Data Downloads: Uses Selenium to log in and download data from your CMMS
- π Secure Credentials: PowerShell secure promptsβno passwords stored in code
- π Advanced Excel Processing: Powerful filtering, sorting, and team assignment algorithms
- π₯ Team Management: Automatically distribute tasks based on equipment areas and workload
- β‘ SCADA Integration: Correlate CMMS issues with SCADA alarm history for planning
- π¨ User-Friendly Forms: Excel dialogs guide you through filtering and task selection
- π Comprehensive Logging: All operations logged to
%LOCALAPPDATA%\CMMSLogs\ - βοΈ Fully Configurable: One configuration file controls all system-specific settings
CMMS-SCADA-Excel-DataProcessor/
βββ .github/ # GitHub community health files
β βββ CODEOWNERS # Code ownership and PR review assignments
β βββ CONTRIBUTING.md # Contribution guidelines
β βββ ISSUE_TEMPLATE/ # Issue & bug report templates
β βββ bug_report.yml # Bug report form
β βββ config.yml # Issue template configuration
β βββ feature_request.yml # Feature request form
β βββ general_issue.yml # General questions/issues form
βββ .vscode/
β βββ extensions.json # Recommended VS Code extensions
βββ src/
β βββ modules/ # Core VBA modules (7 files)
β β βββ MaintenanceManager.bas # Main orchestration & task workflows
β β βββ WebAutomation.bas # Selenium browser automation
β β βββ ExcelUtilities.bas # Excel data processing & formatting
β β βββ DataFilters.bas # Filtering & team assignment algorithms
β β βββ ConfigManager.bas # Configuration loader & validator
β β βββ AppServices.bas # Authentication & credential management
β β βββ Logger.bas # Error logging & debugging
β βββ config/
β βββ Config.bas # β οΈ YOUR PRIVATE CONFIG (create from template)
βββ Forms/ # VBA UserForms (14 .frm + .frx files)
β βββ formTasks.frm # Main task selection dialog
β βββ formMOs.frm # Maintenance Orders filtering
β βββ formIssues.frm # Issues/tickets filtering
β βββ formPlanning.frm # Planning mode selection
β βββ ... # Additional specialized forms
βββ templates/
β βββ Config_Template.bas # π CONFIGURATION TEMPLATE (start here!)
βββ tools/ # Setup & maintenance utilities
β βββ LaunchCMMS-Silent.vbs # π Desktop launcher (shortcut points here)
β βββ LaunchCMMS.vbs # Main launcher logic
β βββ Create-DesktopShortcut.ps1 # Creates desktop shortcut
β βββ setup-checker.ps1 # Verify Selenium installation
β βββ config-validator.vbs # Validate your Config.bas
β βββ Update-ChromeDriver.ps1 # Auto-update ChromeDriver
βββ .gitignore # Protects Config.bas from commits
βββ LICENSE # MIT License
βββ README.md # This file
βββ TODO.md # Development roadmap
Before you begin, install these required components:
- Required: Excel 2016 or later (32-bit or 64-bit)
- Check your version: Open Excel β File β Account β About Excel
- Download from: https://www.google.com/chrome/
- Note: The tool uses Chrome for web automation
- Download: Selenium Basic Releases
- Install: Run the installer (accepts all defaults)
- Default location:
C:\Users\[YourUser]\AppData\Local\SeleniumBasic\ - Important: After installation, verify the
Selenium Type Libraryappears in Excel VBA References
- Good news: The tool includes
Update-ChromeDriver.ps1which automatically downloads the correct version - Manual option: Download from Chrome for Testing
- Must match: ChromeDriver version must match your Chrome browser version
- Location: Place in
C:\Users\[YourUser]\AppData\Local\SeleniumBasic\
Choose one option:
Option A: Clone with Git (recommended)
git clone https://github.com/KirilMT/CMMS-SCADA-Excel-DataProcessor.git
cd CMMS-SCADA-Excel-DataProcessorOption B: Download ZIP
- Click the green "Code" button on GitHub
- Select "Download ZIP"
- Extract to a folder (e.g.,
C:\Projects\CMMS-Automation\)
This is the most important stepβcustomize the tool for your specific CMMS.
- Navigate to the
templates/folder - Copy
Config_Template.bas - Paste into
src/config/folder - Rename to
Config.bas
# PowerShell commands (or do manually):
Copy-Item templates\Config_Template.bas src\config\Config.basOpen src\config\Config.bas in a text editor (Notepad++, VS Code, or even Notepad).
Required Changes (minimum to get started):
' 1. SYSTEM IDENTITY
Public Function GetSystemName() As String
GetSystemName = "Your Company CMMS" ' Change this
End Function
Public Function GetBaseUrl() As String
GetBaseUrl = "https://cmms.yourcompany.com" ' Your CMMS URL
End Function
' 2. AUTHENTICATION
Public Function GetUsername() As String
GetUsername = "your.email@yourcompany.com" ' Your login username
End Function
Public Function GetUsernameForFiltering() As String
GetUsernameForFiltering = "yourname" ' Just your name (for Excel filters)
End Function
' 3. FILE LOCATIONS
Public Function GetDownloadDirectory() As String
GetDownloadDirectory = "C:\Users\YourUser\Downloads" ' Your downloads folder
End Function
' 4. ASSET PREFIX (for SCADA integration)
Public Function GetAssetPrefix() As String
GetAssetPrefix = "FACILITY_LINE1" ' Your facility/line code
End FunctionAdvanced Configuration (optional, can configure later):
- XPath Selectors: Web element locators for your specific CMMS interface
- Team Members: Define your maintenance team and equipment areas
- Filter Criteria: Customize filtering rules for your workflow
π‘ Tip: The template file has detailed comments for each function. Read them carefully!
- Open Microsoft Excel
- Create a new Excel Macro-Enabled Workbook (.xlsm)
- Save it with a descriptive name (e.g.,
CMMS_Automation.xlsm) - Recommended location: Same folder as the project
- Press
Alt + F11(or Tools β Macro β Visual Basic Editor)
- In VBA Editor, go to Tools β References
- Scroll down and check β Selenium Type Library
- Click OK
Troubleshooting: If you don't see "Selenium Type Library":
- Selenium Basic may not be installed correctly
- Run
tools\setup-checker.ps1to diagnose the issue
Import the 7 core modules:
- In VBA Editor: File β Import File (or drag & drop)
- Navigate to
src\modules\ - Select ALL 7 .bas files:
MaintenanceManager.basWebAutomation.basExcelUtilities.basDataFilters.basConfigManager.basAppServices.basLogger.bas
- Click Open
Import your configuration:
- File β Import File
- Navigate to
src\config\ - Select
Config.bas(the one you customized) - Click Open
Import the user forms:
- File β Import File
- Navigate to
Forms\ - Select ALL .frm files (14 filesβeach has a matching .frx file that imports automatically):
formTasks.frmformMOs.frmformMOsCompleted.frmformIssues.frmformIssuesTeam.frmformIssuesTeam2.frmformIssuesTeamTask.frmformPlanning.frm
- Click Open
Verify the import:
In the VBA Project Explorer (left panel), you should see:
- Modules folder with 8 modules (7 core + Config)
- Forms folder with 8 forms
Before using the tool, verify everything is installed correctly:
Windows PowerShell:
cd tools
.\setup-checker.ps1Command Prompt:
cd tools
setup-checker.batThis will check:
- β Selenium Basic installation
- β ChromeDriver presence and version
- β Chrome browser installation
- β Network connectivity
Run the configuration validator to check for errors:
cd tools
cscript config-validator.vbsThis verifies:
- β All required functions exist
- β URLs are properly formatted
- β Team member configuration is valid
- β XPath selectors are defined
- In VBA Editor, double-click MaintenanceManager module
- Press
F5or click Run β Run Sub/UserForm - Select RunMaintenanceTasks from the list
- Click Run
- Chrome opens automatically and navigates to your CMMS
- Credential prompt appears (PowerShell secure window)
- Username is pre-filled from Config.bas
- Enter your password
- β Credentials are cached for multi-download tasks
- Task selection dialog appears (formTasks)
- Choose your task:
- MOs = Download Maintenance Orders
- Issues = Download Issues/Tickets
- Planning = Multi-download planning mode
- Data is downloaded and opened in Excel
- Filtering forms appear based on your selection
| Issue | Solution |
|---|---|
| "ChromeDriver version mismatch" | Run tools\Update-ChromeDriver.ps1 |
| "Selenium Type Library missing" | Re-install Selenium Basic, restart Excel |
| "Element not found" timeout | XPath selectors in Config.bas don't match your CMMSβneeds customization |
| Password prompt doesn't appear | Check PowerShell execution policy: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned |
| Chrome doesn't open | Verify Selenium Basic installation with tools\setup-checker.ps1 |
The easiest way to launch the tool is via a desktop shortcut:
- Open PowerShell in the project directory
- Run the shortcut creator:
.\tools\Create-DesktopShortcut.ps1 - A shortcut named "CMMS Tool" appears on your Desktop
- Double-click to launch!
What happens:
- β Excel opens invisibly (no window clutter)
- β Only your task selection form appears
- β No console windows
- β Professional, clean experience
If you prefer manual control:
- Right-click
tools\LaunchCMMS-Silent.vbs - Select "Send to" β "Desktop (create shortcut)"
- Rename to "CMMS Tool"
- Right-click shortcut β Properties β Change Icon (optional)
If you prefer launching from within Excel:
- Open Excel β Developer tab
- Click Macros β Select
RunMaintenanceTasks - Click Options β Assign shortcut (e.g.,
Ctrl+Shift+M)
If web elements are not found, you need to update XPath selectors in Config.bas:
- Open your CMMS in Chrome
- Right-click an element β Inspect
- In DevTools, right-click the HTML element β Copy β Copy XPath
- Paste into the appropriate function in
Config.basβGetXpaths()array
Example:
Public Function GetXpaths() As Variant
Dim xpaths(51) As String
' Login elements
xpaths(1) = "//*[@id='username']" ' Update with your XPath
xpaths(2) = "//*[@id='password']" ' Update with your XPath
' ... etcEdit the GetTeam() function in Config.bas to define your team:
Public Function GetTeam() As Variant
' Columns: Name, AssetInclude, AssetExclude, SubgroupInclude, SubgroupExclude, Alarms Include, Exclude
Dim team(1 To 5, 1 To 10) As Variant
team(1, 1) = "John Doe"
team(1, 2) = Array("LINE1_ST01", "LINE1_ST02") ' Responsible areas
' ... configure for each team member
GetTeam = team
End FunctionYour CMMS automation tool is now installed and configured!
To launch:
- π±οΈ Desktop shortcut (recommended): Double-click "CMMS Tool" icon
- β¨οΈ Excel macro (advanced): Press
Ctrl+Shift+Mor runRunMaintenanceTasks
What it does:
- Download and filter maintenance orders
- Assign issues to team members
- Create planning reports with SCADA data
- Process historical data for analysis
- Launch the tool: Double-click desktop shortcut (or press macro shortcut)
- Select task type: Choose from the main dialog
- Filter your data: Use the filtering forms to refine results
- Process in Excel: Data appears in a formatted, filterable worksheet
Downloads and filters maintenance work orders from your CMMS.
Available Filters:
- All - No filtering, shows everything
- ToDo MOs - New/Ready to Assign corrective/reactive work
- My MOs - Work orders assigned to you
- Completed MOs - Recently completed work (by shift or team)
- Weekend MOs - High priority work for weekend planning
- PM MOs - Preventive maintenance due soon
- RCA MOs - Root cause analysis tracking
Example Use Case:
Every morning, run "ToDo MOs" to see what new work needs to be assigned to your team.
Downloads and filters issues/tickets from your CMMS.
Available Filters:
- All - No filtering
- ToDo Issues - New/Pending high-priority issues
- My Issues - Issues assigned to you
- History Issues - Recently completed/closed issues
- Team Issues - Assign issues to team members automatically
- Correct New - New corrective issues for review
Example Use Case:
Run "Team Issues β All Members" to automatically distribute open issues across your team based on equipment areas and current workload.
Multi-download mode that combines three data sources:
- Maintenance Orders - Open work orders
- Issues - Open issues/tickets
- SCADA Alarm History - Equipment faults and downtime
The tool correlates this data to help you:
- Identify equipment with recurring alarms
- Match alarms to existing work orders or issues
- Plan maintenance activities for upcoming shutdowns
Example Use Case:
Before a weekend shutdown, run Planning mode to see all high-alarm equipment, check if issues exist, and create work orders as needed.
When using "Team Issues β All Members":
- Tool filters issues by each team member's assigned equipment areas
- Distributes work evenly based on current workload
- Creates a summary sheet with all assignments
- Sorts team members by total issue count (least busy first)
In Planning mode, the tool automatically generates asset codes from SCADA alarm data:
- Extracts line, station, equipment, and device information
- Applies facility-specific naming conventions (configured in Config.bas)
- Creates standardized asset codes like:
FACILITY_LINE1_ST001_CONV001_WC01
For Planning mode (3 downloads):
- Enter credentials once
- Cached in memory for session
- Automatically cleared when task completes
For single downloads:
- Credentials prompted and cleared immediately after
Config.bas is your private configuration file that tells the tool:
- Where your CMMS is located (URLs)
- How to log in (username, credential prompts)
- Where to find web elements (XPath selectors)
- Who your team members are
- What equipment areas they manage
- Where to save downloads
- This file contains company-specific information
- It is automatically ignored by Git (listed in
.gitignore) - Never commit this file to a public repository
- Always start from
Config_Template.bas
' Your CMMS system name (appears in dialogs)
Public Function GetSystemName() As String
GetSystemName = "Your Company CMMS"
End Function
' Base URL of your CMMS
Public Function GetBaseUrl() As String
GetBaseUrl = "https://cmms.yourcompany.com"
End Function
' Specific page URLs (usually base + path)
Public Function GetMaintenanceOrdersUrl() As String
GetMaintenanceOrdersUrl = GetBaseUrl() & "/app/maintenance/orders"
End Function' Your login username
Public Function GetUsername() As String
GetUsername = "your.email@company.com"
End Function
' Username for Excel filtering (just first/last name)
Public Function GetUsernameForFiltering() As String
GetUsernameForFiltering = "yourname"
End Function
' Optional: Environment variable for password
Public Function GetPasswordEnvironmentVariable() As String
GetPasswordEnvironmentVariable = "CMMS_PASSWORD"
End FunctionPassword is never stored in code. It's prompted via PowerShell secure dialog.
' Where Chrome downloads files
Public Function GetDownloadDirectory() As String
GetDownloadDirectory = "C:\Users\YourName\Downloads"
End FunctionXPath selectors tell Selenium where to find elements on your CMMS web pages.
Public Function GetXpaths() As Variant
Dim xpaths(51) As String
' Login page elements
xpaths(1) = "//*[@id='username']" ' Username field
xpaths(2) = "//*[@id='password']" ' Password field
xpaths(3) = "//button[@type='submit']" ' Login button
' Maintenance Orders page
xpaths(10) = "//div[@class='first-mo']" ' First MO (page loaded indicator)
xpaths(15) = "//button[@title='Export']" ' Export button
' ... 52 total XPath selectors
GetXpaths = xpaths
End FunctionHow to find XPaths:
- Open your CMMS in Chrome
- Press
F12to open DevTools - Click the "Select Element" tool (top-left corner)
- Click the element you want
- In DevTools, right-click the highlighted HTML β Copy β Copy XPath
- Paste into Config.bas
Define your maintenance team and their equipment responsibilities:
Public Function GetTeam() As Variant
' 10 columns: Name, AssetInclude, AssetExclude, SubgroupInclude, SubgroupExclude,
' AlarmInclude, AlarmExclude, IssuesCount, Tasks, NotOnsite
Dim team(1 To 5, 1 To 10) As Variant
' Example: John manages Stations 1-3 on Line 1
team(1, 1) = "John Doe"
team(1, 2) = Array("LINE1_ST001", "LINE1_ST002", "LINE1_ST003")
team(1, 3) = Array("") ' No exclusions
team(1, 4) = Array("Conveyors", "Robots") ' Equipment types
' Example: Jane manages Stations 4-6
team(2, 1) = "Jane Smith"
team(2, 2) = Array("LINE1_ST004", "LINE1_ST005", "LINE1_ST006")
' ... etc
GetTeam = team
End FunctionCustomize filtering rules:
' Which production lines to include in "ToDo" filter
Public Function GetToDoLineFilterInclude() As Variant
GetToDoLineFilterInclude = Array("LINE1", "LINE2", "LINE3")
End Function
' Which areas to exclude
Public Function GetToDoLineFilterExclude() As Variant
GetToDoLineFilterExclude = Array("Workshop", "Warehouse")
End FunctionAs your CMMS interface changes or your team structure evolves:
- Open
src\config\Config.basin a text editor - Update the relevant function
- Save the file
- No need to re-import into Excel (changes take effect immediately)
- Username: Stored in Config.bas (company email, not sensitive)
- Password:
- Never stored in any file
- Prompted via PowerShell secure dialog (bullets, not visible)
- Cached in memory only during multi-download sessions
- Automatically cleared when task completes
Single Download (MOs or Issues):
1. Prompt for password β 2. Download data β 3. Clear from memory immediately
Planning Mode (3 downloads):
1. Prompt for password β 2. Cache in memory β 3. Download MOs β
4. Reuse cached password β 5. Download Issues β 6. Reuse cached password β
7. Download SCADA β 8. Clear from memory
For advanced users, you can set an environment variable to avoid password prompts:
PowerShell (persistent):
[System.Environment]::SetEnvironmentVariable('CMMS_PASSWORD', 'YourPassword', 'User')Not recommended for shared computers!
The .gitignore file automatically prevents committing:
- β
Config.bas(your private configuration) - β
*.logfiles (may contain usernames) - β Downloaded data files
- β Backup files
Before your first commit, verify:
git check-ignore src/config/Config.bas
# Should output: src/config/Config.basAll operations are logged to:
%LOCALAPPDATA%\CMMSLogs\YYYY-MM-DD_CMMS_automation.log
Example: C:\Users\YourName\AppData\Local\CMMSLogs\2025-10-08_CMMS_automation.log
- INFO: Normal operations (task started, file downloaded)
- WARNING: Non-critical issues (element not found but continuing)
- ERROR: Critical failures (login failed, file not found)
- DEBUG: Detailed technical information (XPath used, timing)
PowerShell:
# View today's log
Get-Content $env:LOCALAPPDATA\CMMSLogs\*$(Get-Date -Format 'yyyy-MM-dd')*.log
# View last 50 lines
Get-Content $env:LOCALAPPDATA\CMMSLogs\*$(Get-Date -Format 'yyyy-MM-dd')*.log -Tail 50
# Watch in real-time
Get-Content $env:LOCALAPPDATA\CMMSLogs\*$(Get-Date -Format 'yyyy-MM-dd')*.log -Wait| Error | Meaning | Solution |
|---|---|---|
| "Element not found: Username Input Field" | XPath selector doesn't match your CMMS | Update XPath in Config.bas |
| "ChromeDriver version mismatch" | ChromeDriver doesn't match Chrome browser | Run Update-ChromeDriver.ps1 |
| "Timeout: Login failed" | Wrong credentials or MFA required | Check username/password, handle MFA manually |
| "File doesn't exist" | Download didn't complete | Check Chrome downloads, verify export worked |
The tools/ directory contains maintenance and validation scripts.
Purpose: Verify all prerequisites are installed correctly
Run before first use:
cd tools
.\setup-checker.ps1Checks:
- β Selenium Basic installation and registration
- β ChromeDriver presence and version compatibility
- β Chrome browser installation
- β Network connectivity to common sites
- β PowerShell execution policy
- β File system permissions
Output Example:
β
Selenium Basic: Installed (v2.0.9.0)
β
ChromeDriver: Found (v120.0.6099.109)
β
Chrome Browser: Installed (v120.0.6099.109)
β
Versions Match: Compatible
β
Network: Connected
Purpose: Validate your Config.bas before running
Usage:
cd tools
cscript config-validator.vbsValidates:
- β All required functions exist
- β URLs are properly formatted (http/https)
- β Download directory exists
- β Team members are configured
- β XPath selectors are defined (not empty)
- β No placeholder values remain
Output Example:
Validating: src\config\Config.bas
β
GetSystemName: OK
β
GetBaseUrl: OK (https://cmms.company.com)
β
GetUsername: OK
β οΈ Warning: GetDownloadDirectory path does not exist
β
GetTeam: OK (5 members configured)
Result: Configuration Valid (1 warning)
Purpose: Automatically update ChromeDriver to match your Chrome version
Usage:
cd tools
.\Update-ChromeDriver.ps1What it does:
- Detects your installed Chrome browser version
- Downloads matching ChromeDriver from official Google repository
- Extracts to Selenium Basic directory
- Backs up old driver (just in case)
- Verifies new driver works
Run this when:
- Chrome updates automatically
- You see "ChromeDriver version mismatch" errors
- After installing Chrome for the first time
Location: templates/Config_Template.bas
Purpose: Starting point for your private configuration
Contains:
- All required function definitions (30+ functions)
- Detailed inline comments explaining each setting
- Example values for every configuration option
- XPath selector placeholders with descriptions
- Sample team configuration structure
How to use:
- Copy to
src/config/Config.bas - Replace example values with your actual data
- Save and import into Excel VBA
Never commit your customized Config.bas! It's in .gitignore for security.
Cause: Selenium Basic not installed or not registered
Solution:
- Download Selenium Basic (latest version)
- Run installer as Administrator
- Restart Excel completely
- Try enabling the reference again
- If still failing, run:
regsvr32 "C:\Program Files\SeleniumBasic\Selenium.dll"
Cause: ChromeDriver and Chrome browser versions don't match
Solution:
cd tools
.\Update-ChromeDriver.ps1Or manually download matching version from Chrome for Testing.
Cause: Trying to import .frx files (these import automatically with .frm files)
Solution: Only import .frm files. The matching .frx files load automatically.
Cause: XPath selector doesn't match your CMMS interface
Solution:
- Open your CMMS in Chrome
- Press F12 (DevTools)
- Click element selector tool (top-left)
- Click the element causing timeout
- In DevTools: Right-click HTML element β Copy β Copy XPath
- Update the corresponding XPath in
Config.basβGetXpaths()function - Save Config.bas (no need to re-import)
Cause: PowerShell execution policy prevents running scripts
Solution:
# Check current policy
Get-ExecutionPolicy
# Set to allow scripts (run as Administrator)
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
# Or bypass for this session only
powershell -ExecutionPolicy BypassCause: Base URL in Config.bas is incorrect
Solution:
- Open
src\config\Config.bas - Verify
GetBaseUrl()returns correct CMMS URL - Test by pasting URL in Chrome manually
Cause: Download location mismatch or download didn't complete
Solution:
- Check
GetDownloadDirectory()in Config.bas matches your actual Chrome downloads - Open Chrome β Settings β Downloads β Check location
- Update Config.bas if different
- Verify CMMS export actually generates a file
Cause: Previous run didn't close, or multiple Excel files match the pattern
Solution:
- Close all Excel workbooks except your automation workbook
- Delete any temporary downloaded files
- Run the tool again
Possible causes & solutions:
- Large datasets: Reduce date range in filters, or process in chunks
- Screen updating: Already optimized with
Application.Wait - Calculation mode: Consider disabling automatic calculations for very large datasets
- Network speed: CMMS downloads depend on your connection speed
Solution:
- Don't interact with Excel while tool is running
- For large datasets (>10,000 rows), consider filtering at CMMS level first
- Close other applications to free memory
Cause: Team member configuration is incorrect
Solution:
- Open Config.bas β
GetTeam()function - Verify asset codes match your CMMS data exactly
- Test with one team member first
- Check logs in
%LOCALAPPDATA%\CMMSLogs\for filter details
Cause: Asset code generation logic doesn't match your facility naming
Solution:
- Review
SCADASheetFormatting()in MaintenanceManager.bas - This function applies facility-specific patterns
- May need customization for your naming conventions
- Check generated codes against expected format
- Morning routine: Run "ToDo MOs" to see new work
- Team standup: Run "Team Issues β All Members" for distribution
- Pre-shutdown: Run "Planning" mode to prepare weekend work
- End of day: Run "Completed MOs β Shift" for reporting
- Start simple: Configure basic URLs and auth first, test, then add advanced features
- XPath fragility: Web interfaces changeβreview XPaths monthly
- Team configuration: Start with 2-3 team members, expand once it works
- Backup Config.bas: Keep a copy outside the project folder
- Filter at source: Use CMMS filters before download when possible
- Date ranges: Don't download more than 30 days of data unless needed
- Planning mode: Use sparingly (downloads 3 datasets)
- Close other workbooks: Excel performs better with fewer files open
- Never commit Config.bas: Always double-check before
git push - Use environment variable: For automation/CI, not shared computers
- Rotate passwords: Change CMMS password regularly
- Review logs: Check logs for unusual activity
Contributions are welcome! We'd love your help to make this project even better.
Please read our Contributing Guide for:
- π How to report bugs
- π‘ How to suggest features
- π§ How to submit code contributions
- π Code standards and conventions
- π§ͺ Testing guidelines
Quick links:
This project is licensed under the MIT License. See the LICENSE file for details.
You are free to:
- β Use commercially
- β Modify for your needs
- β Distribute
- β Use privately
Under the condition that:
β οΈ You include the original copyright noticeβ οΈ The software is provided "as-is" without warranty
- Selenium Basic by Florent Breheret - VBA COM wrapper for Selenium WebDriver
- Chrome for Testing by Google - Stable ChromeDriver builds
- VBA Community - For patterns and best practices
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: This README and inline code comments
Version: 1.0.0
Last Updated: October 8, 2025
Status: Production-Ready β
Tested With: Excel 2016-365, Chrome 120+, Selenium Basic 2.0.9.0