Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA中的VLOOKUP问题_Vba_Excel - Fatal编程技术网

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

全部,

我试图在一个简单的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 = 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来判断。