Skip to content

REMS VBA Module Documentation

Raizcorp Entrepreneurial Management System


1. Module Overview

Module Size Purpose
Global.bas ~4 KB Core database utilities
Mod Utilities.bas ~11 KB General utility functions
Mod Populate Temp Table.bas ~13 KB Report data preparation
Mod Export Excel.bas 307 KB Excel report generation
basRelink.bas ~24 KB ODBC connection management
ExportModule.bas ~13 KB Database export utility
Module1.bas <1 KB Empty/placeholder

2. Global.bas

Core database utility functions.

2.1 DigiReport()

Function DigiReport(Optional DteFrm As Date, Optional DteTo As Date)

Purpose: Generates digital selection report data

Parameters: - DteFrm (Optional): Start date for report period - DteTo (Optional): End date (defaults to current date)

Behavior: 1. Cleans TempLeadsReport table 2. Calculates default date range if not provided (2 months back) 3. Inserts entrepreneur data from main tables into temp table 4. Includes: Record dates, termination reasons, assessment scores, status info

SQL Operations: - INSERT INTO TempLeadsReport from Entrepreneurs with LEFT JOINs to TerminationReason and ProcessStatus


2.2 SQLRun()

Function SQLRun(SQLString As String, Optional IgnoreError As Boolean = False,
                Optional IsQuery As Boolean = False) As Boolean

Purpose: Safe SQL execution wrapper

Parameters: - SQLString: SQL statement or query name to execute - IgnoreError: Suppress error messages (default: False) - IsQuery: True to open saved query, False to run raw SQL

Returns: Boolean - True if successful

Behavior: - Suppresses Access warnings during execution - Handles errors gracefully - Restores warning state after execution


2.3 CleanTbl()

Function CleanTbl(sTblNme As String, Optional sWhere As String = "") As Boolean

Purpose: Deletes records from a table

Parameters: - sTblNme: Table name to clean - sWhere: Optional WHERE clause filter

Behavior: - Validates table exists - Executes DELETE * with optional WHERE clause - Suppresses confirmation prompts


2.4 IsTable()

Function IsTable(sTablenme As String) As Boolean

Purpose: Checks if a table exists in the database

Parameters: - sTablenme: Table name to check (handles brackets)

Returns: Boolean - True if table exists


3. Mod Utilities.bas

General-purpose utility functions.

3.1 Public Variables

Public ReportName As String      ' Current report name for dialogs
Public ListReportName As String  ' Dashboard report name

3.2 DeleteEntrepreneur()

Sub DeleteEntrepreneur(EPID As Long)

Purpose: Cascading delete of entrepreneur and all related records

Parameters: - EPID: Entrepreneur ID to delete

Cascade Order: 1. Check for linked company 2. If company exists and user confirms: - Delete Entrepreneur Company Principal Projects - Delete Entrepreneur Company Programme Year Status History - Delete Entrepreneur Company Programme Years - Delete Entrepreneur Company Areas of Operation - Delete Entrepreneur Company Commodities - Delete Entrepreneur Company Status History - Delete Entrepreneur Company record 3. Delete Entrepreneur Arize First Meeting 4. Delete Entrepreneur Edit History 5. Delete Entrepreneur Notes 6. Delete Entrepreneur Profile Presented To 7. Delete Entrepreneur Purple Panelists 8. Delete Entrepreneur Status History 9. Delete Entrepreneur Year One Profile 10. Delete Entrepreneurs record


3.3 AllocateSpecificEPs()

Sub AllocateSpecificEPs()

Purpose: Batch allocation of entrepreneurs to programme

Behavior: 1. Opens query of uncontacted/unfollowed entrepreneurs 2. For each entrepreneur: - Creates company if not exists - Updates entrepreneur status to allocated - Generates Student ID (Year-EntrepreneurID) - Assigns Allocation ID - Creates status history entry


3.4 GetXofY()

Function GetXofY(f As Form) As String

Purpose: Returns "X of Y" record position string

Parameters: - f: Form reference

Returns: String like "5 of 100"


3.5 IsLoaded()

Function IsLoaded(ByVal strFormName As String) As Boolean

Purpose: Checks if a form is currently open

Parameters: - strFormName: Name of form to check

Returns: Boolean - True if form is open in Form/Datasheet view


3.6 Password Validation Functions

Function CheckForUpper(CheckString As String) As Boolean
Function CheckForSpecial(CheckString As String) As Boolean
Function CheckForNumber(CheckString As String) As Boolean

