所以当我尝试在VBA中编程时,我在微软网站(https://msdn.microsoft.com/en-us/library/office/ff839746.aspx)上发现了这个
表达式.Find(What,After,LookIn,LookAt,SearchOrder,SearchDirection,MatchCase,MatchByte,SearchFormat) expression表示Range对象的变量。
内容:要搜索的数据。可以是字符串或任何Microsoft Excel数据类型。
我想让我的代码找到第一个带有" Date"数据类型在一定范围内,临时。
Dim temp As Range, next_date As Range
temp = Range("A63:A70")
Set next_date = temp.Find(Date)
Debug.Print (next_date)
但是我一直没有设置"对象变量"错误,我认为这意味着它无法在范围内找到日期。该范围内肯定有一个日期,但当我将鼠标悬停在" Date"我键入了.Find(),我意识到它显示了今天的日期。
我认为此代码可能会尝试查找今天的范围内的日期。但我只是想让它找到一个带有通用" Date"数据类型,有没有办法在不指定具体日期的情况下执行此操作?谢谢!
答案 0 :(得分:2)
我不确定您是否可以使用Find()
查找任何日期类型的值。我想你需要指定你要搜索的实际日期。例如:
Set FoundCell = Range("A1:A10").Find (what:="7/18/1998")
另一种选择是一个简单的循环:
Sub FindNextDate()
Dim val As Range
For Each val In Range("A1:A10")
If IsDate(val) Then
Debug.Print "Date: " & val & " found at cell: " & val.Address
Exit Sub
End If
Next val
End Sub
答案 1 :(得分:0)
temp
是一个对象Range
。您必须使用set
- > What does the keyword Set actually do in VBA?
我认为您无法使用.Find()
查找数据类型,但是,您可以尝试查找表示我们正在处理日期的格式:
Sub tt()
Dim temp As Range, next_date As Range
Set temp = Range("A60:A70")
Application.FindFormat.NumberFormat = "m/d/yyyy"
Set next_date = temp.Find("", SearchFormat:=True)
Debug.Print next_date
Debug.Print next_date.Address
End Sub
答案 2 :(得分:0)
问题不在于'在A63中是否有日期:A70?'但是'A63中还有什么:A70?'。日期实际上并不是一种单独的价值。对于大多数意图和目的(稍后会详细介绍),它们被视为数字。如果您只想在包含日期,文本,空白但没有其他数字的范围内找到第一个日期类型,那么这应该是。
Dim temp As Range
On Error Resume Next
Set temp = Range("A63:A70").SpecialCells(xlCellTypeConstants, xlNumbers)
If Not temp Is Nothing Then
Set temp = temp.Cells(1, 1) 'reset temp to the 1st date if there are more than one
Debug.Print temp.Address
Else
Debug.Print "no date in range"
End If
我说大多数意图和目的的原因是因为VBA确实有IsDate Function。这可能会考虑a)值的数值性质,b)Range.Value和Range.Value2之间的差异,以及c)确定单元格值是否为 42,149 或<的单元格的数字格式EM> 25可能 - 2015 。但是,IsDate函数一次只能检查一个单元格,因此需要耗费时间遍历单元格。
Dim temp As Range
For Each temp In Range("A63:A70")
If IsDate(temp) Then Exit For
Next temp
If Not temp Is Nothing Then
Debug.Print temp.Address
Else
Debug.Print "no date in range"
End If
你的例子只有8个细胞,所以一个循环不会对性能产生过分的损害,但它肯定会减慢几千个细胞的速度,无法单独检查。