【问题标题】:Is it possible to reference a listbox in a textbox on the same form?是否可以在同一表单上的文本框中引用列表框?
【发布时间】:2021-08-20 17:44:30
【问题描述】:

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

我试图这样做:

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

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

我们拥有的是手机和平板电脑,对于手机,设备从 10000 开始,对于平板电脑,从 70000 开始。我需要从列表框中选择“手机”或“平板电脑”导致生成下一个正确的序列号。 IE。 “手机”为 10125,“平板电脑”为 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

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

【问题讨论】:

    标签: vba ms-access listbox


    【解决方案1】:

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

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

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

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

    AFAIK,不能使用 DoCmd.RunSQL 将值返回给变量。这就是域聚合函数的用途。

    【讨论】:

    • 谢谢,正是缺少的列列表,一旦我把它放进去,它就像一个魅力。我什至不认为我需要引用它,但我想它是有道理的。
    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多