【问题标题】:Compare two Listbox for matching values比较两个列表框的匹配值
【发布时间】:2021-02-23 04:15:38
【问题描述】:

我正在尝试一种简单的方法来为特定工作分配员工。

拥有Table1(员工技能),并拥有Table2(职位要求)。我希望能够检查员工是否具备足够的技能来胜任某项工作。

这样,我有两个列表框,Listbox1 作为 Table1,Listbox2 作为 Table2。我有以下代码来查找 Listbox1 和 Listbox2 中特定行的索引

Dim i As Integer
Dim j As Integer
With ListBox1
.MultiSelect = fmMultiSelectSingle
.ListIndex = -1
.MultiSelect = fmMultiSelectMulti
For i = 0 To .ListCount - 1
 For j = 0 To .columnCount - 1
 If ComboBox2.Value = .Column(j, i) Then
 .ListIndex = i
 .Selected(i) = True
 End If
 Next j
Next i
End With

在 Listbox1 和 2 中识别出员工的行和工作的行后,我想检查它们之间的匹配值,并在 Listbox3 上显示匹配的值。我目前有以下代码,但仅适用于具有一列的列表框:

Dim i As Long, j As Long
Dim fMatch As Long

For i = 1 To ListBox1.ListCount
  fMatch = False
  For j = 1 To ListBox2.ListCount
    If ListBox1.List(i - 1) = ListBox2.List(j - 1) Then
      fMatch = True
      Exit For
    End If
  Next j
  If fMatch Then
    ListBox3.AddItem ListBox1.List(i - 1)
  End If
Next i

我也在尝试获取最适合 listbox3 中角色的员工列表。

【问题讨论】:

    标签: excel vba


    【解决方案1】:
    'Identify and select employee and job rows in ListBox1 and ListBox2
    ...
    'Display skill matches from Course1..3 columns in ListBox3
    ShowMatches ListBox1.ListIndex, ListBox2.ListIndex
    ...    
    Private Sub ShowMatches(EmployeeRow As Long, JobRow As Long)
          Dim i As Long, j As Long, course
          If EmployeeRow = -1 Then Exit Sub
          If JobRow = -1 Then Exit Sub
          ListBox3.Clear
          'skip column 0 as it doesn't contain skill information
          For i = 1 To UBound(ListBox1.List, 2)
            For j = 1 To UBound(ListBox2.List, 2)
              course = ListBox1.List(EmployeeRow, i)
              If course = ListBox2.List(JobRow, j) Then
                ListBox3.AddItem course
              End If
            Next j
          Next i
        End Sub
    

    【讨论】:

    • 您好,非常感谢您的回复。你如何声明变量“课程”?它也一样长吗?我是否也应该按原样添加此代码,并在命令按钮上写下以下内容:“call ShowMatches”?
    • course 变量具有默认的 Variant 类型,因为它可以在迭代列表框列时存储日期和字符串。你应该写类似Call ShowMatches(EmployeeRow, JobRow) 或只是ShowMatches EmployeeRow, JobRow。
    • 我在运行它时收到“无法获取列表属性。无效参数”。我将 (.xlsm) 文件放在这里,我可能会遗漏一些东西。 drive.google.com/file/d/1qWf1DNQwkimQLBsr13ato6SMSQtEjYCx/…
    • 我已经修复了检测列数的错误(请参阅更新的答案)。
    • 非常感谢,运行起来像手套一样。只需确保课程名称完全相同。我会接受你的回答!是否可以获得问题第二部分的代码?有一个命令按钮来选择一份工作,并让 listbox3 按顺序列出最有资格的人。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多