vba excel vlookup:存储数组中的查找值,excel中的查找表,数组的输出值

我使用vlookup在vba中填充数组。

数组(InfArray)是一个〜100行×3列的数组。 数组的第一列已经填充了整数值。 这些整数值对应于一个名字。 在我的Excel表格中,我有一个表格,其中列出了每个整数ID和相应的名称。 所以我想使用vlookup函数检查id整数,并用实际名称填充数组的第二列。

这里是我必须分配第二列(原始错误代码)的代码声明:

For y = 1 To UBound(InfArray,1) Set InfArray(y,2) = Application.WorksheetFunction.VLookup(InfArray(y,1), NameSheet.Range("B2:C244"), 2, False).Value Next y 

它给我一个对象variables或块variables没有设置错误。

当我运行后在代码文本上移动时,我看到了

 NameSheet.Range("B2:C244") 

是对象variables或块variables未设置错误所在的位置。 这真是令人困惑。 我把一个

 Debug.Print NameSheet.Name 

在错误之前的代码中,它给了我正确的Excel表单的名称。 所以代码必须在正确的工作表中查找,但不知何故,它没有得到范围…?

我迷路了,请帮忙

编辑:错误是在代码中的错字

 NameSheet.Range("B2:C244") 

本来应该

 NamesSheet.Range("B2:C244") 

请注意名称末尾的's'

它现在与编辑build议

工作代码行:

 For y = 1 To UBound(InfArray,1) InfArray(y,2) = Application.WorksheetFunction.VLookup(InfArray(y,1), NamesSheet.Range("B2:C244"), 2, False) Next y 

道歉的stoopid错误。

感谢您的帮助。

摆脱Set语句。 它只能用于对象variables。

但也…

在循环中穿越VBA和Excel之间的边界100次并不是有效的devise。 抓住你的表一次,把它放在一个VBA数组中,然后通过这个额外的数组来查找查找值会更好。

从VLOOKUP函数中删除.Value 。 Range.Value属性不是VLOOKUP的一部分。

 For y = 1 To UBound(InfArray,1) InfArray(y,2) = Application.VLookup(InfArray(y,1), NameSheet.Range("B2:C244"), 2, False) Next y 

我也已经减less到Application.VLookup这是所有必要的。