我如何处理Excel问题;13:12:00“;日期?
代码进行web查询,然后输入订单的状态和发货日期,大部分时间它都可以工作,但有时它会在不应该的时候跳过Do循环(即,它认为时间格式的数字是日期)。:) 如果“参数是包含可识别为日期或时间的日期表达式或字符串表达式的变量”,says我如何处理Excel问题;13:12:00“;日期?,excel,vba,Excel,Vba,代码进行web查询,然后输入订单的状态和发货日期,大部分时间它都可以工作,但有时它会在不应该的时候跳过Do循环(即,它认为时间格式的数字是日期)。:) 如果“参数是包含可识别为日期或时间的日期表达式或字符串表达式的变量”,saysIsDate将返回true 因此,从技术上讲,IsDate检查值是日期或时间。然而,VBA似乎将一个单元中的时间值视为一个双值,而将一个日期值视为一个日期值。因此,IsDate的行为类似于检查值是日期还是时间 在您的情况下,13:12:00与任何其他时间值没有区别。因此
IsDate
将返回true
因此,从技术上讲,IsDate
检查值是日期或时间。然而,VBA似乎将一个单元中的时间值视为一个双值,而将一个日期值视为一个日期值。因此,IsDate
的行为类似于检查值是日期还是时间
在您的情况下,13:12:00
与任何其他时间值没有区别。因此,我认为问题的原因是,13:12:00
作为字符串值输入到单元格中
要处理不同的类型,解决方案是添加以下函数来检查值是否为日期(而不是时间)
并将代码中对IsDate
的调用更改为IsDateValue
If IsDateValue(strDateShipped) = False Then
Do
Selection.Offset(-1).Select
strDateShipped = Selection.Value
Loop Until IsDateValue(strDateShipped) = True
End If
顺便说一句,理想情况下,VBA读取的单元格应该只包含格式良好(相同类型)的数据,否则代码会因许多
if
s而变得复杂,并可能会引入错误。有哪些值?e、 g.时间、日期和整数。13:12:00的格式是字符串还是数字?如果IsDate(strDateShipped)
,则还要检查Int(strDateShipped)=strDateShipped
,如果列可能包含整数,则可以检查它是否在预期日期的合理范围内。哇。这起作用了。将其转换为串行是明智的。非常感谢你,卡莫西奇。保持安全。
Function IsDateValue(ByVal v As Variant) As Boolean
IsDateValue = False
' Convert value to string
v = CStr(v)
' This is date OR time
If IsDate(v) Then
' If serial of the value is equal or more than 1, it is date
If CDbl(CDate(v)) >= 1 Then
IsDateValue = True
End If
End If
End Function
If IsDateValue(strDateShipped) = False Then
Do
Selection.Offset(-1).Select
strDateShipped = Selection.Value
Loop Until IsDateValue(strDateShipped) = True
End If