我正在尝试编写一个函数来搜索在相邻工作表的单元格区域中作为参数输入的特定日期。在找到日期时,函数应返回一个字符串“found:”和单元格引用。
所有似乎都运行得很好,但即使在日期格式中存在(故意输入)日期时,函数也会返回“无”,无论是在单元格区域还是在调用函数时引用的单元格中。 / p>
在使用日期时调用查找时,我是否遗漏了一些重要内容?
注意,该函数在另一个工作表中查看与其调用的行相同的行。这可能有助于解释我如何设置rng
Public Function d_scan(targ As Date) As String
Dim ws As Worksheet
Dim targetSheet As Worksheet
Dim ret As String
Dim rng As String
Dim scanner As Date
Dim found As Range
Set targetSheet = ThisWorkbook.Worksheets("2018")
Set ws = Application.Caller.Worksheet
Let intRow = Application.Caller.Row
Let intCol = Application.Caller.Column
Let rng = "F" & intRow & ":" & "X" & intRow
Set found = targetSheet.Range(rng).Find(What:=targ, LookAt:=xlWhole)
If found Is Nothing Then
Let ret = "nothing"
Else
Let ret = "found: " & found
End If
d_scan = ret
End Function
答案 0 :(得分:2)
日期问题非常微妙,它们的解决方案可能取决于实际情况(使用的变量类型,工作表中使用的数据格式,......)
首先,您可能需要:
指定所有相关的Find()
方法参数,因为未定义的方法参数将根据其最后一次使用隐式假设(即使是从Excel UI!)
通过Date
函数将String
转换为CStr()
所以,你可能想尝试这段代码:
Option Explicit
Public Function d_scan(targ As Date) As String
Dim rng As String
Dim found As Range
Dim intRow As Long
intRow = Application.Caller.Row
rng = "F" & intRow & ":" & "X" & intRow
Set found = ThisWorkbook.Worksheets("2018").Range(rng).Find(What:=CStr(targ), LookAt:=xlWhole, LookIn:=xlValues) ' specify 'LookIn' parameter, too
If found Is Nothing Then
d_scan = "nothing"
Else
d_scan = "found: " & found
End If
End Function
答案 1 :(得分:1)
我认为你将日/小时/分钟/秒与日/小时/分钟/秒进行比较并且没有匹配(一切都太具体)。我用这个按摩targ进入"今天"在凌晨12:00,你需要做一些事情来按下这样的表格上的数据以及range.find工作。
targ = Application.WorksheetFunction.Floor(targ, 1)
我建议使用range.find以外的方法...也许,在寻找targ和小于1的单元格之间的区别?