在VBA中的VLOOKUP问题

所有,

我正在尝试在简单的VBA函数中使用vlookup,但它不断返回#VALUE!

这里是代码:

Public Function getAreaName(UBR As Integer) As String Dim result As String Dim sheet As Worksheet Set sheet = ActiveWorkbook.Sheets("UBR Report") ' check level 3 then 2 then 4 then 5 result = Application.WorksheetFunction.VLookup(UBR, sheet.Range("UBRLookup"), Application.WorksheetFunction.Column(sheet.Range("UBRLookup[Level 3]")), False) getAreaName = result End Function 

有什么想法吗?

我不太清楚你想用“UBRLookup [Level 3]”的参考做什么,但正如Joseph所指出的那样,你做错了一点。

[不是Excel中命名区域的有效字符。

您引用的列需要是一个数值,即从您定义为命名范围的表格数组开始的偏移量。

如果您想要拉出的列是您命名范围中的第二列(例如,您所指的[level 3]在第二列中),下面应该可以工作。

 Public Function getAreaName(UBR As Integer) As String Dim result As String Dim sheet As Worksheet Set sheet = ActiveWorkbook.Sheets("UBR Report") result = Application.WorksheetFunction.VLookup(UBR, sheet.Range("UBRLookup"), 2, False) getAreaName = result End Function 

更新:
我看了一下Excel 2007,从列表中可以看到列函数没有公开为Application.WorksheetFunction。 你可以在表格中使用它=Column(D4) ,但是当试图在vba编辑器中自动完成时,函数不在那里。 这可能是由于版本的差异,所以现在我将忽略它。

看起来好像你错误地使用了第三个参数。 如果你真的不想使用数字引用,我们需要找出function出错的地方。

一些testing沿线

 Debug.Print Application.WorksheetFunction.Column(D4) Debug.Print sheet.Range("UBRLookup[Level 3]") 

应该有助于告诉你究竟哪里出了问题 – 我相信它会反对上述两个方面,但如果它返回一些有用的信息,那么我们可能会更接近您的解决scheme。

打破你的function了更多的作品。 然后debugging它,并确保每件都按照您的期望设置。

例:

 Public Function getAreaName(UBR As Integer) As String Dim result As String Dim sheet As Worksheet Set sheet = ActiveWorkbook.Sheets("UBR Report") Dim range as Range = sheet.Range("UBRLookup") Dim column as Column = Application.WorksheetFunction .Column(sheet.Range("UBRLookup[Level 3]")) result = Application.WorksheetFunction.VLookup(UBR, range, column, False) getAreaName = result End Function 

事实上,只是这样做,我注意到了一些奇怪的东西。 你在两个不同的地方使用了一个范围,但是在一个地方你正在寻找UBRLookup,在另一个地方你正在寻找UBRLookup [Level 3],这是正确的吗?

我感到不安
Dim column as Column =
Application.WorksheetFunction.Column(sheet.Range("UBRLookup[Level 3]"))

你应该像Dim列一样长,我想,也许使用一个不会与属性混淆的variables名称,比如lngCol。

这部分: sheet.Range(“UBRLookup [Level 3]”)被怀疑为“UBRLookup [Level 3]”不是有效的范围名称。