Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何处理Excel问题;13:12:00“;日期?_Excel_Vba - Fatal编程技术网

我如何处理Excel问题;13:12:00“;日期?

我如何处理Excel问题;13:12:00“;日期?,excel,vba,Excel,Vba,代码进行web查询,然后输入订单的状态和发货日期,大部分时间它都可以工作,但有时它会在不应该的时候跳过Do循环(即,它认为时间格式的数字是日期)。:) 如果“参数是包含可识别为日期或时间的日期表达式或字符串表达式的变量”,saysIsDate将返回true 因此,从技术上讲,IsDate检查值是日期或时间。然而,VBA似乎将一个单元中的时间值视为一个双值,而将一个日期值视为一个日期值。因此,IsDate的行为类似于检查值是日期还是时间 在您的情况下,13:12:00与任何其他时间值没有区别。因此

代码进行web查询,然后输入订单的状态和发货日期,大部分时间它都可以工作,但有时它会在不应该的时候跳过Do循环(即,它认为时间格式的数字是日期)。:)

如果“参数是包含可识别为日期或时间的日期表达式或字符串表达式的变量”,says
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