excel - 高级查找选定行列表框中的连接值
问题描述
我在我的用户表单列表框中显示 10 列。所有行都有一个单独的 ListIndex。选择某行并单击“显示”按钮后,我想在 Msgbox 值中显示 fe。但是这个值在列表框中是不可用的。所以,我认为所有行都有单独的 ListIndex,我可以使用 VLOOKUP 来查找我的目标。例如:我选择了行号。1 然后 ListIndex 为 1,这是我的查找值。在我的数据库表中,我有相同的个人 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 的数字,因此,设法找到该数字的等效字符串,这将是函数的返回值,一个文本字符串。在大多数情况下,Excel 在这种情况下非常慷慨,但如果它确实抱怨“数据类型”,那是因为您试图将文本字符串分配给 Long 数据类型的变量。
除此之外,正如@Michal Palko 已经指出的那样,ListBox 的 ListIndex 是从 0 开始的。如果您的工作表中的数字是基于 1 的,则 VLOOKUP 的返回不会“完全不同”,但它将来自相邻行,因此是意外的。
但我想提醒你另一种可能性。如您所知,您可以将许多列加载到列表框中。您可以显示一些列并隐藏其他列,但您可以使用如下代码访问它们:-
With ListBox1
Debug.Print .List(.ListIndex, 3)
End With
此代码段将打印出ListIndex
. 您也可以将此值分配给变量,并且可能不需要 VLOOKUP。
推荐阅读
- loops - 在子文件夹中的所有 html 文件上迭代运行 inscript 命令行工具
- git - 如何强制用 git repo 替换本地 repo
- python - Google AdWords API - AdGroupAdError CANNOT_CREATE_DEPRECATED_ADS
- swift - 将单元格添加到动态 UITableView 数据源 | 迅速
- r - 合并列:合并列有截断的数字
- javascript - 如何从一个承诺到另一个承诺中获得额外的数据?
- laravel - 如何在laravel和chartjs中修复这个错误数组到字符串的转换?
- c# - 类访问方法
- javascript - 如何在成功登录后重定向并阻止页面而不登录reactjs?
- node.js - “使用 Google 注册/登录”的 Nodejs 后端例程是什么?