设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2812|回复: 16
打印 上一主题 下一主题

[Access本身] 今年Access版块的第2帖——选项卡控件的妙用

[复制链接]
跳转到指定楼层
1#
发表于 2022-8-22 19:14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
众所周知,选项卡控件通常只能作为二级筛选。但在特殊场景下,其实是可以作为三级筛选的。操作步骤只需要3步:
1、新建窗体,插入一个选项卡,添加适当的页控件,在每个页控件下添加适当的标签控件。
2、添加一个子窗体控件(比如,child),绑定数据源。
3、添加适当的VBA代码。最终效果如下所示:

按惯例,还是要贴一段代码的:
  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
复制代码
代码简要说明:
  • 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),否则报错。



最后一点:想知道附件在哪里的话,回复一下,我就告诉你。
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 2经验 +17 收起 理由
wang1950317 + 5 (V币)优秀原创教程、管理建议(1-5分)
tmtony + 12 (V币)优秀原创教程、管理建议(1-5分)

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2022-8-22 21:28:39 | 只看该作者
坐沙发,支持分享!
3#
发表于 2022-8-23 13:12:31 | 只看该作者
谢谢老师分享
4#
发表于 2022-8-23 15:47:40 | 只看该作者
谢谢分享。
这个控件我比较少用到,总是弹窗了事。
5#
发表于 2022-8-27 08:31:14 来自手机 | 只看该作者
123456
回复

使用道具 举报

6#
发表于 2022-8-27 08:37:14 来自手机 | 只看该作者
123456
回复

使用道具 举报

7#
发表于 2022-8-27 08:37:35 来自手机 | 只看该作者
123456
回复

使用道具 举报

点击这里给我发消息

8#
发表于 2022-8-27 14:35:55 | 只看该作者
谢谢roych老师,开眼界。
9#
发表于 2022-8-30 09:22:35 | 只看该作者
看看一下
回复

使用道具 举报

10#
发表于 2022-9-3 10:59:43 | 只看该作者
roych 的作品必看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-4 03:39 , Processed in 0.106475 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表