vba - MS Access #Name?动态设置控制源的文本框错误
问题描述
这是我之前的问题的后续,虽然我设法完成了我的想法(仍在争论我是否选择了最好的方法),但我现在有一个关于动态设置控制源的问题我的文本框。
当我使用 VBA 代码设置控制源时,我得到#Name?除非我将表格添加到表单的记录源中,否则会出错。问题是,我正在处理大量数据并将我的所有表添加到记录源将导致“定义的字段过多”错误。
我正在使用以下代码来设置控制源:
Set rst = db.OpenRecordset("feedersTBL", dbOpenDynaset)
rst.MoveFirst
Do While Not rst.EOF
If Me!subID = rst!stationID Then
i = i + 1
Me.Controls("Feeder" & i).Visible = True
Set rst2 = db.OpenRecordset("feedersLoadingTBL", dbOpenDynaset)
'Binding the textboxes.
For Each fld In rst2.Fields
If fld.Name = rst!feederId Then
Me.Controls("Feeder" & i).ControlSource = rst!feederId
Debug.Print Me.Controls("Feeder" & i).ControlSource
Exit For
End If
Next
rst.MoveNext
Loop
请注意,feedersLoadingTBL 表有 400 多列,我已将它们分成 4 个表。
我感谢我能得到的所有帮助。如果有人想尝试一下,这是我的访问文件(名称为波斯语)。
编辑:
我现在按照@June7 的建议使用 DLookUp 函数。它适用于静态字段(如日期),但我似乎无法让代码适用于动态字段。这是新代码:
[code and stuff]
⋮
Me.Controls("Feeder" & i).ControlSource = "=DLookup(""[fld.Name]"", ""[feedersLoadingTBL]"", ""[time] =1"")"
⋮
[code and stuff]
""[fld.Name]"" 是将在循环中更改的部分。这是 feedersLoadingTBL 表的样子:
解决方案
不要将动态引用放在引号内 - 连接。可以使用撇号代替双引号。
Me.Controls("Feeder" & i).ControlSource = "=DLookup('" & fld.Name & "', '[feedersLoadingTBL]', '[time] =1')"
推荐阅读
- android - 在 Android 11 上添加到主屏幕功能
- excel - Excel中有没有办法根据单元格样式对单元格进行排序?
- python - 将标签添加到 OneLineAvataListItem Python kivy
- c++ - 命名空间范围在 C++ 中如何工作?
- php - 来自子文件夹 MVC PHP 的访问控制器
- c# - 测试结束时未调用 Specflow.Autofac IDisposable
- javascript - 使用严格相等运算符而不是普通相等运算符获得未定义
- python - Django - POST 端点以更新多个表。返回包含所有相关数据的响应
- javascript - 如何在不包含节点模块文件夹的情况下将我的 React 项目上传到 GitHub
- git - 我需要合并 git repo 的 2 个分支,但浅分支历史导致与子模块 ref 发生冲突(即使我加深了历史)