Access VBA如何循环遍历顺序命名的表单文本框执行非空判断
Access VBA 按规则遍历顺序命名文本框的实现方案
Access 窗体的所有控件都挂载在窗体的Controls集合中,支持通过控件名字符串直接索引获取对应控件对象,完全可以实现带序号动态控件名的循环遍历,不需要逐个静态引用控件。
直接适配你现有命名规则的实现代码
注意要先处理文本框空值的情况,空文本框的Value属性为Null,直接和数值比较会触发类型不匹配错误,用Nz函数做空值转换即可:
Dim i As Integer Dim targetCtl As Control For i = 1 To 6 ' 拼接控件名,从当前窗体的Controls集合中取对应文本框 Set targetCtl = Me.Controls("hardness_measurement_" & i) ' 空值按0计算,仅当值大于0时执行操作 If Nz(targetCtl.Value, 0) > 0 Then ' 此处写入你需要执行的自定义逻辑,调用控件值直接取targetCtl.Value即可 End If Next i
注意事项
- 拼接控件名时要和你实际的控件命名完全匹配:如果你的控件名没有下划线(比如是
hardness_measurement1而非hardness_measurement_1),就把拼接字符串调整为"hardness_measurement" & i,命名不一致会触发“找不到控件”的运行时错误。 - 如果后续需要调整遍历的控件数量,直接修改循环的起止范围即可,不需要逐个新增/删除控件的判断逻辑,维护成本远低于逐个写静态判断。
可选优化方案(不依赖序号命名)
如果后续可能调整控件命名、增减控件,可以给需要遍历的6个文本框设置相同的Tag属性值(比如统一设为hardness_measure),直接遍历全窗体控件按Tag筛选,不需要依赖序号规则:
Dim ctl As Control For Each ctl In Me.Controls ' 筛选出类型为文本框、且Tag为预设标识的控件 If ctl.ControlType = acTextBox And ctl.Tag = "hardness_measure" Then If Nz(ctl.Value, 0) > 0 Then ' 写入自定义执行逻辑 End If End If Next ctl
这种写法的优势是后续调整控件名、调整控件顺序都不需要修改代码,只要对应控件的Tag属性保持一致就能被正常遍历。
内容的提问来源于stack exchange,提问作者Lmack
相关产品推荐
相关产品推荐

