首页 > 解决方案 > 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 个表。

我感谢我能得到的所有帮助。如果有人想尝试一下,这是我的访问文件(名称为波斯语)。

访问文件的 Google Drive 链接

编辑:

我现在按照@June7 的建议使用 DLookUp 函数。它适用于静态字段(如日期),但我似乎无法让代码适用于动态字段。这是新代码:

[code and stuff]
   ⋮
   Me.Controls("Feeder" & i).ControlSource = "=DLookup(""[fld.Name]"", ""[feedersLoadingTBL]"", ""[time] =1"")"
   ⋮
[code and stuff]

""[fld.Name]"" 是将在循环中更改的部分。这是 feedersLoadingTBL 表的样子:

喂料器装载TBL

标签: vbams-accessms-access-2013data-entry

解决方案


不要将动态引用放在引号内 - 连接。可以使用撇号代替双引号。

Me.Controls("Feeder" & i).ControlSource = "=DLookup('" & fld.Name & "', '[feedersLoadingTBL]', '[time] =1')"


推荐阅读