Streamlining Form Module Code in Standalone Class Module.
Class Module Template Creation Wizard.
The earlier version of the Class Module Wizard was a testing platform for creating Wrapper Class Module templates. Although it served its purpose, the procedure adopted there is somewhat semi-automatic, and I am not satisfied with that either.
This improved Version 2.0 of the Wizard can create several Class Module Templates for different Object Types in your form. This Version creates about 10 frequently used Objects Wrapper Class Module Templates, based on your selection of choices at a time.
The Screenshot of the Class Template Wizard is given below:
The ListBox's Source Data is from the 'ListItems' Table. The Source Table Image is given below.
The Table has ten Records with six columns of data, but only the first three columns are shown on the ListBox.
(1) The RecordID - for easier retrieval of Wizard Function Parameters.
(2) the Field/Control list File Name for creating on Disk - The files will be created in the Current Project Folder.
(3) the Class Module Template Name - suffixed with the word '_Template' is preferred, not mandatory.
The following three Columns of data are used by the Wizard.
(4) The Wizard Function that creates the Class Template - Applicable for all Types of Objects.
(5) The Object TypeName - self-explanatory.
(6) Object Short Name - you may change it to a more descriptive Name if required.
How to Run the WrapperClassWizard from within a Database?
Place the WrapperClass_Wizard.accdb database into a Trusted Folder.
Open your Database and open the VBE Window.
Select References... from the Tools menu, find the Wizard Database, attach, and select to add it to the selected List of Library Files.
Create a SELECT Query in your Project with the name ListItemsQ using the following SQL:
SELECT ListItems.* FROM ListItems IN 'D:\DEMO\Code2\WrapperClass_Wizard.accdb';
Change the Folder Path to the location of the WrapperClass_Wizard.accdb correctly.
You can create class module templates with the main object declarations (e.g., TextBox and Form, or any other Control and Form) with their property procedures for up to 10 of the most frequently used controls on the form.
Additionally, you can add a sample Click Event Subroutine Code foundation with all the Data Field Names (eg: TextBox and ComboBox Names) collected from the Form. To achieve this, insert a few lines of code (shown in red) in the Class_Init() Subroutine listing below, to collect each Control Type in separate Groups from the Form and save them into their designated text files on disk, when that Form is in open state.
Note: If you plan to implement this Data Field Name saving procedure for two or more Forms these text file contents on Disk will be overwritten with the last open Form's Field Names.
For creating the TextBox or ComboBox sample Click Event Subroutine for a particular Form, open the Form with its Class_Init() Subroutine Code Lines in red, for a few seconds, and close it before running the Class Template creation Wizard.
I recommend this procedure to collect the Data field names from the Form with the help of Code because all of them are inserted from the data source Table/Query, and memorizing all their names correctly for easier event subroutine coding is impractical. We need to refer to the data source Table/Query or check the Control Names on the Form, after opening the Form in Design View to pick their names correctly for use in the Code.
The Field Names writing Code lines (marked in Red) are inserted into the Class_Init() subroutine which writes the control names of each category into their respective designated text files on disk. Below is the Class_Init() Subroutine in the Class_ObjInit Class Module of Employees Form implemented with this procedure.
Option Compare Database Option Explicit Private txt As Data_TxtBox Private Cbo As Data_CboBox Private cmd As Data_CmdButton Private Coll As New Collection Private Frm As Form '-------------------------------------------------------------------- 'Streamlining Form Module Code 'in Stand-alone Class Modules 'With Reusable Code '-------------------------------------------------------------------- 'The 'WrapperClassWizard.accdb' attached to this Database 'Check: Tools--> References... '-------------------------------------------------------------------- '1. The 'Class_ObjInit' Class saves TxtBox/Field Names, Command Button, 'ComboBox Names, and others from the Open Form into TextBoxFields.txt, 'CmdButtonList.txt & ComboBoxList.txt files in the same Database Folder. ' '2. The 'WrapperClassWizard.accdb' must be attached to the 'Current Project to open up the Wizard Form by running 'the Function: OpenClassWizard() from within a Command button Click. ' '3. The Wizard Reads the Field Names from tbe above Text Files. ' '4. The Wizard will use the Field/Control Names(if any) for the sample 'Event Subroutine in the Template. If the file is empty then it will 'create a sample Evet Subroutine without the Control names. ' '5. This saves Coding time otherwise spent on creating a 'New Wrapper Class Module from scratch and picking the 'Field Names and other Control Names correctly 'From the Form for Event Subroutines. '-------------------------------------------------------------------- 'Author: a.p.r. pillai 'Date : 20/06/2024 'Remarks: with Ready-made Data Entry Events Handler ' : in the Wrapper TextBox Class Module ' : Suitable for Columnar, Tabular or DataSheet Form 'Rights: All Rights(c) Reserved by www.msaccesstips.com '-------------------------------------------------------------------- Public Property Get o_Frm() As Form Set o_Frm = Frm End Property Public Property Set o_Frm(ByRef vFrm As Form) Set Frm = vFrm Class_Init End Property Private Sub Class_Init() Dim ProjectPath As String Dim txtPath As String Dim ComboPath As String Dim FieldListFile As String Dim ComboBoxList As String Dim ctl As Control On Error GoTo ClassInit_Err Const EP = "[Event Procedure]" 'Save TextBox & CombBox Names into separate Text Files 'for creating Event Subroutines in the Templates ProjectPath = CurrentProject.Path & "\" FieldListFile = DLookup("FieldListFile", "ListItemsQ", "ID = " & wizTextBox) ComboBoxList = DLookup("FieldListFile", "ListItemsQ", "ID = " & wizComboBox) txtPath = ProjectPath & FieldListFile ComboPath = ProjectPath & ComboBoxList Open txtPath For Output As #1 'TextBoxFields.txt for writing Open ComboPath For Output As #2 'ComboBoxList.txt 'Instantiate the 'Data_txtBox' Class for each TextBox 'on the Form for streamlined Event Procedures Coding For Each ctl In Frm.Controls Select Case TypeName(ctl) Case "TextBox" Print #1, ctl.Name 'write Field/TextBox Name in TextBoxFields.txt File Set txt = New Data_TxtBox Set txt.m_Frm = Frm Set txt.m_txt = ctl '//Colin Riddington Technique: Highlighting BackColor on GotFocus txt.m_txt.BackColor = 62207 'yellow txt.m_txt.BackStyle = 0 txt.m_txt.BeforeUpdate = EP txt.m_txt.OnDirty = EP Coll.Add txt 'Add Data_TxtBox Class Instance to Collection Set txt = Nothing 'Reset txt object Case "CommandButton" Set cmd = New Data_CmdButton Set cmd.Obj_Form = Frm Set cmd.cmd_Button = ctl cmd.cmd_Button.OnClick = EP Coll.Add cmd Set cmd = Nothing Case "ComboBox" Print #2, ctl.Name 'write ComboBox Names in ComboBoxList.txt File Set Cbo = New Data_CboBox Set Cbo.m_Frm = Frm Set Cbo.m_Cbo = ctl '//Colin Riddington Technique: Highlighting BackColor on GotFocus Cbo.m_Cbo.BackColor = 62207 Cbo.m_Cbo.BackStyle = 0 Cbo.m_Cbo.BeforeUpdate = EP Cbo.m_Cbo.OnDirty = EP Coll.Add Cbo Set Cbo = Nothing Case "ListBox" End Select Next 'Close all files Close #1 Close #2 ClassInit_Exit: Exit Sub ClassInit_Err: MsgBox Err & ": " & Err.Description, , "Class_Init()" Resume ClassInit_Exit End Sub Private Sub Class_Terminate() While Coll.Count > 0 Coll.Remove 1 Wend Set Coll = Nothing End Sub
The red lines are inserted in the required locations to collect the Data Field and ComboBox Names and record them in separate Text Files in the Project Folder as Input to the Class Module creation Wizard. Similarly, you can insert related Code lines for other Types of Controls on the Form.
The Wizard will look for these files on the disk and check their contents. If control names are found, they will be used for building a sample Click Event Subroutine after the main object declarations and property procedure lines of code.
If the above lines are embedded in the Class_Init() subroutine, we should open and keep the Employees Form for a few seconds and close it before running the wizard options. This will create the controls list in their respective text files, using the predefined file names taken from the wizard table ListItems, through the Select Query ListItemsQ.
The TextBoxFields.txt File contents created from the Employee Form Field Names are listed below for reference:
ID Company Last Name First Name E-mail Address Job Title Address City State/Province ZIP/Postal Code Country/Region
The Sample Click Event Subroutine Structure Code.
Private Sub txtBox_Click() Select Case txtBox.Name Case "ID" ' Code Case "Company" ' Code Case "Last Name" ' Code Case "First Name" ' Code Case "E-mail Address" ' Code Case "Job Title" ' Code Case "Address" ' Code Case "City" ' Code Case "State/Province" ' Code Case "ZIP/Postal Code" ' Code Case "Country/Region" ' Code End Select End Sub
Remove the unwanted Control Names from the List, if no Events are invoked from those controls.
Opening the ClassWizard Form.
Open the ClassWizard Form, by calling the Function OpenClassWizard() from your Project through a Command Button Click Event Subroutine, with the following sample VBA Code lines:
Private Sub Command25_Click()
VBE.CodePanes.Item(1).show
OpenClassWizard VBE.ActiveVBProject.Name End Sub
The OpenClassWizard() Function Code is given below.
Note: You should not create a Function with the same name: OpenClassWizard() in your Project, where the Wizard is attached as a Library database.
Dim ProjectName As String 'Public Function to Open the Wizard Form 'from the Host Application Public Function OpenClassWizard(ByVal projName As String) On Error GoTo OpenClassWizard_Err ProjectName = projName DoCmd.OpenForm "ClassWizard", acNormal OpenClassWizard_Exit: Exit Function OpenClassWizard_Err: MsgBox Err & ": " & Err.Description, , "OpenClassWizard()" Resume OpenClassWizard_Exit End Function
When the Wizard Form is open in your Application Window select one or more items from the List of Control Types, like TextBox, Command Buttons, or any other Classs Module you need, and Click the Run Wizard Command Button.
The ClassWizard Form Module Code:
Option Compare Database Option Explicit Private obj As New Wiz_ObjInit Private Sub Form_load() Set obj.O_Form = Me End Sub Private Sub Form_Unload(Cancel As Integer) Set obj = Nothing End Sub
The Wiz_ObjInit Intermediary Class Module VBA Code.
Option Compare Database Option Explicit Private Lst As Wiz_ListBox Private oFrm As Access.Form Private cmd As Wiz_CmdButton Private Coll As New Collection '---------------------------------------------------------- 'Streamlining Form Module Code in Stand-alone Class Modules 'With Reusable Structured Event Subroutine Coding. '---------------------------------------------------------- 'Event Procedure Coding in Standalone Class Module is now 'made easier with Readymade Object Wrapper Class Templates 'Demo Event Subroutine is created with the Control Names. '---------------------------------------------------------- 'Program: Wrapper Class Template Wizard 'Author: a.p.r. pillai 'Date : 20/06/2024 'Rights: All Rights(c) Reserved by www.msaccesstips.com '---------------------------------------------------------- Public Property Get O_Form() As Form Set O_Form = oFrm End Property Public Property Set O_Form(ByRef objForm As Form) Set oFrm = objForm Class_Init End Property Private Sub Class_Init() On Error GoTo Class_Init_Err Dim ctl As Control Const EP = "[Event Procedure]" For Each ctl In oFrm.Controls Select Case TypeName(ctl) Case "ListBox" Set Lst = New Wiz_ListBox Set Lst.Obj_Form = oFrm Set Lst.Lst_Box = ctl Lst.Lst_Box.OnClick = EP Coll.Add Lst Set Lst = Nothing Case "CommandButton" Set cmd = New Wiz_CmdButton Set cmd.Obj_Form = oFrm Set cmd.Obj_cmdButton = ctl cmd.Obj_cmdButton.OnClick = EP Coll.Add cmd Set cmd = Nothing End Select Next Class_Init_Exit: Exit Sub Class_Init_Err: MsgBox Err & ": " & Err.Description, , "Class_Init()" Resume Class_Init_Exit End Sub Private Sub Class_Terminate() While Coll.Count > 0 Coll.Remove 1 Wend Set Coll = Nothing Set Lst = Nothing End Sub
The Class_Init() Subroutine has only the ListBox and Command Button Control's Click Event to Enable.
The ListBox Wrapper Class 'Wiz_ListBox' Module VBA Code.
Option Compare Database Option Explicit Private WithEvents LstBox As Access.ListBox Private Frm As Access.Form '---------------------------------------------------------- 'Streamlining Form Module Code in Stand-alone Class Modules 'With Reusable Structured Event Subroutine Coding. '---------------------------------------------------------- 'Event Procedure Coding in Standalone Class Module is now 'made easier with Readymade Object Wrapper Class Templates 'Demo Event Subroutine is created with the Control Names. '---------------------------------------------------------- 'Program: Wrapper Class Template Wizard 'Author: a.p.r. pillai 'Date : 20/06/2024 'Rights: All Rights(c) Reserved by www.msaccesstips.com '---------------------------------------------------------- Public Property Get Obj_Form() As Form Set Obj_Form = Frm End Property Public Property Set Obj_Form(ByRef objForm As Form) Set Frm = objForm End Property Public Property Get Lst_Box() As Access.ListBox Set Lst_Box = LstBox End Property Public Property Set Lst_Box(ByRef objListB As Access.ListBox) Set LstBox = objListB End Property Private Sub LstBox_Click() On Error GoTo LstBox_Click_Err Select Case LstBox.Name Case "List1" Dim lCount As Integer Dim tmpList As ListBox Dim j As Integer Set tmpList = Frm.List1 lCount = tmpList.ListCount - 1 For j = 0 To lCount If tmpList.Selected(j) Then Frm.cmdRun.Enabled = True Exit Sub Else Frm.cmdRun.Enabled = False End If Next End Select LstBox_Click_Exit: Exit Sub LstBox_Click_Err: MsgBox Err & ": " & Err.Description, , "LstBox_Click()" Resume LstBox_Click_Exit End Sub
The Click Event of the ListBox Control checks for the presence of any selected Items in the ListBox, if found then enables the Command Button with the Caption 'Run Wizard' otherwise the Command Button is disabled.
The Command Button Wrapper Class 'Wiz_CmdButton' Module Code.
Option Compare Database Option Explicit Private WithEvents cmdButton As Access.CommandButton Private Frm As Access.Form '---------------------------------------------------------- 'Streamlining Form Module Code in Stand-alone Class Modules 'With Reusable Structured Event Subroutine Coding. '---------------------------------------------------------- 'Event Procedure Coding in Standalone Class Module is now 'made easier with Readymade Object Wrapper Class Templates 'Demo Event Subroutine is created with the Control Names. '---------------------------------------------------------- 'Program: Wrapper Class Template Wizard 'Author: a.p.r. pillai 'Date : 20/06/2024 'Rights: All Rights(c) Reserved by www.msaccesstips.com '---------------------------------------------------------- Public Property Get Obj_Form() As Access.Form Set Obj_Form = Frm End Property Public Property Set Obj_Form(ByRef objForm As Access.Form) Set Frm = objForm End Property Public Property Get Obj_cmdButton() As Access.CommandButton Set Obj_cmdButton = cmdButton End Property Public Property Set Obj_cmdButton(ByRef vcmdButton As Access.CommandButton) Set cmdButton = vcmdButton End Property Private Sub cmdButton_Click() On Error GoTo cmdButtonClick_Err Select Case cmdButton.Name Case "cmdClose" DoCmd.Close acForm, "ClassWizard" Case "cmdRun" Dim modul As Module Dim flag As Boolean Dim vbcompo As vbcomponent Dim tmpList As ListBox Dim wiz As Integer Dim strWiz As String Dim FunctionName As String Dim FieldListFile As String Dim ClsTemplate As String Dim s_ObjTypeName As String Dim s_ObjName As String Dim msg As String Dim lCount As Integer Dim j As Integer, k As Integer Dim qot As String Dim objType As Long Dim Dt As Double Dim ClsSourceFile As String Dim ProjectName As String Dim Result As Boolean qot = Chr(34) Set tmpList = Frm.List1 lCount = tmpList.ListCount - 1 k = 0 'Validation Check msg = "" For j = 0 To lCount If tmpList.Selected(j) Then 'FieldList File FieldListFile = CurrentProject.Path & "\" & tmpList.Column(1, j) 'Chek for FieldList File on Disk If Len(Dir(FieldListFile)) = 0 Then Open FieldListFile For Output As #1 Print #1, Space(5) Close #1 End If 'Class Template Name ClsTemplate = tmpList.Column(2, j) msg = "" FunctionName = tmpList.Column(3, j) If Len(Nz(FunctionName, "")) = 0 Then FunctionName = "CreateClassTemplate" End If s_ObjTypeName = tmpList.Column(4, j) If Len(Nz(s_ObjTypeName, "")) = 0 Then 'Control Type Name column empty msg = "*** Object TypeName not specified!" Else objType = ControlTypeCheck(s_ObjTypeName) 'Is it a Valid Control TypeName If objType = 9999 Then 'Name not in specified list msg = "*** object Typename: " & UCase(s_ObjTypeName) & vbCr _ & "Not in specified List?" End If End If s_ObjName = tmpList.Column(5, j) If Len(Nz(s_ObjName, "")) = 0 Then 'Column is empty msg = msg & vbCr & vbCr & "User-Defined Object Name Column is Empty!" End If If Len(msg) > 0 Then 'Errors Found msg = msg & vbCr & vbCr & "Errors Found in Item: " & tmpList.Column(0, j) & _ vbCr & "Rectify the Errors and Re-run!" MsgBox msg, vbCritical + vbOKCancel, "cmdButton_Click()" Exit Sub Else 'No Errors then creaate Template 'Call the Wizard Result = CreateClassTemplate(FieldListFile, ClsTemplate, s_ObjTypeName, s_ObjName) If Not Result Then MsgBox "Errors Encountered for '" & ClsTemplate & "'" & vbCr _ & "Review/Modify the Parameter value(s) and Re-try." End If End If End If Next j MsgBox "Class Module Templates Created successfully!" 'Save created Template Class modules DoCmd.RunCommand acCmdCompileAndSaveAllModules Case "cmdHelp" DoCmd.OpenForm "Wiz_Help", acNormal End Select cmdButtonClick_Exit: Exit Sub cmdButtonClick_Err: MsgBox Err & ": " & Err.Description, , "cmdButtonClick()" Resume cmdButtonClick_Exit End Sub
It runs a series of checks on the Wizard parameters and Validates them before calling the CreateClassTemplate() Function with its parameters.
The Wizard will retrieve the Parameters for the selected items from the ListItems Table and check for the Field List/Control Files from the selected options on the disk. If found then retrieves the list of controls, if any, for the sample Event Subroutine.
After the validation check of all the parameter values, it calls the Wizard Function CreateClassTemplate() which creates the Class Module Templates, for the selected options, with the predefined names in your Project's VBE Window's Navigation Pane.
The CreateClassTemplate() Wizard Function VBA Code is given below:
Public Function CreateClassTemplate(ByVal FieldListFile As String, _ ByVal ClassTemplateName As String, ByVal strObjTypeName As String, _ ByVal strObjName As String) As Boolean '---------------------------------------------------------- 'Streamlining Form Module Code in Stand-alone Class Modules 'With Reusable Structured Event Subroutine Coding. '---------------------------------------------------------- 'Event Procedure Coding in Standalone Class Module is now 'made easier with Readymade Object Wrapper Class Templates 'Demo Event Subroutine is created with the Control Names. '---------------------------------------------------------- 'Program: Wrapper Class Template Wizard 'Author: a.p.r. pillai 'Date : 20/06/2024 'Rights: All Rights(c) Reserved by www.msaccesstips.com '---------------------------------------------------------- On Error GoTo CreateClassTemplate_Err Dim j As Long, k As Long, h As Long, CountLines As Long Dim low As Long, high As Long Dim FieldList() As String Dim strItem As Variant Dim strLines(1 To 33) As String Dim msg As String Dim idx As Integer Dim spacex As String Dim qot As String Dim ClsPath As String Dim vbcompo As vbcomponent spacex = Chr(32) qot = Chr(34) idx = 1 strLines(idx) = "VERSION 1.0 CLASS": GoSub NextIndex strLines(idx) = "BEGIN": GoSub NextIndex strLines(idx) = " MultiUse = -1": GoSub NextIndex strLines(idx) = "End": GoSub NextIndex strLines(idx) = "Attribute VB_Name = " & qot & ClassTemplateName & qot: GoSub NextIndex strLines(idx) = "Attribute VB_GlobalNameSpace = False": GoSub NextIndex strLines(idx) = "Attribute VB_Creatable = False": GoSub NextIndex strLines(idx) = "Attribute VB_PredeclaredId = False": GoSub NextIndex strLines(idx) = "Attribute VB_Exposed = False": GoSub NextIndex strLines(idx) = "Option Compare Database": GoSub NextIndex strLines(idx) = "Option Explicit": GoSub NextIndex strLines(idx) = spacex: GoSub NextIndex strLines(idx) = "Private WithEvents " & strObjName & " as Access." & strObjTypeName: GoSub NextIndex strLines(idx) = "Private Frm as Access.Form": GoSub NextIndex strLines(idx) = spacex: GoSub NextIndex strLines(idx) = "Public Property Get Obj_Form() as Access.Form": GoSub NextIndex strLines(idx) = " Set Obj_Form = Frm": GoSub NextIndex strLines(idx) = "End Property": GoSub NextIndex strLines(idx) = spacex: GoSub NextIndex strLines(idx) = "Public Property Set Obj_Form(ByRef objForm as Access.Form)": GoSub NextIndex strLines(idx) = " Set Frm = objForm": GoSub NextIndex strLines(idx) = "End Property": GoSub NextIndex strLines(idx) = spacex: GoSub NextIndex strLines(idx) = "Public Property Get Obj_" & strObjName & "() as Access." & strObjTypeName: GoSub NextIndex strLines(idx) = " Set obj_" & strObjName & " = " & strObjName: GoSub NextIndex strLines(idx) = "End Property": GoSub NextIndex strLines(idx) = spacex: GoSub NextIndex strLines(idx) = "Public Property Set Obj_" & strObjName & "(ByRef v" & strObjName & " as Access." & strObjTypeName & ")": GoSub NextIndex strLines(idx) = " Set " & strObjName & " = v" & strObjName: GoSub NextIndex strLines(idx) = "End Property": GoSub NextIndex strLines(idx) = spacex: GoSub NextIndex strLines(idx) = "Private Sub " & strObjName & "_Click()": GoSub NextIndex strLines(idx) = " Select Case " & strObjName & ".Name" 'Read the Field Names into Array Open FieldListFile For Input As #1 strItem = "" j = 0 While Not EOF(1) Input #1, strItem If Len(Trim(Nz(strItem, " "))) > 0 Then j = j + 1 ReDim Preserve FieldList(1 To j) As String FieldList(j) = strItem End If Wend Close #1 If j > 0 Then 'If 0 then Field List File is empty low = LBound(FieldList) high = UBound(FieldList) End If 'Write the Array contents to file ClsPath = CurrentProject.Path & "\TempClass.cls" Open ClsPath For Output As #1 For k = 1 To idx Print #1, strLines(k) Next 'Subroutine Lines If j > 0 Then 'if 0 then Field List file is empty For h = low To high Print #1, " Case " & qot & FieldList(h) & qot Print #1, " ' Code" Print #1, spacex Next End If Print #1, spacex Print #1, " End Select" Print #1, "End Sub" Print #1, spacex Close #1 ' Import the class module Set vbcompo = Application.VBE.VBProjects(ProjectName).VBComponents.Import(ClsPath) ' Verify if the imported module is a class module 'Compile and Save module If vbcompo.Type = vbext_ct_ClassModule Then CreateClassTemplate = True Kill ClsPath Else CreateClassTemplate = False MsgBox "Import failed: Not a class module." End If CreateClassTemplate_Exit: Exit Function NextIndex: idx = idx + 1 Return CreateClassTemplate_Err: MsgBox Err & ": " & Err.Description, , "CreateClassTemplate()" Resume CreateClassTemplate_Exit End Function
Check the VBE navigation pane for the newly created Template Files. They may not appear immediately in the Database navigation pane.
The Wizards's VBA Code is straightforward. The first 33 lines of Code are standard with the change of Object Names and Type declarations inserted at appropriate positions using the Parameters obtained from the ListItems Table.
Next, it checks for the Field Names list file (or the Control Type-related Text File Names given in the ListItems Table) in the TextBoxFieldsList.txt. If Control Names are present in the Text File they are loaded into an Array in memory.
After that, the first 33 VBA Code lines are written into the TempClass.cls Text File. If the Field List/Control Name lines are found in the Array it creates a sample Click Event Subroutine Code within the Select Case . . . Case . . . End Select structure for ready-to-write Event Procedure Code wherever applicable.
This sample Event Subroutine structure can be copied for other Event Procedures like BeforeUpdate(), GotFocus(), and others.
Finally, the TempClass.cls Text File is Imported into the VBE Project's Code Pane. Look for the Class Modules with the _Template Suffix to spot them quickly.
If the Import action is unsuccessful then it will display an Error Message. In that case, you should investigate and find the cause of the Error, correct it, and try again.
You may highlight one or more required Object Template Options from the ListBox and the Wizard creates them quickly. You can rename the Template Modules or Copy the generated Code from the Template Module and Paste it into a separate Class module for normal use. You may modify the Object Names part for use with other types of Control too.
Click the Help Command Button to display the Help Form in your Application Window. The Help Form Image is shown below.
The listItems Table Record ID Enumerations are given below.
Enum ParamID wizTextBox = 1 wizCommandButton = 2 wizComboBox = 3 wizListBox = 4 wizLabel = 5 wizOptionGroup = 6 wizOptionButton = 7 wizCheckBox = 8 wizToggleButton = 9 wizTabControl = 10 End Enum
The Control Type Validating Function Code Listing.
Public Function ControlTypeCheck(ByVal strctl As String) As Long On Error GoTo ControlTypeCheck_Err Dim ctrlType(1 To 10) As String Dim ctrl(1 To 10) As Long Dim j As Integer For j = 1 To 10 Select Case j Case 1: ctrlType(j) = "Label": ctrl(j) = acLabel '100 Case 2: ctrlType(j) = "CommandButton": ctrl(j) = acCommandButton '104 Case 3: ctrlType(j) = "OptionButton": ctrl(j) = acOptionButton '105 Case 4: ctrlType(j) = "CheckBox": ctrl(j) = acCheckBox '106 Case 5: ctrlType(j) = "OptionGroup": ctrl(j) = acOptionGroup '107 Case 6: ctrlType(j) = "TextBox": ctrl(j) = acTextBox '109 Case 7: ctrlType(j) = "ListBox": ctrl(j) = acListBox '110 Case 8: ctrlType(j) = "ComboBox": ctrl(j) = acComboBox '111 Case 9: ctrlType(j) = "ToggleButton": ctrl(j) = acToggleButton '122 Case 10: ctrlType(j) = "TabControl": ctrl(j) = acTabCtl '123 End Select Next For j = LBound(ctrlType) To UBound(ctrlType) If ctrlType(j) = strctl Then ControlTypeCheck = ctrl(j): Exit For Else ControlTypeCheck = 9999 'Error End If Next ControlTypeCheck_Exit: Exit Function ControlTypeCheck_Err: MsgBox Err & ": " & Err.Description, , "ControlTypeCheck()" Resume ControlTypeCheck_Exit End Function
I hope you are enjoying the new approach to coding with reusable VBA code and easier code maintenance, without the need to constantly interfere with the Form Design View. The 'Streamlining Form Module Code in the Standalone Cass Module' also enhances code portability to other projects, offering a significant advantage.
Demo Databases Download
- Reusing Form Module VBA Code for New Projects.
- Streamlining Form Module Code - Part Two.
- Streamlining Form Module Code - Part Three
- Streamlining Form Module Code - Part Four
- Streamlining Form Module Code - Part Five
- Streamlining Form Module Code - Part Six
- Streamlining Form Module Code - Part Seven
- Streamlining Form Module Code - Part Eight
- Streamlining Form Module Code - Part Nine
- Streamlining Form Module Code - Part Ten
- Streamlining Form Module Code - Part Elevan
- Streamlining Report Module Code in Class Module
- Streamlining Module Code Report Line Hiding-13.
- Streamlining Form Module Code Part-14.
- Streamlining Custom Made Form Wizard-15.
- Streamlining VBA Custom Made Report Wizard-16.
- Streamlining VBA External Files List in Hyperlinks-17
- Streamlining Events VBA 3D Text Wizard-18
- Streamlining Events VBA RGB Color Wizard-19
- Streamlining Events Numbers to Words-20
- Access Users Group(Europe) Presentation-21
- The Event Firing Mechanism of MS Access-22
- One TextBox and Three Wrapper Class Instances-23
- Streamlining Code Synchronized Floating Popup Form-24
- Streamlining Code Compacting/Repair Database-25
- Streamlining Code Remainder Popup Form-26
- Streamlining Code Editing Data in Zoom-in Control-27
- Streamlining Code Filter By Character and Sort-28
- Table Query Records in Collection Object-29
- Class for All Data Entry Editing Forms-30
- Wrapper Class Module Creation Wizard-31
- wrapper-class-template-wizard-v2