我有以下代码在某些笔记本电脑上运行没有问题,然后其他代码会出现类型不匹配错误。在列AA中是具有格式(mm / dd / yyyy)的日期,列AB具有相应的格式时间(hh:mm:ss)。
我从Now()中减去日期和时间。我无法真正解决问题,因为它在我的笔记本电脑上工作正常。对于其他人来说,它出错了。 CLng(CDate(Now()))
有一个值,但另外两个会导致类型不匹配。我已经尝试了下面两行以及另一行连接日期和时间,然后执行了CLng(CDate(。
'If CLng(CDate(Now())) - CLng(CDate(Range("AA" & i).Value)) + CLng(CDate(Range("AB" & i).Value)) >= 7 Then
If CLng(CDate(Now())) - CLng(CDate(FMT(Range("AA" & i), "mm/dd/yyyy"))) + CLng(CDate(FMT(Range("AB" & i), "hh:mm:ss"))) >= 7 Then
其中FMT是公共职能:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
我要求我的同事给我发送他的地区日期/时间设置的屏幕截图..我当时认为可能是这种情况。我已经阅读了与此相似的其他问题,但无法弄明白。提前谢谢。
答案 0 :(得分:2)
如果AA和AB列包含文本而不是日期和时间,请尝试使用以下语句:
If Now() - (DateValue(Range("AA" & i)) + TimeValue(Range("AB" & i))) >= 7 Then
如果用户的本地日期设置为dd/mm/yyyy
,但您的列存储的字符串表示某个其他区域设置的日期设置中的日期,则可能仍会出现问题。如果是这种情况,您可能需要解析字段并按如下方式执行:
Dim myDateStr As String
Dim myTimeStr As String
Dim myDateTime As Date
myDateStr = Range("AA" & i)
myTimeStr = Range("AB" & i)
myDateTime = DateSerial(CInt(Mid(myDateStr, 7, 4)), CInt(Mid(myDateStr, 1, 2)), CInt(Mid(myDateStr, 4, 2))) + _
TimeSerial(CInt(Mid(myTimeStr, 1, 2)), CInt(Mid(myTimeStr, 4, 2)), CInt(Mid(myTimeStr, 7, 2)))
If Now() - myDateTime >= 7 Then
答案 1 :(得分:0)
您可以使用Value2
对象的Range
属性来获取DateTime
的数字表示。尝试:
If CDbl(Now()) - (Range("AA" & i).Value2 + Range("AB" & i).Value2) >= 7 Then
请务必将Now()
转换为Double
,否则它只会使用DateTime
的日期部分。
我发现使用DateTime
的数字表示更容易,因为它允许您绕过区域设置。