我有excel文件,我必须放置验证规则。我有一个单元格说“客户时间”,用户可以输入时间,但它是自定义时间。用户可以输入这样的时间
23:45
98:20
100:30
用户不能输入字符串,除冒号外不能输入任何特殊字符。我制作了一个宏,它完全符合客户的需求。这是宏
Public Function isValidTime(myText) As String
Dim regEx
Set regEx = New RegExp 'Regular expression object
regEx.Pattern = "^[0-9]+([:]+[0-9]+)*$" ' Set pattern.
If regEx.test(myText) Then
isValidTime = myText
Else
isValidTime = "Null"
End If
End Function
注意:要测试这个宏,你必须在Tool中找到VBA ide然后引用然后选择microsoft visual basic vbascript 5.5
现在我想在excel上调用它。我可以调用= IsValidTime(“23:43”)并获得结果,但客户对此称之为不感兴趣。客户需要一个excel,他/她输入值,价值将根据上述标准进行验证,并获得准确的值或Null。
我不知道如何解决这个问题。我已经从数据验证日期和时间,然后数据验证和设置规则,它的工作完美,我也需要相同的方式来我的这条规则。任何帮助将受到高度赞赏......
由于 卡兹米
答案 0 :(得分:4)
您可以在工作表内使用Worksheet_Change
事件。在VBE中,选择工作表,然后从左侧下拉列表中选择Workhseet
,从右侧选择Change
。
输入以下代码:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then 'assumes user input cell is A1
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
On Error GoTo ErrTrap
Target.Value = isValidTime(Target.Value)
End If
KeepMoving:
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
Exit Sub
ErrTrap:
MsgBox Err.Number & Err.Description
Resume KeepMoving
End Sub
Public Function isValidTime(myText) As String
Dim regEx
Set regEx = New RegExp 'Regular expression object
regEx.Pattern = "^[0-9]+([:]+[0-9]+)*$" ' Set pattern.
If regEx.test(myText) Then
isValidTime = myText
Else
isValidTime = "Null"
End If
End Function