如何从列表框中填充文本框?

时间:2019-09-17 09:10:28

标签: excel vba ms-access

我有一个组合了员工编号和姓名的列表框。因此,您看到的是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时,它应该从数据库中获取数据并填充文本框。

1 个答案:

答案 0 :(得分:0)

代码正在尝试将连接的字符串0001-john doe与EmpNumber字段值0001匹配。选项:

  1. 将列表框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

  1. 从串联字符串中提取EmpNumber Left(Me.lbxNextOfKinEmployeeNumber, 4)

  2. 使用LIKE和通配符
    WHERE '" & Me.lbxNextOfKinEmployeeNumber & "' LIKE [EmpNumber] & '*'"