具有动态范围的VBA查找

时间:2016-07-19 03:52:30

标签: excel vba excel-vba

snap of first data range

我正在寻找运行VBA查找功能的帮助。我设置了两个搜索功能,用于查找数据的开始和结束,并将其设置为vlookup的范围。我遇到问题的部分似乎是正确设置范围。我有行的整数值,列应保持标准。数据将在B列和I列之间。

当前显示的代码似乎不是在范围区域中设置代码的边界,而是返回那些courser导致错误的单元格的值。在此先感谢:)

有人知道我会设置范围/修复vlookup吗? 当前错误:无法获取工作表函数类的vlookup属性

PotatoePriceEuro.value和lengthinputtext.value是userform上的文本框输入。 Truecheck是模块内部早期的全局变量,它包含在前两个搜索函数中搜索的关键字。

该程序的目标是搜索工作表并查找由userform中的文本框(truecheck中的字符串)给出的特定字符串的第一次和最后一次出现,然后将其设置为vlookup的范围。然后,vlookup从userform(lengthinputtext.value)上的另一个文本框传递一个数字术语,然后在C列中搜索该数字,并返回其左侧的单元格值。请注意,用于设置范围的关键字位于B列中,要在该范围内搜索的长度将位于C列中

Private Sub optionselect()
    Dim LastLocation As Range
    Dim FirstLocation As Range
    Dim FirstRow As Long
    Dim LastRow As Long
    Dim SearchVal As String
    Dim returnval As Integer

    Set FirstLocation = Range("B:B").Find(truecheck, LookIn:=xlValues, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows)

    Set LastLocation = Range("B:B").Find(truecheck, LookIn:=xlValues, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, searchdirection:=xlPrevious)

    FirstRow = FirstLocation.Row
    LastRow = LastLocation.Row

    PotatoPriceEuro.Value = Application.WorksheetFunction.VLookup(LengthInputText.Value, _ 
    Range(Cells(FirstRow, 3), Cells(LastRow, 9)), 2, False)

End Sub

1 个答案:

答案 0 :(得分:0)

最终的解决方案最终让我放弃使用vlookup,而是使用Find函数,然后将其偏移以检索信息,看起来像这样(仍然没有正确清理)。我不知道为什么我花了这么长时间才放弃vlookup以及为什么它不起作用。

Private Sub optionselect()
    Dim LastLocation As Range
    Dim FirstLocation As Range
    Dim FirstRow As Long
    Dim LastRow As Long
    Dim SearchVal As String
    Dim returnval As Integer
    Dim lastlocationoff As Variant
    Dim rng As Range
    Dim resultfind As Range
    Dim Columoff As Integer

    lengthvlook = LengthInputText.Value

    Set FirstLocation = Worksheets("Bucket  Elevator"_ 
    ).Range("B:B").Find(truecheck, LookIn:=xlValues, lookat:=xlWhole _ 
    , searchorder:=xlByRows)
    Set LastLocation = Worksheets("Bucket Elevator" _ 
    ).Range("B:B").Find(truecheck, LookIn:=xlValues, lookat:=xlWhole _ , 
    searchorder:=xlByRows, searchdirection:=xlPrevious)

    FirstRow = FirstLocation.Row
    LastRow = LastLocation.Row

    Set resultfind = Worksheets("Bucket Elevator").Range("C" & FirstRow & _ 
    ":C" & LastRow).Find(LengthInputText.Value, LookIn:=xlValues, _ 
    lookat:=xlWhole, searchorder:=xlByRows)

    PektusPriceEuro = Worksheets("bucket elevator").Cells(resultfind.Row, 4)

End Sub