我正在使用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
它给了我一个Object变量或With block变量没有设置错误。
当我在运行后光标移动代码文本时,我看到了
NameSheet.Range("B2:C244")
是对象变量或块变量未设置错误的位置。这真令人困惑。我放了一个
Debug.Print NameSheet.Name
在错误之前的代码中,它为我提供了相关Excel工作表的正确名称。所以代码必须在正确的工作表中查找,但不知何故它没有得到范围......?
我迷路了,请帮忙
编辑:错误是代码中的拼写错误
NameSheet.Range("B2:C244")
应该是
NamesSheet.Range("B2:C244")
注意NameS末尾的's'
现在可以使用建议的编辑
工作代码行:
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错误道歉。
谢谢你的帮助。
答案 0 :(得分:2)
摆脱Set语句。它只应与对象变量一起使用。
但也......
在循环中将VBA和Excel之间的边界穿孔100次并不是一种有效的设计。抓住你的表一次,将它放在一个VBA数组中,然后只需旋转这个额外的数组来查找查找值会好得多。
答案 1 :(得分:1)
从VLOOKUP function删除.Value
。 Range.Value property不属于VLOOKUP。
For y = 1 To UBound(InfArray,1)
InfArray(y,2) = Application.VLookup(InfArray(y,1), NameSheet.Range("B2:C244"), 2, False)
Next y
我也减少到Application.VLookup
,这就是必要的。