如何将Access表单文本框数据批量填充到同名报表文本框
问题原因与修复方案
你的代码核心问题是ctl.Name被写在了双引号内部,VBA不会将其解析为当前循环的控件名称变量,而是会直接尝试读取表单frmlisteannuelle上名为ctl.name的控件,找不到对应控件就会运行报错。
修正后代码(放在报表的「打开(Open)」事件中即可)
方案1:绑定控件源(后续表单值变化时报表值会同步更新)
Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ' 动态拼接控件名称,ctl.Name放在引号外做变量解析 ctl.ControlSource = "=[Forms]![frmlisteannuelle]![" & ctl.Name & "]" End If Next
方案2:直接赋值(报表打开后值固定,不会随表单变化)
如果不需要后续同步表单的修改,可以直接给文本框赋值,无需修改控件源:
Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ctl.Value = Forms!frmlisteannuelle.Controls(ctl.Name).Value End If Next
注意事项
- 打开报表前必须保证表单
frmlisteannuelle处于打开状态,否则会读取失败显示#错误 - 如果存在不需要填充的文本框,可以额外加名称判断逻辑过滤,比如跳过名称带特定前缀的控件
内容的提问来源于stack exchange,提问作者user17404720
相关产品推荐
相关产品推荐

