Office中国论坛/Access中国论坛

标题: 今年Access版块的第2帖——选项卡控件的妙用 [打印本页]

作者: roych    时间: 2022-8-22 19:14
标题: 今年Access版块的第2帖——选项卡控件的妙用
众所周知,选项卡控件通常只能作为二级筛选。但在特殊场景下,其实是可以作为三级筛选的。操作步骤只需要3步:
1、新建窗体,插入一个选项卡,添加适当的页控件,在每个页控件下添加适当的标签控件。
2、添加一个子窗体控件(比如,child),绑定数据源。
3、添加适当的VBA代码。最终效果如下所示:
[attach]64381[/attach]
按惯例,还是要贴一段代码的:
  1. Sub Page_Click(pg As Page)
  2.    
  3.     Dim lbl As Label
  4.     Dim ctrl As Control
  5.     Dim rst As New ADODB.Recordset
  6.     Dim strSQL As String
  7.     Dim i As Long
  8.    
  9.     strSQL = "select distinct ID from tbl_page_data where Year([date])=" & pg.Caption
  10.     rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  11.    
  12.     i = 0
  13.    
  14.     If rst.RecordCount > 0 Then
  15.         
  16.         Do Until rst.EOF
  17.         Set lbl = pg.Controls(i)
  18.         '格式化标签。仅显示使用的标签。
  19.         lbl.BackStyle = 1
  20.         lbl.SpecialEffect = 1
  21.         lbl.BackColor = RGB(51, 160, 44)
  22.         lbl.ForeColor = RGB(255, 255, 255)
  23.         lbl.TextAlign = 2
  24.         lbl.FontWeight = 900
  25.         lbl.Caption = rst(0)
  26.         lbl.OnClick = "=Label_Click([" & pg.Name & "], [" & lbl.Name & "])"
  27.             i = i + 1
  28.             rst.MoveNext
  29.         Loop
  30.     End If
  31.    
  32.     rst.Close
  33.    
  34. End Sub

  35. Function Label_Click(ByVal pg As Page, ByVal lbl As Label)
  36.     Dim qry As DAO.QueryDef
  37.     Dim strSQL As String

  38.     Set qry = CurrentDb.QueryDefs("qry_page")
  39.     strSQL = "SELECT *  FROM tbl_page_data where Year([date])=" & pg.Caption & " and ID=" & lbl.Caption
  40.     qry.SQL = strSQL
  41.     qry.Close
  42.    
  43.     Me.child_data.SourceObject = "查询.qry_page"
  44.     Me.child_data.Requery
  45.    
  46. End Function

  47. Private Sub Form_Load()
  48.     Dim rst As New ADODB.Recordset
  49.     Dim strSQL As String
  50.     Dim i As Long
  51.     Dim tabs As TabControl
  52.     Dim pg As Page
  53.    
  54.     Set tabs = Me.tabs
  55.    
  56.     strSQL = "SELECT distinct Year([date]) AS data_year FROM tbl_page_data"
  57.     rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  58.    
  59.     i = 0
  60.    
  61.     Do Until rst.EOF
  62.         Set pg = tabs.Pages(i)
  63.         pg.Caption = rst(0)
  64.         pg.OnClick = "[事件过程]"
  65.         Call Page_Click(pg)
  66.         i = i + 1
  67.         rst.MoveNext
  68.     Loop
  69.     rst.Close
  70.    
  71.    
  72. End Sub
复制代码
代码简要说明:
在窗体加载控件时,通过打开记录集,读取年份数据,将它赋值给对应的页控件的标题(Captain),并生成页控件的单击事件。
关键代码:
pg.OnClick = "[事件过程]"
Call Page_Click(pg)
表示将页控件的OnClick属性设置为“[事件过程]”英文版注意改成[Event Procedure])

主要用于单击页控件时,将每个产品ID赋值给隶属于该页控件的标签(label)的标题,同时对标签进行格式化。

主要用于单击标签时,对子窗体控件的数据进行筛选。核心代码……额,应该算全部吧。
先通过打开已建立的查询,然后通过页控件和标签控件的标题作为参数传入,修改查询的SQL语句。
最后将查询组件传递给子窗体控件的源对象。




最后一点:想知道附件在哪里的话,回复一下,我就告诉你。


作者: 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