|
众所周知,选项卡控件通常只能作为二级筛选。但在特殊场景下,其实是可以作为三级筛选的。操作步骤只需要3步:
1、新建窗体,插入一个选项卡,添加适当的页控件,在每个页控件下添加适当的标签控件。
2、添加一个子窗体控件(比如,child),绑定数据源。
3、添加适当的VBA代码。最终效果如下所示:
按惯例,还是要贴一段代码的:
- Sub Page_Click(pg As Page)
-
- Dim lbl As Label
- Dim ctrl As Control
- Dim rst As New ADODB.Recordset
- Dim strSQL As String
- Dim i As Long
-
- strSQL = "select distinct ID from tbl_page_data where Year([date])=" & pg.Caption
- rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
-
- i = 0
-
- If rst.RecordCount > 0 Then
-
- Do Until rst.EOF
- Set lbl = pg.Controls(i)
- '格式化标签。仅显示使用的标签。
- lbl.BackStyle = 1
- lbl.SpecialEffect = 1
- lbl.BackColor = RGB(51, 160, 44)
- lbl.ForeColor = RGB(255, 255, 255)
- lbl.TextAlign = 2
- lbl.FontWeight = 900
- lbl.Caption = rst(0)
- lbl.OnClick = "=Label_Click([" & pg.Name & "], [" & lbl.Name & "])"
- i = i + 1
- rst.MoveNext
- Loop
- End If
-
- rst.Close
-
- End Sub
- Function Label_Click(ByVal pg As Page, ByVal lbl As Label)
- Dim qry As DAO.QueryDef
- Dim strSQL As String
- Set qry = CurrentDb.QueryDefs("qry_page")
- strSQL = "SELECT * FROM tbl_page_data where Year([date])=" & pg.Caption & " and ID=" & lbl.Caption
- qry.SQL = strSQL
- qry.Close
-
- Me.child_data.SourceObject = "查询.qry_page"
- Me.child_data.Requery
-
- End Function
- Private Sub Form_Load()
- Dim rst As New ADODB.Recordset
- Dim strSQL As String
- Dim i As Long
- Dim tabs As TabControl
- Dim pg As Page
-
- Set tabs = Me.tabs
-
- strSQL = "SELECT distinct Year([date]) AS data_year FROM tbl_page_data"
- rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
-
- i = 0
-
- Do Until rst.EOF
- Set pg = tabs.Pages(i)
- pg.Caption = rst(0)
- pg.OnClick = "[事件过程]"
- Call Page_Click(pg)
- i = i + 1
- rst.MoveNext
- Loop
- rst.Close
-
-
- End Sub
复制代码 代码简要说明:
在窗体加载控件时,通过打开记录集,读取年份数据,将它赋值给对应的页控件的标题(Captain),并生成页控件的单击事件。
关键代码:
pg.OnClick = "[事件过程]"
Call Page_Click(pg)
表示将页控件的OnClick属性设置为“[事件过程]”英文版注意改成[Event Procedure])
主要用于单击页控件时,将每个产品ID赋值给隶属于该页控件的标签(label)的标题,同时对标签进行格式化。
- Label_Click(ByVal pg As Page, ByVal lbl As Label)函数
主要用于单击标签时,对子窗体控件的数据进行筛选。核心代码……额,应该算全部吧。
先通过打开已建立的查询,然后通过页控件和标签控件的标题作为参数传入,修改查询的SQL语句。
最后将查询组件传递给子窗体控件的源对象。
- Form_Load事件中,OnClick为"[事件过程]";Page_Click事件中,用的是表达式。返回值为:=Label_Click([pg], [lbl])。对应的pg和lbl为各页控件和标签控件对象(并非控件名称字符串)。
- 由于标签用的是表达式,因此必须使用函数(而不是Sub),否则报错。
最后一点:想知道附件在哪里的话,回复一下,我就告诉你。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|