excel - 考虑到“13:12:00”作为日期,我如何解决 Excel?
问题描述
该代码进行网络查询,然后输入订单的状态和发货日期,它大部分时间都可以工作,但有时它会在不应该的时候跳过 Do Loop(即它认为时间格式的数字是日期)。 :)
Cells.Find(What:="order shipped", After:=ActiveCell, _
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
Selection.Offset(0, -1).Select
strDateShipped = Selection.Value
If IsDate(strDateShipped) = False Then
Do
Selection.Offset(-1).Select
strDateShipped = Selection.Value
Loop Until IsDate(strDateShipped) = True
End If
Selection.Copy
解决方案
微软的文档说,IsDate
如果“参数是包含可识别为日期或时间的日期表达式或字符串表达式的变体”,则返回 true。
因此,从技术上IsDate
检查该值是日期还是时间。但是,VBA 似乎将单元格中的时间值视为双精度值,而将日期值视为日期值。因此,IsDate
其行为就像检查值是日期还是时间。
在您的情况下,13:12:00
与任何其他时间值没有什么不同。所以,我认为问题的原因是13:12:00
在单元格中作为字符串值输入。
为了处理不同的类型,解决方案是添加以下函数来检查值是日期(不是时间),
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
并在您的代码中更改对IsDate
to的调用。IsDateValue
If IsDateValue(strDateShipped) = False Then
Do
Selection.Offset(-1).Select
strDateShipped = Selection.Value
Loop Until IsDateValue(strDateShipped) = True
End If
顺便说一句,理想情况下,VBA 读取的单元格应该只包含格式良好(相同类型)的数据,否则代码会变得复杂,包含许多if
s 并可能引入错误。
推荐阅读
- flutter - DraggableScrollableSheet中的Listview不会在颤动中滚动
- javascript - 如何在angularjs中的html之间传递变量?
- python - 如果“id”出现少于 2 次,则删除 pandas 数据框中的行
- angular - 在 primeNG 焦点上未触发 completeMethod 事件
- r - SASxport 到 R:读取 XPT SAS 文件时出错
- java - 如何提高算法的运行时间?
- git - 使用过滤器干净地列出所有远程分支
- asp.net-core - 如何在 ASP.NET Core 应用程序中使用领域集合通知?
- java - RecyclerView 列表项不显示也不播放
- python - 我的连接超时的原因是什么?