代码之家  ›  专栏  ›  技术社区  ›  jwoolard

vba中的vlookup问题

  •  0
  • jwoolard  · 技术社区  · 16 年前

    所有的,

    我试图在一个简单的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
    

    有什么想法吗?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Andy    16 年前

    我不太确定你想用“ubrlookup[第3级]”参考来做什么,但正如约瑟夫指出的那样,这就是你做错的地方。

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

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

    如果您要拉出的列是命名范围中的第二列(例如,您所指的[级别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
    

    更新:
    我看过Excel2007,从中可以看到column函数没有作为application.worksheetfunction公开。 你可以在纸上用它 =Column(D4) 但当试图在VBA编辑器中自动完成时,函数不在那里。这可能是因为版本不同,所以现在我将忽略这一点。

    看来你还是在误用第三个论点。如果您真的不想使用数字引用,我们需要找出函数出错的地方。

    一些测试沿着

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

    希望能有助于向您展示它到底在哪里出错——我相信它会反对上述两种观点,但如果它返回一些有用的信息,那么我们可能会更接近您的解决方案。

        2
  •  1
  •   Joseph    16 年前

    把你的功能分成更多的部分。然后调试它并确保每一个部分都按照您期望的方式设置。

    例子:

    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
    

    事实上,就这样,我发现了一些奇怪的事情。你在两个不同的地方使用一个范围,但是在一个地方你在寻找乌尔卢库普,在另一个地方你在寻找乌尔卢库普【3级】,对吗?

        3
  •  1
  •   iDevlop    16 年前

    我被打扰了
    Dim column as Column =
    Application.WorksheetFunction.Column(sheet.Range("UBRLookup[Level 3]"))

    我认为,您应该将列变暗尽可能长,并且可能使用一个不与属性(如lngcol)混淆的变量名。

        4
  •  0
  •   Oorang    16 年前

    本部分: 工作表范围(“UbrLookup[3级]”) 可能是“ubrlookup[级别3]”不是有效的范围名称。

    推荐文章