PSLine2000Documentation/Modules/SummaryModule.md

9.9 KiB

SummaryModule

Analysis generated on: 4/1/2025 5:16:54 PM

VBA Code

Attribute VB_Name = "SummaryModule"
Option Compare Database
Option Explicit

' Subroutine to generate a summary of the entire database
Public Sub GenerateDatabaseSummary()
    Dim fso As Object
    Dim overviewFile As Object
    Dim summaryFile As Object
    Dim vaultPath As String
    Dim overviewPath As String
    Dim summaryPath As String
    
    On Error GoTo ErrorHandler
    
    ' Set up the FileSystemObject
    Debug.Print "Creating FileSystemObject"
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso Is Nothing Then
        Debug.Print "Failed to create FileSystemObject"
        MsgBox "Failed to create FileSystemObject. Error: " & Err.Description, vbCritical
        Exit Sub
    End If
    Debug.Print "FileSystemObject created successfully"
    
    ' Define paths
    vaultPath = CurrentProject.Path & "\ObsidianVault"
    overviewPath = vaultPath & "\Overview.md"
    summaryPath = vaultPath & "\WhatItDoes.md"
    
    ' Check if the vault folder exists
    Debug.Print "Checking vault folder: " & vaultPath
    If Not fso.FolderExists(vaultPath) Then
        Debug.Print "Vault folder does not exist: " & vaultPath
        MsgBox "Vault folder does not exist: " & vaultPath & ". Please run the other documentation modules first.", vbCritical
        Exit Sub
    End If
    
    ' Create the summary file
    Debug.Print "Creating summary file: " & summaryPath
    Set summaryFile = fso.CreateTextFile(summaryPath, True)
    If summaryFile Is Nothing Then
        Debug.Print "Failed to create WhatItDoes.md"
        MsgBox "Failed to create WhatItDoes.md. Error: " & Err.Description, vbCritical
        Exit Sub
    End If
    Debug.Print "Summary file created successfully"
    
    ' Write the summary header
    summaryFile.WriteLine "# What It Does: Database Summary"
    summaryFile.WriteLine "Generated on: " & Now
    summaryFile.WriteLine "---"
    summaryFile.WriteLine "## Overview"
    summaryFile.WriteLine "This document provides a high-level summary of the Access database, aggregating information from the documentation of its Queries, Forms, Tables, Modules, and Macros."
    summaryFile.WriteLine ""
    
    ' Initialize counters
    Dim queryCount As Long
    Dim formCount As Long
    Dim tableCount As Long
    Dim moduleCount As Long
    Dim macroCount As Long
    queryCount = 0
    formCount = 0
    tableCount = 0
    moduleCount = 0
    macroCount = 0
    
    ' Lists to store component names
    Dim queriesList As String
    Dim formsList As String
    Dim tablesList As String
    Dim modulesList As String
    Dim macrosList As String
    queriesList = ""
    formsList = ""
    tablesList = ""
    modulesList = ""
    macrosList = ""
    
    ' Check if Overview.md exists
    If fso.FileExists(overviewPath) Then
        Debug.Print "Reading Overview.md: " & overviewPath
        Set overviewFile = fso.OpenTextFile(overviewPath, 1) ' 1 = ForReading
        Dim overviewText As String
        overviewText = overviewFile.ReadAll
        overviewFile.Close
        Set overviewFile = Nothing
        
        ' Split the overview text into lines
        Dim lines() As String
        lines = Split(overviewText, vbCrLf)
        Dim i As Long
        Dim currentSection As String
        currentSection = ""
        
        For i = LBound(lines) To UBound(lines)
            Dim line As String
            line = Trim(lines(i))
            
            ' Identify the current section
            If InStr(1, line, "## Queries", vbTextCompare) > 0 Then
                currentSection = "Queries"
            ElseIf InStr(1, line, "## Forms", vbTextCompare) > 0 Then
                currentSection = "Forms"
            ElseIf InStr(1, line, "## Tables", vbTextCompare) > 0 Then
                currentSection = "Tables"
            ElseIf InStr(1, line, "## Modules", vbTextCompare) > 0 Then
                currentSection = "Modules"
            ElseIf InStr(1, line, "## Macros", vbTextCompare) > 0 Then
                currentSection = "Macros"
            ElseIf InStr(1, line, "## Analysis Complete", vbTextCompare) > 0 Then
                currentSection = ""
            End If
            
            ' Process the line based on the current section
            If currentSection <> "" And Left(line, 2) = "- " And Not InStr(1, line, "Error:", vbTextCompare) > 0 Then
                ' Extract the component name from the link
                Dim componentName As String
                Dim startPos As Long
                Dim endPos As Long
                startPos = InStr(1, line, "[[") + 2
                endPos = InStr(startPos, line, "]]")
                If startPos > 2 And endPos > startPos Then
                    componentName = Mid(line, startPos, endPos - startPos)
                    ' Remove the section prefix (e.g., "Queries/")
                    Dim slashPos As Long
                    slashPos = InStr(1, componentName, "/")
                    If slashPos > 0 Then
                        componentName = Mid(componentName, slashPos + 1)
                    End If
                    
                    ' Add to the appropriate list and increment the counter
                    Select Case currentSection
                        Case "Queries"
                            queryCount = queryCount + 1
                            queriesList = queriesList & "- [[" & currentSection & "/" & componentName & "]]" & vbCrLf
                        Case "Forms"
                            formCount = formCount + 1
                            formsList = formsList & "- [[" & currentSection & "/" & componentName & "]]" & vbCrLf
                        Case "Tables"
                            tableCount = tableCount + 1
                            tablesList = tablesList & "- [[" & currentSection & "/" & componentName & "]]" & vbCrLf
                        Case "Modules"
                            moduleCount = moduleCount + 1
                            modulesList = modulesList & "- [[" & currentSection & "/" & componentName & "]]" & vbCrLf
                        Case "Macros"
                            macroCount = macroCount + 1
                            macrosList = macrosList & "- [[" & currentSection & "/" & componentName & "]]" & vbCrLf
                    End Select
                End If
            ElseIf currentSection <> "" And InStr(1, line, "*No ", vbTextCompare) > 0 Then
                ' Handle the case where no components are found
                Select Case currentSection
                    Case "Queries"
                        queryCount = 0
                        queriesList = "- *No queries found*" & vbCrLf
                    Case "Forms"
                        formCount = 0
                        formsList = "- *No forms found*" & vbCrLf
                    Case "Tables"
                        tableCount = 0
                        tablesList = "- *No tables found*" & vbCrLf
                    Case "Modules"
                        moduleCount = 0
                        modulesList = "- *No modules found*" & vbCrLf
                    Case "Macros"
                        macroCount = 0
                        macrosList = "- *No macros found*" & vbCrLf
                End Select
            End If
        Next i
    Else
        Debug.Print "Overview.md not found: " & overviewPath
        summaryFile.WriteLine "## Error"
        summaryFile.WriteLine "- *Overview.md not found. Please run the other documentation modules first.*"
        summaryFile.Close
        Set summaryFile = Nothing
        Set fso = Nothing
        MsgBox "Overview.md not found: " & overviewPath & ". Please run the other documentation modules first.", vbCritical
        Exit Sub
    End If
    
    ' Write the summary counts
    summaryFile.WriteLine "## Summary Counts"
    summaryFile.WriteLine "- **Total Queries**: " & queryCount
    summaryFile.WriteLine "- **Total Forms**: " & formCount
    summaryFile.WriteLine "- **Total Tables**: " & tableCount
    summaryFile.WriteLine "- **Total Modules**: " & moduleCount
    summaryFile.WriteLine "- **Total Macros**: " & macroCount
    summaryFile.WriteLine ""
    
    ' Write the detailed lists
    summaryFile.WriteLine "## Queries (" & queryCount & ")"
    If queryCount > 0 Then
        summaryFile.Write queriesList
    Else
        summaryFile.WriteLine queriesList
    End If
    summaryFile.WriteLine ""
    
    summaryFile.WriteLine "## Forms (" & formCount & ")"
    If formCount > 0 Then
        summaryFile.Write formsList
    Else
        summaryFile.WriteLine formsList
    End If
    summaryFile.WriteLine ""
    
    summaryFile.WriteLine "## Tables (" & tableCount & ")"
    If tableCount > 0 Then
        summaryFile.Write tablesList
    Else
        summaryFile.WriteLine tablesList
    End If
    summaryFile.WriteLine ""
    
    summaryFile.WriteLine "## Modules (" & moduleCount & ")"
    If moduleCount > 0 Then
        summaryFile.Write modulesList
    Else
        summaryFile.WriteLine modulesList
    End If
    summaryFile.WriteLine ""
    
    summaryFile.WriteLine "## Macros (" & macroCount & ")"
    If macroCount > 0 Then
        summaryFile.Write macrosList
    Else
        summaryFile.WriteLine macrosList
    End If
    summaryFile.WriteLine ""
    
    ' Finalize and clean up
    Debug.Print "Closing summary file"
    summaryFile.Close
    Set summaryFile = Nothing
    Set fso = Nothing
    
    MsgBox "Database summary complete. File saved to: " & summaryPath, vbInformation
    Exit Sub

ErrorHandler:
    Debug.Print "Error in GenerateDatabaseSummary: " & Err.Number & ": " & Err.Description & " at " & Now
    If Not summaryFile Is Nothing Then
        Debug.Print "Closing summaryFile in error handler"
        summaryFile.Close
        Set summaryFile = Nothing
    End If
    Set fso = Nothing
    MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical
    Exit Sub
End Sub

What it does

No VBA code to document due to export failure