作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
注意:要测试此宏,您必须转到工具中的 VBA ide,然后引用,然后选择 microsoft Visual Basic vbascript 5.5
现在我想在 Excel 中调用它。我可以调用 =IsValidTime("23:43") 并获取结果,但客户不感兴趣调用它。客户需要一个 Excel,他/她可以在其中输入值,并且值将根据上述标准进行验证并获得准确的值或 Null。
我不知道如何解决这个任务。我还从数据中验证了日期和时间,然后进行了数据验证并设置了规则,它工作得很好,我的这条规则也需要同样的方式。任何帮助将不胜感激...
谢谢卡兹米
最佳答案
您可以在工作表内使用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
关于excel - 如何从Excel调用VBA函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886383/
我是一名优秀的程序员,十分优秀!