VBA中的VLOOKUP问题
全部, 我试图在一个简单的VBA函数中使用vlookup,但它不断返回#值 代码如下:VBA中的VLOOKUP问题,vba,excel,Vba,Excel,全部, 我试图在一个简单的VBA函数中使用vlookup,但它不断返回#值 代码如下: 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 = App
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
有什么想法吗?把你的功能分解成更多的部分。然后调试它,确保每一部分都按照您期望的方式设置 例如:
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[级别3],对吗?将你的功能分解成更多的部分。然后调试它,确保每一部分都按照您期望的方式设置 例如:
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],对吗?我不太确定你试图用“UBRLookup[Level 3]”引用做什么,但正如Joseph所指出的,这是你做错的地方
[
不是Excel中指定范围的有效字符
要引用的列必须是一个数值,即从定义为命名范围的表数组开始的偏移量
如果您要拉出的列是您指定范围内的第二列(例如,您所指的[level 3]在第二列中),则以下内容应该可以使用
更新:我看过Excel 2007,从中可以看出column函数没有作为Application.WorksheetFunction公开。 您可以在带有
=列(D4)
的工作表上使用它,但当尝试在vba编辑器中自动完成时,该函数不存在。这可能是由于版本不同,因此我现在将忽略此问题
看起来你仍然在错误地使用第三个参数。如果你真的不想使用数字引用,我们需要找出函数哪里出了问题
按照以下方法进行的一些测试:
Debug.Print Application.WorksheetFunction.Column(D4)
Debug.Print sheet.Range("UBRLookup[Level 3]")
希望能够帮助您准确地了解问题所在-我相信它会反对上述两种做法,但如果它返回一些有用的信息,那么我们可能离您的解决方案更近了一步。我不太确定您打算如何处理“UBRLookup[Level 3]”参考,但正如约瑟夫所指出的,这是你做错的地方
[
不是Excel中指定范围的有效字符
要引用的列必须是一个数值,即从定义为命名范围的表数组开始的偏移量
如果您要拉出的列是您指定范围内的第二列(例如,您所指的[level 3]在第二列中),则以下内容应该可以使用
更新:我看过Excel 2007,从中可以看出column函数没有作为Application.WorksheetFunction公开。 您可以在带有
=列(D4)
的工作表上使用它,但当尝试在vba编辑器中自动完成时,该函数不存在。这可能是由于版本不同,因此我现在将忽略此问题
看起来你仍然在错误地使用第三个参数。如果你真的不想使用数字引用,我们需要找出函数哪里出了问题
按照以下方法进行的一些测试:
Debug.Print Application.WorksheetFunction.Column(D4)
Debug.Print sheet.Range("UBRLookup[Level 3]")
希望能够帮助您准确地了解问题所在-我相信它会反对上述两种做法,但如果它返回一些有用的信息,那么我们可能离您的解决方案更近了一步。我对Dim column as column=
Application.WorksheetFunction.Column(sheet.Range(“UBRLookup[Level 3]”)
我认为,您应该尽可能长地隐藏列,并可能使用一个变量名,以免与属性混淆,如lngCol。我被Dim column as column=
Application.WorksheetFunction.Column(sheet.Range(“UBRLookup[Level 3]”)
我认为,您应该尽可能长地对列进行模糊处理,并可能使用一个不会与属性混淆的变量名,如lngCol。这部分:sheet.Range(“UBRLookup[Level 3]”)是可疑的,因为“UBRLookup[Level 3]”不是有效的范围名。这部分:sheet.Range(“UBRLookup[Level 3]”)是可疑的“UBRLookup[Level 3]”不是有效的范围名称。我正在使用excel 2007 tablename[column]语法和column()函数自动确定偏移量。但是,我将尝试手动设置。更新了上述内容。是否在您的excel 2007版本上运行调试。打印注释?我正在使用excel 2007 tablename[column]语法和column()函数自动确定偏移量。但是,我将使用手动设置进行尝试。更新了上述内容。是否在您的Excel 2007版本上运行调试。打印注释?我很惊讶原始版本甚至可以编译。我得到“用户定义类型未定义”在Excel 2003中,我在Excel 2007对象模型eitherRight中没有看到Column对象。它应该是:dim lngCol,只要lngCol=sheetx.range(“xxx”)。Column我很惊讶原始版本甚至可以编译。我得到了“用户定义类型未定义”在Excel2003中,我在Excel2007对象模型eitherRight中没有看到列对象。它应该是:dim lngCol,因为long lngCol=sheetx.range(“xxx”)。column@iDevlop这是air代码。一个例子向他展示了我所说的分解碎片的意思。我不知道是什么应用程序。WorksheetFunction.Column()返回这是一个猜测,由OP来判断。@iDevlop这是air代码。一个示例向他展示了我所说的分解碎片的意思。我不知道是什么应用程序。WorksheetFunction.Column()返回这是一个猜测,由OP来判断。