如何在VBA Access列表框中显示完整条目而非自动编号ID
解决Access列表框显示ID而非全名及组合框赋值问题
一、修正列表框显示全名的设置
- 打开
listEmployee列表框的属性窗口:- 修改行来源为关联查询,把AM表的全名关联进来(假设员工表存储AM标识的字段是
AMID,AM表主键是ID,姓名字段是AMNAME):SELECT 员工表.*, AM表.AMNAME FROM 员工表 LEFT JOIN AM表 ON 员工表.AMID = AM表.ID; - 调整列数:新增1列对应AMNAME字段,比如原列数为12,现在设为13。
- 设置列宽:把原来对应
AMID的列宽度设为0(隐藏ID列),AMNAME列设为合适宽度(比如5cm),格式类似0cm;...;5cm(按列顺序对应)。
- 修改行来源为关联查询,把AM表的全名关联进来(假设员工表存储AM标识的字段是
二、调整AfterUpdate代码的列索引
因为列表框行来源新增了AMNAME列,原代码中Column(6)可能对应AMID字段,需要改成AMNAME所在列的索引(Access列索引从0开始)。比如如果AMNAME是第12列(索引11),代码修改为:
Private Sub listEmployee_AfterUpdate() cmbActiveYesNo.Value = listEmployee.Column(1) cmbSite.Value = listEmployee.Column(2) txtEID.Value = listEmployee.Column(3) txtMSID.Value = listEmployee.Column(4) txtName.Value = listEmployee.Column(5) cmbAMName.Value = listEmployee.Column(11) ' 替换为AMNAME列的正确索引 txtHireDate.Value = listEmployee.Column(7) cmbEmpType.Value = listEmployee.Column(8) cmbPrimJobFunction.Value = listEmployee.Column(9) cmbProcessName.Value = listEmployee.Column(10) txtDM.Value = listEmployee.Column(12) ' 其他列索引同步调整 End Sub
三、确保组合框的绑定与显示设置正确
打开cmbAMName组合框的属性窗口:
- 行来源设为:
SELECT ID, AMNAME FROM AM表; - 绑定列设为
1(对应AM表的ID字段,确保保存到员工表的是ID值) - 列数设为
2 - 列宽设为
0cm;5cm(隐藏ID列,仅显示全名) - 控件来源绑定到员工表的
AMID字段(确保组合框与表字段关联)
四、建立表间关系
打开Access的关系窗口,将员工表的AMID字段与AM表的ID字段建立一对多关系,勾选「实施参照完整性」。这能规范数据关联,避免后续显示和存储错误。
内容的提问来源于stack exchange,提问作者Shiela
相关产品推荐
相关产品推荐