Purpose: Password complexity validation

CheckForUpper: Checks for uppercase letters (A-Z) CheckForSpecial: Checks for special characters (punctuation) CheckForNumber: Checks for numeric digits (0-9)


3.7 MoveWD()

Public Function MoveWD(datThis As Date, intInc As Integer) As Date

Purpose: Adds/subtracts weekdays (excluding weekends)

Parameters: - datThis: Starting date - intInc: Number of weekdays to move (positive or negative)

Returns: Date - Resulting date after moving weekdays


3.8 DeleteImportErrorTables()

Sub DeleteImportErrorTables()

Purpose: Cleans up import error tables created during data imports

Behavior: Deletes all tables with "ImportErrors" in the name


4. Mod Populate Temp Table.bas

Report data preparation functions.

4.1 PopulateAvgDaysStepTable()

Sub PopulateAvgDaysStepTable()

Purpose: Prepares data for pipeline movement reports

Behavior: 1. Cleans Temp Entrepreneur Steps table 2. Queries entrepreneurs modified in date range 3. Populates temp table with: - Entrepreneur ID - Date Record Created - Pipeline ID - Step 8 First Date


4.2 PopulateRaizcorpPossiblesTempTable()

Sub PopulateRaizcorpPossiblesTempTable()

Purpose: Identifies Raizcorp Possibles moved in last week

Behavior: 1. Cleans temp table 2. Queries moved entrepreneurs by company 3. Checks for status changes to Active/Allocated/Exited 4. Populates temp table with qualifying company IDs


4.3 PopulatePurpleMeetingStepTable()

Sub PopulatePurpleMeetingStepTable()

Purpose: Prepares Purple Panel meeting summary

Behavior: 1. Cleans Temp Purple Meeting Status table 2. Queries entrepreneurs by step and project 3. Pivots data into columns: - Step 2 through Step 8 counts - By Recommended Principal Project ID


4.4 PopulateTempStepsSkippedErrors()

Sub PopulateTempStepsSkippedErrors()

Purpose: Identifies entrepreneurs who skipped pipeline steps

Behavior: 1. Queries entrepreneur step history 2. Records last date for each step (0-8) 3. Compares against required pipeline steps 4. Flags "Steps Skipped" if any required step missing

Output Fields: - Step 0-8 Last Date - Steps Skipped (Boolean)


4.5 PopulateStepTableForSummaryReport()

Sub PopulateStepTableForSummaryReport()

Purpose: Prepares entrepreneur summary report data

Behavior: 1. Queries step dates for entrepreneurs in date range 2. Records last date for each step 3. Queries reactivated entrepreneurs 4. Flags reactivated status


5. Mod Export Excel.bas

Excel report generation (307KB - largest module).

5.1 Overview

Contains numerous Excel export functions using COM automation: - Creates new Excel workbook - Formats headers with bold - Populates data from queries - Formats date columns

5.2 Key Functions

ExportDetailedPrincipalToExcel()

Purpose: Exports detailed principal report

Columns: 1. Lead Type 2. Entrepreneur 3. Company Name 4. Industry 5. Brief Description of Business 6. Status 7. Recommended BBBEE Pillar 8. Note Date 9. Notes

ExportPrincipalSupplierListAndMarketingToExcel()

Purpose: Exports supplier list and marketing data

Sections: - Supplier List progress categories - Raizcorp Marketing progress categories - Unqualified summaries with reasons

5.3 Pattern Used

' Typical Excel export pattern
Set ExcelObj = CreateObject("Excel.Application")
ExcelObj.Visible = True
ExcelObj.Application.Workbooks.Add

' Headers
ExcelObj.Application.Worksheets(1).Cells(RowPtr, 1) = "Column Name"
ExcelObj.Application.Worksheets(1).Cells(RowPtr, 1).Font.Bold = True

' Data loop
Do Until RecSet.EOF
    ExcelObj.Application.Worksheets(1).Cells(RowPtr, 1) = RecSet.Fields("FieldName")
    RowPtr = RowPtr + 1
    RecSet.MoveNext
Loop

6. basRelink.bas

ODBC connection management for SQL Server backend.

6.1 RelinkODBC()

Public Function RelinkODBC() As Boolean

Purpose: Relinks all ODBC tables to SQL Server

