Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Part 4 begins by enhancing the Admin Dashboard with high-level navigation controls for quick access to core modules, before finalizing the Chart of Account interface. We will establish the Sub or General Accounts to handle internal transactions.
Dashboard UI Enhancement: Improving the color scheme and creating professional navigation “cards” using shadowed rectangles and transparent buttons.
Navigation Control Setup: Designing 10 primary buttons for the dashboard, including Sales, Purchases, GL, and HR modules.
Dynamic System Date: Integrating a textbox with a dynamic date expression and setting the mouse hover effect to “Hyperlink Hand.”
COA Table Update: Adding the Payment field to the main Chart of Accounts table and updating the form with responsive design.
Centralizing Entries: Introducing the Common ID field to centralize associated tables for General Ledger entries.
Add Sub-Account Form: Building a new form with a list box for main account selection and fields for opening balances.
Duplicate Verification Logic: Implementing VBA on the After Update event to verify account names against existing table entries using visual icons.
Submit Logic & Balance Updates: Programming the submit button to refresh the main form and update the balances of the main accounts.
CRM & SRM Foundation: Creating the Customer and Supplier tables and integrating the Common ID field for future ledger tracking.

This fourth part of our masterclass shifts focus toward user experience and deeper financial structure. We will build a professional navigation dashboard and implement the “Sub-Account” layer of our Chart of Accounts.
A professional dashboard should provide one-click access to the most frequent tasks.
Instead of standard buttons, we use a modern “card” design:
Replicate the design for these 10 essential modules:
To keep the dashboard informative, insert a textbox in the header. Use the Expression Builder in the Control Source to set it to =Date(), ensuring the current date is always visible upon login.
Update the Main Chart of Accounts Table by adding a new field: Payment.

This is a critical architectural step. We introduce a Common ID (AcCommonID) field. This field will serve as the “anchor” that links General Ledger entries across various associated tables (Customers, Suppliers, etc.), ensuring data integrity during complex transactions.
frm_AddSubAccount)While we have main account groups, a business needs specific sub-accounts (e.g., specific bank names under the “Cash” group).

To prevent creating the same sub-account twice, we use two icons (Check/Cross) that respond to user input.
After Update event of the Account Name textbox.Private Sub txtAccName_AfterUpdate()
'Define a variable to store DCOUNT value
AG = DCount("AcSubNm", "tbl_ChartOfAccountsSub", "AcSubNm= '" & Me.txtAccName & "'")
If AG = 0 Then
Me.imgGNOk.Visible = False
Me.imgGOk.Visible = True
ElseIf AG > 0 Then
Me.imgGNOk.Visible = True
Me.imgGOk.Visible = False
End If
End SubThe Submit button executes the following logic:
Private Sub CmdSubmitAddSubAccount_Click()
'Mandaroty fields check to be filled
If IsNull(Me.ListSelectGroup) = True Or IsNull(Me.txtAccName) = True Then
MsgBox "Mandatory fields must be filled.", vbExclamation, "|Empty Fields|"
Exit Sub
Else
If Me.imgGNOk.Visible = True Then
MsgBox "The Group name already exitst.", vbCritical, "|Not Allowed|"
Exit Sub
Else
LAcNumber = Me.ListSelectGroup.Column(1)
If DCount("*", "tbl_ChartofaccountsSub", "accid=" & LAcNumber) = 0 Then
'The first record of the account
AcGLc = LAcNumber & "01"
Else
'Addition of 1 if previous account found
AcGLc = DLast("AcCommonID", "tbl_ChartofaccountsSub", "AccID=" & LAcNumber) + 1
End If
'Proceeding to insert data into the table
Set rst = CurrentDb.OpenRecordset("tbl_ChartofaccountsSub", dbOpenDynaset, dbSeeChanges)
With rst
.AddNew
.Fields("AccID") = LAcNumber
.Fields("AcCommonID") = AcGLc
.Fields("AcSubDt") = Date
.Fields("AcSubNm") = Me.txtAccName
.Fields("AcSubBalance") = Nz(Me.txtAccOpening, 0)
.Fields("AcSubDetail") = Me.txtAccDescription
.Update
End With
Set rst = Nothing
'Updating Chart of Accounts
Dim rstBalAcc As Recordset
Set rstBalAcc = CurrentDb.OpenRecordset("tbl_ChartOfAccounts", dbOpenDynaset, dbSeeChanges)
With rstBalAcc
.FindFirst "AccNumber = " & LAcNumber
.Edit
.Fields("AccBalance") = .Fields("AccBalance") + Me.txtAccOpening
.Update
End With
Set rstBalAcc = Nothing
'Close the form
DoCmd.Close acForm, "frm_addSubAccount"
'\\\MsgPopup
DoCmd.OpenForm "frm_msgpopup"
Forms!frm_msgpopup.Form.LblMsgPopup.Caption = "General Account has been created..."
'Refresh the data in the Main form
Forms!MainDashboard!NavigationSubform.Form.Requery
End If
End If
End SubFinally, we establish the tables for our business partners:
| Field Name | Data Type | Purpose |
|---|---|---|
CID | AutoNumber (Primary Key) | Unique ID for the Customers entry. |
AcCommonID | Number | ID to link all general ledger entries |
CName | Text | Customer Name |
CCompany | Text | Customer Company name |
CContactPerson | Text | Person to be contacted |
CEmail | Text | Customer Email address |
CCity | Currency | City of the customer’s business |
CAddress | Text | Address of the customer’s business |
CShipmentPersonName | Text | Name of the person who will receive the products |
CShipmentContact | Text | Contact number of the receiver |
CShipmentEmail | Text | Email address of the receiver |
CShipmentCity | Text | City where goods will be shipped |
CShipmentAddress | Text | Address where goods will be shipped |
CPaymentMothod | Text | Customer’s payment method |
CPaymentTerms | Text | Payment terms |
CBalance | Currency | Customer Balance |
CLastPaymentDate | Date/Time | Customer last payment date |
| Field Name | Data Type | Purpose |
|---|---|---|
SID | AutoNumber (Primary Key) | Unique ID for the Supplier entry. |
AcCommonID | Number | ID to link all general ledger entries |
SName | Text | Supplier Name |
SCompany | Text | Supplier Company name |
SContactPerson | Text | Person to be contacted |
SEmail | Text | Supplier Email address |
SCity | Currency | City of the supplier’s business |
SAddress | Text | Address of the supplier’s business |
SShipmentPersonName | Text | Name of the person who will dispatch the products |
SShipmentContact | Text | Contact number of the sender |
SShipmentEmail | Text | Email address of the sender |
SShipmentCity | Text | City where goods will be shipped |
SShipmentAddress | Text | Address where goods will be shipped |
SPaymentMothod | Text | Payment method decided for Supplier |
SPaymentTerms | Text | Payment terms |
SBalance | Currency | Supplier Balance |
SLastPaymentDate | Date/Time | Supplier last payment date |
By the end of this session, your dashboard is functional, and your Chart of Accounts is ready to handle detailed sub-account transactions.