Excel vba,在我从表中获取的文本框中显示值

时间:2014-07-22 16:53:38

标签: excel vba

我有一张表格,范围从F2到G230。 F列是员工编号,G列是员工姓名。我正在尝试制作一个简单的程序,为员工注册食品订单并将数据导出到表格中。一切正常,除非我从下拉列表中选择一名员工,我希望员工编号出现在文本框中。

以下是我的全部代码:

Private Sub cmdbutton_add_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("listi yfir skráningar")

'find first empty row in database
iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious,          LookIn:=xlValues).Row + 1

'check for a Name number
If Trim(Me.combobox_name.Value) = "" Then
Me.combobox_name.SetFocus
MsgBox "Please complete the form"
Exit Sub
End If

'copy the data to the database
ws.Cells(iRow, 1).Value = Me.textbox_staffnr.Value
ws.Cells(iRow, 2).Value = Me.combobox_name.Value
ws.Cells(iRow, 3).Value = Me.combobox_rettir.Value
ws.Cells(iRow, 4).Value = Me.textbox_verd.Value
ws.Cells(iRow, 5).Value = Me.textbox_dags.Value

MsgBox "Komið :)", vbOKOnly + vbInformation, "Komið"
'clear the data
Me.combobox_name.Value = ""
Me.combobox_name.SetFocus
Unload Me
End Sub

Private Sub Cmdbutton_close_Click()
Unload Me
End Sub


Private Sub ComboBox1_Change()

End Sub

Private Sub combobox_name_Change()

textbox_staffnr.Value = Application.VLookup(Me.combobox_name.Value,     Sheet3.Range("F2:G230"), 1, 0)

End Sub

Private Sub combobox_rettir_Change()

textbox_verd.Value = Application.VLookup(Me.combobox_rettir.Value,     Sheet3.Range("C2:D23"), 2, 0)

End Sub

Private Sub Name_Click()

End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub textbox_staffnr_Change()



End Sub

Private Sub textbox_verd_Change()

End Sub

Private Sub UserForm_Initialize()
textbox_dags.Value = Format(Date, "dd/mm/yyyy")
End Sub

And here Im getting error:

Private Sub combobox_name_Change()

textbox_staffnr.Value = Application.VLookup(Me.combobox_name.Value,     Sheet3.Range("F2:G230"), 1, 0)

End Sub

请帮忙。

1 个答案:

答案 0 :(得分:0)

编辑:来自用户的评论:

  

数字在第1列,名称在第2列

在这种情况下,Vlookup不起作用,您需要使用Index / Match或Range.Find.Offset。我个人更喜欢在VBA中使用Range.Find.Offset:

Dim rngFound as Range

Set rngFound = Sheet3.Range("G2:G230").Find(Me.combobox_name.Value, , xlValues, xlWhole)
If not rngFound is Nothing Then textbox_staffnr.Value = rngFound.Offset(0, -1).Text