VBA查找和匹配功能出现问题

时间:2014-09-22 19:10:33

标签: excel vba excel-vba

我正在尝试创建一个宏,它将搜索A列以查找"奖励:"。我希望这个存储,以便我以后可以在复制粘贴功能中使用该行。每个奖励实例之间都有空单元格:当我为任一行变量使用消息框时,我返回0 这就是我到目前为止所拥有的

Dim StartReport As Range
Dim EndReport As Range
Dim StartRow As Integer
Dim EndRow As Integer
Set StartReport = Worksheets("Grant Expense").Range("A:A").Find("Award:", LookAt:=xlPart)
Set EndReport = Worksheets("Grant Expense").Range("C:C").Find("Total Costs", LookAt:=xlPart)
StartRow = StartReport.Row
EndRow = EndReport.Row
Range(Cells(1, StartRow), Cells(17, EndRow)).Select

2 个答案:

答案 0 :(得分:0)

由于某种原因,Find函数有时会返回任何内容,如果这是单元格中唯一的文本。 确保所有过滤器均已关闭,因此您可以添加:

If Worksheets("Grant Expense").AutoFilterMode Then 
    Worksheets("Grant Expense").ShowAllData
End If

但我认为你可能混淆了细胞。它是第一行,然后是列,所以:

Range(Cells(StartRow, 1), Cells(EndRow, 17)).Select

我找到了解决方案,我不知道为什么,但这可以正常工作:

Set StartRow = (Worksheets("Grant Expense").Range("A:C").Find("Award:"))
Set endrow = (Worksheets("Grant Expense").Range("C:D").Find("Total Costs"))

然而。查找将在范围中最左边的单元格后开始,这意味着您的第一个奖项不是开始。要解决此问题,请在工作簿中插入另一行。并记住使用正确的范围:

Range(Cells(StartRow, 1), Cells(EndRow, 17)).Select

答案 1 :(得分:0)

哈哈哈。我很笨您没有为您正在搜索的值指定参数名称。将"Award:"更改为What:="Award:"

为了使其绝对万无一失,您可以使用以下命令更改整个find命令:

.Find(What:="Award:", After:=Sheets("Grant Expense").Range("A1"), LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

然后您可以使用.FindNext查找下一次出现。