VBA查找功能不起作用

时间:2017-06-14 00:03:38

标签: excel vba excel-vba

我正在尝试使用vba代码搜索另一个工作表中的值并返回行号,以便可以用字符串填充相邻的单元格。问题是“findrow”返回空白。当我尝试运行并将鼠标悬停在该部分上时,“。find(findrng)”显示为14/01/17。

如果我将Findrng更改为诸如“Home”之类的单词并在文件中输入此代码,则代码将返回正确的行号,因此问题必须与日期有关。任何人都可以帮忙使用.Find for dates?

Private Sub Enter_Click()
Dim FindWor As Range
Dim Findrng As String
Dim FindRowNumber As Long

Findrng = Me.Date1
With Worksheets("Data").Range("$A:$A")
Set FindWor = .Find(what:=Findrng)
FindRowNumber = FindWor.Row

.Cells(FindRowNumber, 2).Value = Me.Event1
End With

 End Sub

由于

史蒂芬

3 个答案:

答案 0 :(得分:2)

Find方法有许多可选参数,它们没有预定义的默认值,而是默认使用上次使用的值,通过代码或通过Excel用户界面。 您应该明确声明所有参数,以获得一致和预期的行为

Range.Find方法定义为:

Function Find(What, Optional After, Optional LookIn, Optional LookAt, Optional SearchOrder, Optional SearchDirection As XlSearchDirection = xlNext, Optional MatchCase, Optional MatchByte, Optional SearchFormat) As Range

您需要为这些参数的所有提供值,即使它们已被标记为Optional

如果无法找到匹配项,Find方法也会返回Nothing引用,因此您需要在检查Nothing属性之前测试Row。例如:

Set FindRow = .Find(Find)
If Not FindRow Is Nothing Then
    FindRowNumber = FindRow.Row
End If

答案 1 :(得分:1)

您必须Dim FindRowNumber为

答案 2 :(得分:1)

这:

Set FindWor = .Find(what:=Findrng)

Findrng是一个字符串,其中的数据是日期,因此肯定不返回任何内容。

如果您不确定您的代码会搜索天气字符串或日期,请先找到值为字符串,如果找不到则将其转换为日期并再次搜索

    Set FindWor = .Find(what:=Findrng)

    if  FindWor  is nothing  then
           Set FindWor = .Find(what:=cdate(Findrng))
    end if