MS Access 如何编写通用Sub过程实现子窗体控件属性设置
通用多窗体/子窗体控件启用实现方案
实现思路
- 原有逻辑可直接扩展支持子窗体,无需单独编写子窗体专属过程
- 子窗体在主窗体中属于
SubForm类型控件,只需新增对该类型的判断,递归调用过程即可处理子窗体内的所有控件 - 一套逻辑同时支持独立窗体、主窗体+所有嵌套子窗体的批量控件操作
改进后的通用VBA代码
Public Sub EnableReadOnlyControls(theForm As Form) Dim i As Integer ' 遍历窗体所有控件 For i = 0 To theForm.Controls.Count - 1 ' 匹配指定Tag的控件 If theForm.Controls(i).Tag = "EnableForReadOnly" Then ' 处理文本框 If TypeOf theForm.Controls(i) Is TextBox Then theForm.Controls(i).Locked = False theForm.Controls(i).Enabled = True ' 处理组合框 ElseIf TypeOf theForm.Controls(i) Is ComboBox Then theForm.Controls(i).Locked = False theForm.Controls(i).Enabled = True End If End If ' 递归处理子窗体内的控件 If TypeOf theForm.Controls(i) Is SubForm Then EnableReadOnlyControls theForm.Controls(i).Form End If Next i End Sub
调用方法
- 主窗体+所有嵌套子窗体一起处理,直接在主窗体OnOpen事件中调用:
EnableReadOnlyControls Me
- 仅单独处理某个指定子窗体,调用时传入子窗体的Form对象即可:
' 替换为你实际的子窗体控件名称 EnableReadOnlyControls Me.YourSubFormControlName.Form
内容的提问来源于stack exchange,提问作者Shelley
相关产品推荐
相关产品推荐

