高级查找选定行列表框中的连接值



我的用户表单列表框中显示了10列。所有行都有一个单独的ListIndex。我想在选择某一行并点击按钮"后,在Msgbox值中显示f.e;显示";。但该值在列表框中不可用。所以,我认为所有的行都有单独的ListIndex,我可以使用VLOOKUP来查找我的目标。例如:我选择了第1行,那么ListIndex就是1,这就是我的Look-up Value。在我的数据库表中,我有相同的个人ID值。然后当然,我必须声明范围、列数和参数"错误";。从理论上讲,我预计在那之后会有结果,但这并不奏效。

我的代码:

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设法找到了该数字的等价字符串,即函数返回值,一个文本字符串。在大多数情况下,Excel在这种情况下是相当慷慨的,但如果它真的抱怨";"数据类型";那么这是因为您试图将文本字符串分配给Long数据类型的变量。

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

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

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

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

最新更新