【发布时间】:2021-04-09 19:15:19
【问题描述】:
我的用户表单列表框中有 10 列。所有行都有一个单独的 ListIndex。 我想显示 f.e.在选择某行并单击“显示”按钮后,在 Msgbox 值中。 但是这个值在列表框中是不可用的。所以,我认为所有行都有单独的 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结果真的是数字(长)吗?如果您让声明处于打开状态会发生什么? (删除“只要”)
-
这有点帮助,但现在结果是错误的。普通公式中的 VLookUp 和 VBA 中的 VLookUp(参数相同)结果完全不同。
-
结果错误是什么意思?您能否举例说明您的数据和列表框的外观?
-
我会尝试解释。因此,在我的工作表中,我有带有 ID 号的 A 列和带有一些参考值的 E 列。例如:对于 ID=1,此值为 PB123。如果查找值为 1,公式 VLookup 可以找到值“PB123”。在列表框中也显示正常。但是,如果我选择 ID=1 的行并使用此代码,则返回值不是“PB123”。完全不同。顺便提一句。我在所选行中为显示 ID 编号添加了额外的按钮,此功能始终为真。
-
你有没有考虑到 ListIndex 是从 0 开始的?所以 ID=1 是 0,ID=2 是 1... 你试过 indexno = ListBoxResult.ListIndex + 1 吗?
标签: excel vba vlookup userform