Excel应用程序与1904日期系统的匹配

Excel应用程序与1904日期系统的匹配,excel,vba,Excel,Vba,我目前有一段代码,可以在电子表格中搜索特定日期,使用1900日期系统可以正常工作,但当我尝试使用1904日期系统时,会出现类型不匹配13错误。两个工作簿都设置为1904年的日期系统 Dim fDate As Date Dim rw As Long Dim name As String Dim srchRange As Range Dim book2name As String, book2 As Workbook book2name = "Master_Sheet.xlsm" ' name

我目前有一段代码,可以在电子表格中搜索特定日期,使用1900日期系统可以正常工作,但当我尝试使用1904日期系统时,会出现类型不匹配13错误。两个工作簿都设置为1904年的日期系统

Dim fDate As Date
Dim rw As Long
Dim name As String
Dim srchRange As Range
Dim book2name As String, book2 As Workbook

book2name = "Master_Sheet.xlsm"   ' name of Source File
Set book2 = Workbooks(book2name)
name = "SM"

fDate = GetWeekStartDate(Range("C12"))
Set srchRange = book2.Sheets(name).Range("B:B")    ' Search Range

If Application.CountIf(srchRange, fDate) Then
    rw = Application.Match(CLng(fDate), srchRange, 0)
Else
    MsgBox Format(fDate, "dd/mm/yyyy") & " not found."
End If

Function GetWeekStartDate(ByVal strdate, Optional ByVal lngStartDay As Long = 2) As String
GetWeekStartDate = DateAdd("d", _
                   -Weekday(CDate(strdate), lngStartDay) + 1, CDate(strdate))
End Function

由于1904年的日期系统,单元格的基本值与1900年的日期系统不同,即使日期看起来相同。这意味着您需要将值偏移1462,以便
Match
找到它:

rw = Application.Match(CLng(fDate) - 1462, srchRange, 0)

您在哪一行得到错误?rw=Application.Match(CLng(fDate),srchRange,0)您必须更正真正的基础值:
rw=Application.Match(CLng(fDate)-1462,srchRange,0)
谢谢,效果很好。@Rory-考虑到将1904年的日期调整为VBA
应用程序。Match
,也许你可以贡献你的解决方案作为答案(或者社区维基,如果你绝对不想要代表)。仍然存在一些问题,如果我从中提取的工作簿在1904日期系统中,而活动工作簿在1900系统中,则偏移量值可以正常工作。但是,由于我需要使用负时间值,两个工作簿都需要在1904年的日期系统中,使用偏移量,我的代码找不到我要查找的日期。没有偏移量,我得到错误13,类型不匹配。我遗漏了什么吗?我很困惑。类型不匹配是因为找不到数据(并且您正试图为
Long
变量分配一个错误值),所以您所说的“使用偏移量,我的代码找不到我要查找的日期”是什么意思?假设我要查找今天的日期。在两个工作簿都是1904系统的情况下,当偏移量就位时,代码执行,但返回
MsgBox格式(fDate,“dd/mm/yyyy”)&“未找到”。
。如果删除偏移量,则会导致类型不匹配。我猜If Application.CountIf(srchRange,fDate)Then有问题,但我不确定是否有解决办法。fDate的值是多少?fDate是开始一周的日期,
fDate=GetWeekStartDate(范围(“C12”)
我在最初的问题中包含了这个函数。它将从C12中的日期值中查找周开始日期