Watch the video and/or follow the step by step instructions below (this will take about 15 minutes of your time but you will get what you came for!)
Requirements
- This example uses MS Access 2007 but it should also work in previous versions.
- You will need six objects in your database:
- One form: frmMain
- Two combo boxes: The Master combo box: cboProjects and The Slave combo box: cboProjectTasks
- One table: tblProjectsAndTasks
- Two queries: The Master query: qryProjects and The Slave query: qryProjectTasks
- Create a new form and name it frmMain.
- Save the form.
- Create the Master combo box.
- Name it: cboProjects
- Create the Slave combo box.
- Name it: cboProjectTasks
- Save the form.
- Create a table and name it: tblProjectsAndTasks
- Add these FieldNames (and DataTypes):
- TaskID (Autonumber)
- ProjectName (Text)
- TaskName (Text)
- Populate the table.
- In this example the projects are: Alpha, Delta and Gamma.
- And each project has multiple tasks, for example:
- Project Alpha Task 1
- Project Alpha Task 2
- Project Gamma Task 3
- The Master Query should be named: qryProjects
- This query will select unique project names from tblProjectsAndTasks.
- It will be the data source for the master combo box.
- The SQL code for this query is: SELECT DISTINCT ProjectName FROM tblProjectsAndTasks;
- Alternatively, you could use the following SQL code: SELECT ProjectName FROM tblProjectsAndTasks GROUP BY ProjectName;
- Either way, the output should be:
- Project Alpha
- Project Delta
- Project Gamma
- Create a new query and name it: qryProjectTasks
- This query will show tasks related to the project that is selected in cboProjects.
- The SQL code for this query is: SELECT DISTINCT ProjectName, TaskName FROM tblProjectsAndTasks WHERE ProjectName =[forms]![frmMain].[cboProjects].[value];
- At this point, running this query will not return any results because the WHERE clause is looking for the project selected in cboProjects, which is not data bound yet!
- Give cboProjects these properties:
- Row Source: qryProjects
- Row Source Type: Table/Query
- Column Count: 1
- Bound Column: 1
- Give cboProjectTasks these properties:
- Row Source: qryProjectTasks
- Row Source Type: Table/Query
- Column Count: 2
- Column Width: 0";1"
- Bound Column: 2
- The slave combo box needs to be refreshed after each change in the master combo box. The VBA procedure below will refresh the slave combo box.
- This procedure should be tied to the On Change event of the master combo box. Private Sub cboProjects_Change() Me.cboProjectTasks.Requery End Sub
STEP 9: Clearing the Slave Combo Box:
- Refreshing the combo box does not clear the current task selected.
Modify the VBA procedure to clear the combo box:
Private Sub cboProjects_Change()
Me.cboProjectTasks.Requery
Me.cboProjectTasks = ""
End Sub
STEP 10: ENJOY!