我试图验证在用户选择的范围内的所有单元的数据类型相同,采用了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%
与0.000%
或时间作为h:m:s
与hh:mm:ss
,所以把它看作是难以正确地捕获此值。
有没有一种方法,无需用户干预 ,以准确地确定在选择时间与其他类型的呢? 确定百分比值与一个0<x<1
十进制值也将是很好的,但不是必需的。
我已经在我手上其他选项,如忽略了最终的输出格式(实在不可取的)或明确要求用户识别的类型(但这是既不干净也不是自动的,我想)。