在选定行列表框中高级查找关联值

Advanced finding connected value in selected row list box

我的用户表单列表框显示 10 列。所有行都有一个单独的 ListIndex。 我想显示 f.e。在 select 某行后的 Msgbox 值中,单击“显示”按钮。 但是这个值在列表框中是不可用的。所以,我认为所有行都有单独的 ListIndex,我可以使用 VLOOKUP 来查找我的目标。 例如:我 selected 行号。 1 然后 ListIndex 为 1,这是我的查找值。在我的数据库 sheet 中,我有相同的个人 ID 值。 然后当然,我必须声明范围、列数和参数“False”。 理论上,我期待之后的结果,但它不起作用。

我的代码:

  Dim indexno As Long 'this is my delcaration for finding Look up Value
  Dim myVLookupResult As Long 'this is my declaration for VLookup Result
  indexno = ListBoxResult.ListIndex  'my Lookup Value is dynamic and depend of selected row
  myVLookupResult = Application.VLookup(indexno, Worksheets("DataBase").Range("A1:J100"), 5, False)
  MsgBox myVLookupResult 'should display result of VLOOKUP

但结果报错:运行-时间错误:13-类型不匹配。 我想问题出在将 Dim 类型从 int 转换为 string。

有人可以支持我吗?提前致谢!

VLOOKUP 工作表函数的查找值必须与要在其中查找的数据具有相同的数据类型。在您的代码中,查找值是 Long 数据类型。如果您要查找的列中有文本,则将找不到您要查找的数字。因此,您将查找值更改为 Variant,并希望 Excel 能够计算出您想要的结果。但更好的方法是检查您的数据列并查找您实际拥有的值的类型。

接下来,假设您正在寻找一个分配给 Variant 的数字,并且 Excel,因此设法找到该数字的字符串等价物,即函数 return 值,一个文本字符串。在大多数情况下,Excel 在这种情况下相当慷慨,但如果它确实抱怨“数据类型”,那是因为您试图将文本字符串分配给 Long 数据类型的变量。

除此之外,正如@Michal Palko 已经指出的那样,ListBox 的 ListIndex 是基于 0 的。如果工作表中的数字是基于 1 的,则 VLOOKUP 的 return 不会“完全不同”,但它将来自相邻的行,因此出乎意料。

但我想提醒您另一种可能性。如您所知,您可以将许多列加载到列表框中。您可以显示某些列并隐藏其他列,但您可以使用如下代码访问所有列:-

With ListBox1
    Debug.Print .List(.ListIndex, 3)
End With

此代码段将打印出 ListIndex 行中第 3 列的值。您也可以将此值分配给一个变量,也许不需要 VLOOKUP。