我正在尝试使用 VBA 函数验证用户选择范围内所有单元格的数据类型是否相同。我有以下代码(简化),它在大多数情况下都有效:
Dim vTempRange As Variant
Dim vCell As Variant
vTempRange = DataRange.Value
For Each vCell In vTempRange
If Len(vCell) > 0 Then
'Use TypeName(vCell)
'Complete validation here
End If
Next vCell
有时用户可以选择一列百分比,有时选择一列十进制值,有时选择时间值(与日期无关)。VBA 似乎将所有这三个都视为Double
,这在技术上是不正确的。问题是,选择的格式将用作最终输出的一部分,因此12:00:00
应该显示为这样,而不是0.50
当前的情况。
我研究过结合使用这样的东西:
Dim vCell As Variant
For Each vCell In DataRange
If Len(vCell) > 0 Then
'Use vCell.NumberFormat
'Complete validation here
End If
Next vCell
但NumberFormat
并不一致。例如,用户可能将百分比列为0%
vs.0.000%
或时间列为h:m:s
vs. hh:mm:ss
,因此我认为很难正确捕获此值。
有没有一种方法可以在选择时间与其他类型之一的情况下准确确定而无需用户干预?确定百分比值与0<x<1
十进制值也很好,但不是必需的。
我可以使用其他选项,例如忽略最终输出中的格式(真的不可取)或明确要求用户识别类型(但这既不像我想要的那样干净也不自动)。