是否可以在同一表单的文本框中引用列表框?

Is it possible to reference a listbox in a textbox on the same form?

我有一个无法自动编号的 ID 字段,用作 table 的主键。当我们放入一条新记录时,我们需要将下一条记录按照预先存在且无法更改的两个序列之一进行编号。

我正在尝试这样做:

=IIf([lst_DeviceType]="Cell Phone",DMax("DeviceNum","tbl_Cell_Tab","DeviceNum < 70000")+1,DMax("DeviceNum","tbl_Cell_Tab")+1)

在将用于创建设备编号的字段内。

我们有手机和 tablets,手机的设备从 10000 开始,tablets 的设备从 70000 开始。我需要做的是选择从列表框“Cell Phone”或“Tablet”中生成下一个正确的序列号。 IE。 “Cell Phone”为 10125,“Tablet”为 70725

以上代码返回了#Error

因此我的问题有两个方面:第一,我的代码有问题吗?我在想我没有正确引用列表框,但也许不是这样。或者两个,我不能在文本框本身中这样做吗?

这是文本框中使用的代码,我可以在表单上尝试 OnUpdate, 当我尝试使用此代码将其放置在列表框的 OnUpdate 中时,它崩溃了,因为这是主要选择器:

If Me.lst_DeviceType = "Cell Phone" Then
        Me.txt_DN.Value = DoCmd.RunSQL("SELECT MAX(DeviceNum)+1 FROM tbl_Cell_Tab 
        WHERE DeviceNum < 70000")
Else
        Me.txt_DN.Value = DoCmd.RunSQL("SELECT MAX(DeviceNum)+1 FROM 
        tbl_Cell_Tab") 
End If
    
Me.txt_DN.Locked = True

但我想知道这是否是最好和最简单的方法?

列表框和组合框的行为不同。

对于列表框,从选择中提取值时必须包括列索引:[lst_DeviceType].Column(0)

然后您将需要代码来保存计算值。而不是文本框中的表达式,将文本框绑定到 ID 字段并使用列表框 AfterUpdate 事件:

If IsNull(Me!ID) Then 
    Me!ID = IIf(...)
End If

A​​FAIK,不能使用 DoCmd.RunSQL 到 return 变量的值。这就是域聚合函数的用途。