如何从列表框中填充文本框?
Posted
技术标签:
【中文标题】如何从列表框中填充文本框?【英文标题】:How to populate a text box from a listbox? 【发布时间】:2019-09-17 09:10:28 【问题描述】:我有一个包含员工编号和姓名的列表框。所以你看到的是 0001-John Doe 但现在当我尝试使用列表框信息填充文本框时它不起作用。
我如何填充我的列表框:
Private Sub UserForm_Initialize()
Dim conn As New ADODB.Connection
Dim rsst As New ADODB.Recordset
dbPath = Sheets("Info").Range("a2").Value
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath
rsst.Open "SELECT EmpNumber,EmpFirstName,EmpSurname FROM Employees;", _
conn, adOpenStatic
With rsst
.MoveFirst
Do Until .EOF
Me.lbxNextOfKinEmployeeNumber.AddItem rsst.Fields(0).Value & " - " & rsst.Fields(1) & " " & " " & rsst.Fields(2) & " "
rsst.MoveNext
Loop
End With
End Sub
我的视图按钮是什么:
Private Sub btnNextOfKinSelect_Click()
Dim CNOK As New ADODB.Connection
Dim RNOK As New ADODB.Recordset
txtNextofKinEmployeeNumber.Enabled = False
'btnEditNextOfKin.Visible = True
If lbxNextOfKinEmployeeNumber.ListIndex = -1 Then
MsgBox "Please Select a Employee Number"
Else
dbPath = Sheets("Info").Range("a2").Value
CNOK.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath
RNOK.Open "SELECT * FROM EmployeeNextOfKin Where EmpNumber ='" &
Me.lbxNextOfKinEmployeeNumber & "'", _
CNOK, adOpenStatic
RNOK.MoveFirst
txtNextofKinEmployeeNumber.Value = RNOK("EmpNumber")
txtNextOfKinName.Value = RNOK("NextOfKinName")
txtNextOfKinSurname.Value = RNOK("NextOfKinSurname")
txtContactNumber.Value = RNOK("NextofKinContactNumber")
txtContactAddressLine1.Value = RNOK("NextofKinAddress")
txtNextofKinCity.Value = RNOK("NextofKinCity")
txtCellNumber.Value = RNOK("NextofKinCellNumber")
End If
End Sub
我想要的是当我选择 0001-John Doe 时,它应该从我的数据库中获取数据并填充我的文本框。
【问题讨论】:
如果在 RNOK.Movefirst 处下断点,然后使用 F8,这些值是否真的在字段中? so 在 Where EmpNumber ='" & Me.lbxNextOfKinEmployeeNumber & "' 它确实返回了整个 0001- john doe 的值 但在 RNOK.movefirst 上中断 你不需要那行,当你打开一个记录集时,你总是在第一条记录上,除非它是空的 【参考方案1】:代码正在尝试将串联字符串 0001-john doe
与 EmpNumber 字段值 0001
匹配。选项:
-
将列表框 RowSource 设置为多列
Do Until rsst.EOF
With Me.lbxNextOfKinEmployeeNumber
.ColumnCount = 2
.ColumnWidths = "0;2"
.AddItem rsst(0) & ";" & rsst(0) & " - " & rsst(1) & " " & rsst(2)
End With
rsst.MoveNext
Loop
如果用户更喜欢键入名称,请不要在串联字符串中包含 EmpNumber。姓氏在前可能更合适:
.AddItem rsst(0) & ";" & rsst(2) & ", " & rsst(1)
可能想要对记录集进行排序:ORDER BY EmpSurname
从串联字符串中提取 EmpNumber
Left(Me.lbxNextOfKinEmployeeNumber, 4)
使用 LIKE 和通配符WHERE '" & Me.lbxNextOfKinEmployeeNumber & "' LIKE [EmpNumber] & '*'"
【讨论】:
以上是关于如何从列表框中填充文本框?的主要内容,如果未能解决你的问题,请参考以下文章