Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 是否可以在同一表单的文本框中引用列表框?_Vba_Ms Access_Listbox - Fatal编程技术网

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

Vba 是否可以在同一表单的文本框中引用列表框?,vba,ms-access,listbox,Vba,Ms Access,Listbox,我有一个不能自动编号的ID字段,用作表的主键。当我们放入一个新记录时,我们需要将下一个记录编号为两个预先存在且不能更改的序列之一 我试着这么做: =IIf([lst_DeviceType]="Cell Phone",DMax("DeviceNum","tbl_Cell_Tab","DeviceNum < 70000")+1,DMax("DeviceNum","tbl_Cell_Ta

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

我试着这么做:

=IIf([lst_DeviceType]="Cell Phone",DMax("DeviceNum","tbl_Cell_Tab","DeviceNum < 70000")+1,DMax("DeviceNum","tbl_Cell_Tab")+1)
在将用于创建设备编号的字段内

我们拥有的是手机和平板电脑,对于手机来说,设备起价是10000台,而对于平板电脑来说,起价是70000台。我需要做的是从列表框、手机或平板电脑中进行选择,以生成下一个正确的序列号。手机为10125,平板电脑为70725

上面的代码返回了一个错误

因此,我的问题有两个:第一,我的代码有问题吗?我认为我没有正确地引用列表框,但可能不是这样。或者,我不能在文本框本身中执行此操作吗

这是文本框中使用的代码,我可以尝试对表单进行更新, 当我尝试使用此代码时,它被放置在列表框的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\U DeviceType].Column0

然后需要代码来保存计算值。将textbox绑定到ID字段并在更新事件后使用listbox,而不是textbox中的表达式:

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

AFAIK,无法使用DoCmd.RunSQL向变量返回值。这就是域聚合函数的用途。

谢谢,缺少的是列列表,一旦我把它放进去,它就发挥了巨大的作用。我甚至不认为我需要引用它,但我想这是有道理的。