我有一个列表,其中包含Col A中的Employee ID,Col B中的First Name,Col C中的Last Name。我需要编写一个宏,使用户表单输入名字和姓氏,然后从那里输出将合适的员工ID写入Col E中第一个未使用的单元格,然后循环回用户表单。
我已经知道如何构建Userform并且其上有两个按钮,一个显示“Next”,另一个显示“End”。 “下一步”按钮将循环用户窗体,“结束”将关闭用户窗体。
计划将Userform命名为Userform1,并将输入框命名为“FirstName”和“LastName”。所以我知道要从宏中引用这些,我会调用Userform1.FirstName.Value或Userform1.LastName.Value,具体取决于我目前需要哪个部分。
我不确定的部分是如何匹配两个变量,然后向左看ID。我可以将ID Col移动到名称Cols之后,如果这有帮助,但我仍然不确定如何写,以便两个名称必须匹配。
对于错误捕获,我计划使用MsgBox状态“没有匹配的条目”。如果该人不在列表中。但是我不确定如何处理超级不可能但可能的情况,如果名单上的两个人有相同的名字。所以对此的任何建议将不胜感激。
我正在使用Excel 2013。
答案 0 :(得分:2)
尝试使用下一个按钮
Private Sub NextButton_Click()
Dim emptyRow As Long
Dim matchFound As Boolean
Dim matchCount As Long
Dim matchRow As Long
Dim i As Long
'Determine the first empty cell in column E
If Cells(1, 5).Value = "" Then
emptyRow = 1
Else
emptyRow = Cells(Columns(5).Rows.Count, 5).End(xlUp).Row + 1
End If
matchFound = False
matchCount = 0
matchRow = 0
'Loop through all of rows that have an employee id
For i = 1 To Cells(Columns(1).Rows.Count, 1).End(xlUp).Row
If (UCase(FirstName.Value) = UCase(Cells(i, 2).Value)) And (UCase(LastName.Value) = UCase(Cells(i, 3).Value)) Then
matchCount = matchCount + 1
matchRow = i
matchFound = True
End If
Next
'Alert user of any errors
If matchFound = False Then
MsgBox ("There are no matching entries")
ElseIf matchCount > 1 Then
MsgBox ("There were multiple matches")
Else
'If there are no errors add employee id to the list
Cells(emptyRow, 5).Value = Cells(matchRow, 1).Value
emptyRow = emptyRow + 1
End If
'Clear the userform
FirstName.Text = ""
LastName.Text = ""
End Sub
如果有多场比赛,我不确定采取什么样的最佳行动方案,所以现在我只是提供了一条消息来提醒你。更改代码以跟踪每个匹配的行而不仅仅是最后一行并不困难。
答案 1 :(得分:0)
我建议使用vlookup,因为它基本上围绕你的问题设计。它接受一个输入,在一列中找到它,然后在不同的列中输出相同的行。使输出依赖于匹配相同输出的两个vlookup应该不难。
http://www.howtogeek.com/howto/13780/using-vlookup-in-excel/