循环访问 MS Access 子窗体并获取列可见性
Posted
技术标签:
【中文标题】循环访问 MS Access 子窗体并获取列可见性【英文标题】:Loop through MS Access subform and get column visibility 【发布时间】:2020-04-20 15:40:13 【问题描述】:我正在使用一个包含多个页面的选项卡控件,每个页面都存储一个具有不同列数的子表单。每个子表单都必须显示一些基本信息,并且按需显示更多信息。每个子表单的OnLoad
事件定义了哪一列可见或不可见。
作为导出工具的一部分,我正在尝试构建一个循环,该循环返回每个字段 name、字段 caption 和 visibility列作为布尔值。
Dim strAns As String
Dim ctl As Control
Dim sfrm As SubForm
Set sfrm = Forms![frm_Main]![frm_Sub]
For Each ctl In sfrm.Controls
strAns = ctl.Name & "_" & ctl.Caption & "_" & ctl.columnVisible
Debug.Print strAns
Next ctl
目前它只使用ctl.Name
运行,但我觉得这可能不是我用例的正确语法。它在新行中返回每个字段名称以及它下面的文本框的名称,所以基本上这是我需要的信息的两倍。
有人知道如何到达其他两个属性吗?
【问题讨论】:
您是否在项目资源管理器中查看了控件的可用字段?我认为.Visible
应该可以工作。但是 VBE 中的项目资源管理器会帮助您,VBA Access 的控制对象的文档也会帮助您——尽管有时缺少 MSDN 文档。
.Visible
为每个字段返回 True
:(
可能需要引用字段而不是控件。并使用 ColumnHidden 而不是 ColumnVisible。评论docs.microsoft.com/en-us/previous-versions/office/developer/…
【参考方案1】:
对于那些有同样问题的人,这里有一个可能的解决方法!与此同时,我发现我的特定用例不一定需要.Caption
。
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rstQry As DAO.Recordset
Dim fldQry As DAO.Field
Set db = CurrentDb
Set qdf = db.QueryDefs("qrySource_frmSub")
Set rstQry = qdf.OpenRecordset
Dim dictHidden As New Scripting.Dictionary
For Each fldQry In rstQry.Fields
dictHidden.Add fldQry.Name, False
Next fldQry
qdf.Close
Dim frm As SubForm
Set frm = Forms![frm_Main]![frm_Sub]
For Each key In dictHidden.Keys
dictHidden(key) = frm.Controls.item(key).ColumnHidden
Next key
【讨论】:
以上是关于循环访问 MS Access 子窗体并获取列可见性的主要内容,如果未能解决你的问题,请参考以下文章