VBA查找和匹配函数存在问题

VBA查找和匹配函数存在问题,vba,excel,Vba,Excel,我正在尝试创建一个宏,它将搜索列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

我正在尝试创建一个宏,它将搜索列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

有时,出于某种原因,如果单元格中只有文本,则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

哈哈哈。我很笨。您没有为要搜索的值指定参数名称。将
“奖励:
更改为
什么:=“奖励:

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

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

然后您可以使用
.FindNext
查找下一个事件。

如果使用内置的“查找”对话框,您会得到任何结果吗?我会。它循环我正在寻找的单元格,但我需要在其中包含冒号,否则,“奖励”将出现在其他单元格中。如果其他任何人有此问题,我将在合并的单元格中执行查找。如果我将范围设置为所有合并的单元格,则find函数可以工作。在本例中,是Range(“A:C”)。我在excel中尝试了find函数,并返回了我要查找的结果。这就是您的建议吗?因此“查找”按钮正在工作,但在vba中使用“查找”功能时不起作用?正确。我还发现我的问题之一是使用thisworkbook而不是用于Wb的activeworkbook。但搜索结果仍然是“无结果”。我在一个单元格中添加了一个冒号,并使用完整字符串进行搜索,结果返回。您是否使用了断点来确保潜艇甚至击中了集合?如果它从未进入集合,那么它当然什么都不是。“你是否使用断点来确保潜艇甚至击中集合?”我不理解这个问题。我补充说,但我仍然得到“什么都没有”set StartReport=Wb.Worksheets(“Grant Expense”).Range(“A:A”).Find(What:=“Award:”,LookIn:=xlValues,LookAt:=xlPart)如果看不到实际的工作手册,这个问题几乎不可能回答。这可能失败的原因有很多,在这里要花很长时间才能全部解决。你能和我共享你的工作簿吗?是的,我该怎么做?将文件发布在文件共享网站上,并在此处提供链接。目的是将每个报告放到自己的工作表上,我可以按项目ID命名。我必须在每个报告上插入一些公式,因此我希望将它们放在单独的工作表上。