Office中国论坛/Access中国论坛
标题:
今年Access版块的第2帖——选项卡控件的妙用
[打印本页]
作者:
roych
时间:
2022-8-22 19:14
标题:
今年Access版块的第2帖——选项卡控件的妙用
众所周知,选项卡控件通常只能作为二级筛选。但在特殊场景下,其实是可以作为三级筛选的。操作步骤只需要3步:
1、新建窗体,插入一个选项卡,添加适当的页控件,在每个页控件下添加适当的标签控件。
2、添加一个子窗体控件(比如,child),绑定数据源。
3、添加适当的VBA代码。最终效果如下所示:
[attach]64381[/attach]
按惯例,还是要贴一段代码的:
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
复制代码
代码简要说明:
Form_Load()事件
在窗体加载控件时,通过打开记录集,读取年份数据,将它赋值给对应的页控件的标题(Captain),并生成页控件的单击事件。
关键代码:
pg.OnClick = "[事件过程]"
Call Page_Click(pg)
表示将页控件的OnClick属性设置为“[事件过程]”英文版注意改成
[Event Procedure]
)
Page_Click(pg)事件
主要用于单击页控件时,将每个产品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),否则报错。
最后一点:想知道附件在哪里的话,回复一下,我就告诉你。
作者:
tmtony
时间:
2022-8-22 21:28
坐沙发,支持分享!
作者:
yanwei82123300
时间:
2022-8-23 13:12
谢谢老师分享
作者:
accben
时间:
2022-8-23 15:47
谢谢分享。
这个控件我比较少用到,总是弹窗了事。
作者:
灰太郎
时间:
2022-8-27 08:31
123456
作者:
灰太郎
时间:
2022-8-27 08:37
123456
作者:
灰太郎
时间:
2022-8-27 08:37
123456
作者:
wang1950317
时间:
2022-8-27 14:35
谢谢roych老师,开眼界。
作者:
gaofei186
时间:
2022-8-30 09:22
看看一下
作者:
ynjxw
时间:
2022-9-3 10:59
roych 的作品必看
作者:
luohua
时间:
2022-9-26 17:56
使劲回复使劲回复!!!
作者:
wuwu200222
时间:
2022-10-12 15:23
谢谢老师
作者:
liumporite
时间:
2023-1-2 13:13
下了看看 谢谢
作者:
shallwxw
时间:
2023-3-14 23:43
感谢分享!
作者:
smilingkiss
时间:
2023-3-20 10:47
好好好,正好学习学习
作者:
xxk8077
时间:
2023-4-14 08:14
太深奥了
作者:
yanlj518
时间:
2023-6-9 15:05
谢谢老师分享
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3