在VBA中的.Match函数中引用Excel列表框项的值

时间:2016-10-06 16:25:23

标签: excel vba excel-vba listbox

我希望在VBA中的.Match函数中使用所选Listbox项的字符串值 - 我需要值' 1'要输入到选择值与特定列中的#34; A:A"列中的值匹配的行。

我认为我能够做的是为所选的ListBox项使用.value参数,但这似乎要么出错,要么给我一个布尔响应,这不是我所追求的(我在项目的实际字符串值之后。)

我已经循环遍历所有项目以将Selected参数设置为True,然后我逐个遍历列表以添加' 1'到正确的范围。

以下是我认为可以使用的代码(但是没有,它会引发错误"运行时错误' 13':类型不匹配"这可能是到.Value不是一个字符串。

For x = 0 To Me.CreditsEmployeesListBox.ListCount - 1
Me.CreditsEmployeesListBox.Selected(x) = True
Next

For i = 0 To Me.CreditsEmployeesListBox.ListCount - 1
If Me.CreditsEmployeesListBox.Selected(i) = True Then
    employeeRow = WorksheetFunction.Match(Me.CreditsEmployeesListBox(i).Value, IndexSheet.Range("A:A"), 0)
    IndexSheet.Range(Cells(employeeRow, showCodeColumn).Address).Value = 1
End If
Next

在' employeeRow = ...'线。在这里,我基本上试图问:

employeeRow = WorksheetFunction.Match(<value of the currently referenced ListBox item>,IndexSheet.Range("A:A"),0)

VBA是否可以实现这一点,或者我是以错误的方式解决这个问题?

由于 马特

1 个答案:

答案 0 :(得分:0)

作为&#34;混合物&#34;回答(因为有多个问题)试试这个:

For x = 0 To Me.CreditsEmployeesListBox.ListCount - 1
  Me.CreditsEmployeesListBox.Selected(x) = True
Next

Dim employeeRow As Variant
For i = 0 To Me.CreditsEmployeesListBox.ListCount - 1
  If Me.CreditsEmployeesListBox.Selected(i) = True Then
    employeeRow = Application.Match(Me.CreditsEmployeesListBox.List(i), IndexSheet.Columns(1), 0)
    If IsNumeric(employeeRow) Then IndexSheet.Cells(employeeRow, showCodeColumn).Value = 1
  End If
Next

这也应该避免VBA错误。

如果还有任何问题,请问:)