如果您确实需要指定单元类型,则不能。尽我所知,VBA中的所有单元格都包含不同的数据类型。
如果您的意思是变体的数据类型,那么当然可以这样做。这是一个建议,它有点快而肮脏,但它的工作原理。您需要将它放在工作表代码模块中。请注意,它不测试你的布尔范围,int范围,任何相交,如果他们这样做可能会导致你一些问题。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo handler
Dim cell As Range, _
boolRng As Range, _
intRng As Range
Set boolRng = Union(Sheet1.Range("A1:B2"), Sheet1.Range("E:E"))
Set intRng = Union(Sheet1.Range("B7:K12"), Sheet1.Range("M:M"))
If Not Intersect(Target, boolRng) Is Nothing Then
For Each cell In Intersect(Target, boolRng)
If cell.Value <> "" Then
cell.Value = CBool(cell.Value)
End If
Next cell
End If
If Not Intersect(Target, intRng) Is Nothing Then
For Each cell In Intersect(Target, intRng)
If cell.Value <> "" Then
cell.Value = CInt(cell.Value)
End If
Next cell
End If
Exit Sub
handler:
Select Case Err.Number
Case 13 'Type mismatch, raised when cint/cbool/c*** fails
cell.Value = ""
Resume Next
Case Else
Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
End Select
End Sub
编辑:我注意到你想提出一个错误,如果该值不正确地分配,你可以做的是,在错误处理部分。取而代之的
Cell.value = ""
Resume Next
你可以使用
Err.Raise ISuggestAnEnumForErrorNumbers, "Sheet1.Worksheet_Change(Event)", "Attempted to assign wrong type to cell."
仅供参考 - 试用过的数据验证无效。 – 2012-03-16 00:29:10
我主要关注VBA ......只是想确保在VBA中不可能“修复”或“声明”。 – SoftTimur 2012-03-16 00:51:33
您想在使用VBA或在Excel中输入时引发错误? – JMax 2012-03-16 07:45:14