【问题标题】:Trying to access named tables with VBA to lookup a value尝试使用 VBA 访问命名表以查找值
【发布时间】:2019-03-15 12:43:25
【问题描述】:

我试图在命名表(即列表对象)中找到一个值,但失败得很惨。 我有一个包含与该页面同名的表的页面。到目前为止,我有 3 条工作线可以在描述列中找到单词“Area”并返回行号。这是:

Function CheckArea(ByVal My_Table As String)
     Set Table = Worksheets(My_Table).ListObjects(My_Table)
     Descriptions = Table.ListColumns("Description").Range
     found_cell = Application.Match("Area", Descriptions, 0)

找到该行后,我想访问同一行但不同列“Schem typ”中的信息并返回包含的值。我找不到如何通过命名列和引用行访问表中的单元格。如果应该很简单,但我找不到任何例子。有人可以帮忙吗?

【问题讨论】:

    标签: excel vba listobject


    【解决方案1】:
    Table.ListColumns("Schem Typ").Range.Cells(found_Cell)
    

    【讨论】:

    • 您使用的是DataBodyRange,而OP 使用的是Range。你会落后一排。
    • 谢谢,你完美地回答了我的问题!我仍然想知道为什么它最后不需要“.value”。我确实需要使用 found_cell-1 但这并不困难。
    • @StephenEllwood 不要使用found_cell-1,这是不好的做法。将.DataBodyRange 更改为.Range
    【解决方案2】:

    试试这个

    Dim MyTable As ListObject
    
    Set MyTable = ThisWorkbook.ActiveSheet.ListObjects("Tabla_1")
    
    Dim ZZ As Long
    
    Dim MySearch As String
    
    MySearch = "caca" 'change this whatever you want
    
    On Error GoTo Errores:
    ZZ = Application.WorksheetFunction.Match(MySearch, MyTable.ListColumns(1).Range, 0) - 1 'minus 1 to exclude header. Change 1 for number of column where you are searching
    
    Debug.Print MyTable.DataBodyRange.Cells(ZZ, 2).Value 'Change 2 for number of column you want to obtain
    
    Clear_All:
    Set MyTable = Nothing
    
    Exit Sub
    
    Errores:
    If Err.Number = 1004 Then
        MsgBox MySearch & " not found"
        GoTo Clear_All
    Else
        MsgBox Err.Description
    End If
    

    代码将使用匹配函数来查找值。如果找不到,它会弹出一条消息(我必须承认这不是最好的错误处理)。

    尝试使其适应您的需求。

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多