我正在尝试使用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
由于
史蒂芬
答案 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