我想驗證用戶選擇的範圍內的所有單元格的數據類型是相同的,使用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
十進制值也會很好,但不是必需的。
我有其他選擇可供我處理,例如忽略最終輸出中的格式(真的不可取)或明確要求用戶確定類型(但這不像我想要的那樣乾淨和不自動)。
你有沒有考慮過使用正則表達式解析單元格的文本,然後根據結果強制特定的格式? –
@RossMcConeghy我沒有;我覺得應該有一個更簡單的VBA解決方案。 – Gaffi