“无法在循环中获取WorksheetFunction类的VLookup属性”vlookup

时间:2016-02-18 20:47:58

标签: vba excel-vba excel

我会马上说,我是一个整体编码新手。我在学习各种各样的事情的过程中学到了很多东西,而且我一直都在学习。

我现在遇到的问题是使用application.vlookup(...)进行循环。我做了很多搜索,但我放弃了,因为我无法得到任何工作。我从原始代码中删除了.WorksheetFunction部分,因为显然它没有改变任何东西,但至少它没有在找不到值时产生VBA错误并且行为类似于普通函数(给出#N / A)

所以在下面的代码中,我在A列中有我的数据,我需要在另一个工作表的查询中使用vlookup进行转换(并将其放在与数据相同的工作表中,在C列中)。

Sub vlookup() 

Dim wsdata As Worksheet 
Dim lr As Long 
Dim rng As Range 

Set wsdata = ThisWorkbook.Worksheets("Data") 
wsdata.Columns("C").Delete 
wsdata.Range("D1") = "Correct number"
lr = wsdata.Cells(Rows.Count, "A").End(xlUp).Row 
Set rng = wsdata.Range("A1:D" & lr) 

Dim lrQuery As Long, iNr As Long 
Dim wsQuery As Worksheet 
Dim LookUpRange As Range 
Set wsQuery = ThisWorkbook.Sheets("IDMquery") 
lrQuery = wsQuery.Cells(Rows.Count, "A").End(xlUp).Row 
Set LookUpRange = wsQuery.Range("D:F") 

For iNr = 2 To lr 
    wsdata.Cells(iNr, 4).Value = Application.VLookup(wsdata.Cells(iNr, 1).Value, LookUpRange, 3, 0) 
Next iNr 

End Sub

我必须补充说格式化(或者它们是什么)存在一些问题,因为原始数据是外部的。例如。对于“17935”,VarType将给出8(字符串)而不是数字类型。

在电子表格中,使用双一元法很容易修复它,并且以下公式可以正常工作:

=VLOOKUP(--A2,IDMquery!D:F,3,false)

当然我可以使用辅助列并使用它,如果我不能以任何其他方式执行它可能是一个选项,但我更倾向于严格在VBA内。

你们知道这是否可以解决?

干杯!

编辑:顺便说一句,我也在VBA中将A列的格式更改为“0”,但实际上并不想将这些值更改为数字,不确定原因。

0 个答案:

没有答案