Behavior: 1. Validates single database selected in zstblODBC_db 2. Removes existing ODBC links 3. Reads table configuration from qryLinkODBC 4. Creates new links with appropriate authentication: - Windows Authentication (Trusted_Connection) - SQL Server Authentication (UID/PWD) 5. Executes AfterDDL scripts if specified 6. Sets hidden attribute if configured

Configuration Tables: - zstblODBC_db: Database connection settings - zstblODBC_tables: Tables to link


6.2 AttachDSNLessTable()

Public Function AttachDSNLessTable(
    ByRef pstrTableNameLocal As String,
    ByRef pstrTableNameRemote As String,
    ByRef pstrServerName As String,
    ByRef pstrDatabaseName As String,
    Optional ByRef pstrUserName As String,
    Optional ByRef pstrPassword As String
) As Boolean

Purpose: Creates DSN-less ODBC connection to single table

Parameters: - Local table name (in Access) - Remote table name (on SQL Server) - Server name - Database name - Username (optional - uses Windows auth if blank) - Password (optional)


6.3 TableExists()

Public Function TableExists(ByVal pstrTableName As String) As Boolean

Purpose: Checks if table exists in current database


6.4 PopulateTableList()

Public Sub PopulateTableList()

Purpose: Populates zstblODBC_tables from current TableDefs


7. ExportModule.bas

Database object export utility.

7.1 ExportAllCode()

Public Sub ExportAllCode()

Purpose: Interactive export of all database objects

Behavior: 1. Prompts for output folder 2. Creates subfolders: Modules, Forms, Reports, Macros, Queries, Tables 3. Asks about query inclusion 4. Exports all objects 5. Reports statistics

7.2 ExportAllCodeToFolder()

Public Sub ExportAllCodeToFolder(outputFolder As String,
                                  Optional includeQueries As Boolean = True)

Purpose: Automated export (no prompts)

7.3 Export Functions

Function Object Type File Extension
ExportModules() VBA Modules .bas
ExportForms() Forms .txt
ExportReports() Reports .txt
ExportMacros() Macros .txt
ExportQueries() Queries .txt
ExportTableSchemas() Table Structures .txt

7.4 Helper Functions

Private Function GetFieldTypeName(fieldType As Integer) As String
Private Function SanitizeFileName(fileName As String) As String
Private Sub CreateFolderIfNotExists(folderPath As String)
Private Function BrowseForFolder(prompt As String) As String

8. Error Handling Patterns

Standard Pattern

Sub ExampleProcedure()
On Error GoTo Err_ExampleProcedure

    ' Main code here

Exit_ExampleProcedure:
    Exit Sub

Err_ExampleProcedure:
    MsgBox Err.Description
    Resume Exit_ExampleProcedure
End Sub
'TVCodeTools ErrorEnablerStart
On Error GoTo PROC_ERR
'TVCodeTools ErrorEnablerEnd

' Code here

'TVCodeTools ErrorHandlerStart
PROC_EXIT:
    Exit Function

PROC_ERR:
    MsgBox Err.Description, vbCritical, "ModuleName.ProcedureName"
    Resume PROC_EXIT
'TVCodeTools ErrorHandlerEnd

9. Common Patterns

9.1 DAO Recordset Operations

Dim Actdatabase As DAO.Database
Dim RecSet As DAO.Recordset

Set Actdatabase = CurrentDb
Set RecSet = Actdatabase.OpenRecordset("TableName", dbOpenDynaset, dbSeeChanges)

Do Until RecSet.EOF
    ' Process record
    RecSet.MoveNext
Loop

RecSet.Close

9.2 Parameter Query Execution

Dim QryDef As DAO.QueryDef
Dim Prm As Parameter

Set QryDef = Actdatabase.QueryDefs("QueryName")

For Each Prm In QryDef.Parameters
    Prm.Value = Eval(Prm.Name)  ' Evaluates form references
Next Prm

Set RecSet = QryDef.OpenRecordset(dbOpenDynaset, dbSeeChanges)

9.3 Suppress Warnings

Application.SetOption "Confirm Action Queries", False
DoCmd.RunSQL "DELETE * FROM [TableName]"
Application.SetOption "Confirm Action Queries", True

' Or using DoCmd
DoCmd.SetWarnings False
DoCmd.RunSQL SQLString
DoCmd.SetWarnings True

10. Dependencies

Required References

  • Microsoft DAO 3.6 Object Library
  • Microsoft Office Excel Object Library (for exports)
  • Microsoft Scripting Runtime (for FileSystemObject)
  • Microsoft ADO (for PopulateTableList)

Document generated by BMAD Document Project Workflow