设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2825|回复: 5

[模块/函数] 众里寻他千百度——遍历其它窗体上的控件

[复制链接]
发表于 2019-7-31 10:12:48 | 显示全部楼层 |阅读模式
一直很好奇,为什么有人想要遍历窗体上所有控件。一般情况下,个人觉得这是一个伪需求。例如,做权限设计的话,根本没必要遍历控件,毕竟窗体上实现权限控制粒度细分无非若干个按钮,在录入界面上,文本框、标签的个数往往是远远超过按钮数。就那么几个按钮,手动建表输入不行吗?
再如,刚刚发现论坛里有人提及,动态引用窗体控件以赋值。当然,这个版友大概是忘记打开窗体了,结果报错。
其实早前有人在群里问及这个事情,便写了一个模块发到群里了。不过,既然再次有版友提及,那么倒不如做个示例,供大家参考吧。正如诗云:“众里寻他千百度,蓦然回首,那人却在程序报错处”。
按惯例先上代码:
  1. Private Sub Command0_Click()
  2.     Dim frm As Form
  3.     Dim strData As String
  4.     Dim accObj As AccessObject
  5.     Dim ctl As Control
  6.    
  7.     For Each accObj In CurrentProject.AllForms
  8.         DoCmd.OpenForm accObj.Name
  9.         Set frm = CurrentProject.AllForms.Application.Forms(accObj.Name)
  10.         If frm.Name <> Me.Name Then
  11.             frm.Visible = False
  12.             For Each ctl In frm.Controls
  13.                 strData = ctl.Name & "," & strData
  14.             Next
  15.             Me.txtTest.Value = Me.txtTest.Value & frm.Name & ":" & Left(strData, Len(strData) - 1) & vbCrLf
  16.             strData = ""
  17.             DoCmd.Close acForm, frm.Name
  18.         End If
  19.     Next
  20. End Sub
复制代码
代码很简单,所以就不再注释了。大体是先定义好AcceObject控件(这也是一个很奇怪的东西,allforms返回的竟然不是forms集合,而是AcceObject),然后将AcceObject传递给form对象,最后打开form,遍历里面的控件,读取控件名,赋值给当前文本框并输出。

需要注意的是,一定要加上If frm.Name <> Me.Name Then这部分。这是因为打开窗体时,Me应该是当前激活的窗体,如果没有这一句,那么在当前激活的窗体里找不到Me.txtTest控件,必然会报错。其他则不再赘述。有问题的地方请回复本帖。

本帖子中包含更多资源

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

x

评分

参与人数 2经验 +35 收起 理由
access新新新手 + 15 感谢帮助
5988143 + 20 (其它)优秀教程、原创内容、以资鼓励、其.

查看全部评分

点击这里给我发消息

发表于 2019-7-31 10:57:32 | 显示全部楼层
赞!!
回复

使用道具 举报

点击这里给我发消息

发表于 2019-7-31 21:56:16 | 显示全部楼层
好示例,赞!
回复

使用道具 举报

发表于 2019-8-1 09:10:57 | 显示全部楼层
附件已损坏?麻烦重新上传一下,谢谢!
 楼主| 发表于 2019-8-6 09:58:35 | 显示全部楼层
ynjxw 发表于 2019-8-1 09:10
附件已损坏?麻烦重新上传一下,谢谢!

没毛病啊。可能是你的系统问题。

本帖子中包含更多资源

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

x
发表于 2019-8-28 08:55:21 | 显示全部楼层
allforms返回的竟然不是forms集合,而是AcceObject)问题就在这里
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-28 22:20 , Processed in 0.100131 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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