【问题标题】:How to call VBA function from excel如何从excel调用VBA函数
【发布时间】:2012-12-16 01:33:44
【问题描述】:

我有一个 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。

我不知道如何解决这个任务。我也从数据中验证了日期和时间,然后是数据验证并设置了规则,它工作得很好,我的这条规则也需要同样的方法。任何帮助将不胜感激...

谢谢 卡兹米

【问题讨论】:

标签: excel vba


【解决方案1】:

您可以在工作表内使用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

【讨论】:

  • 感谢您的及时回复。我已经对此进行了测试,但没有得到我需要的确切信息。假设如果我在单元格 A1 上写这个值 34:45,那么我得到 10:45,如果我写的是 34:dd,那么我得到的相同文本不为空。你测试过斯科特吗?我向我的项目经理提出了挑战,我会找到解决方案。所以我们正在解决这个问题。
  • 您是否尝试过使用输入单元格的格式?还是在条目前面放置一个''`?
  • 是的,它有效,我们必须将单元格的格式更改为文本。有用。非常感谢斯科特。 TC
  • @HusnainKazmi -> 太好了。请标记为已回答,以便其他人知道它有效。
  • 是的,我会做,但最后一个问题,它只在 A1 上工作,如果我将单元格粘贴到 A2 上等等,我不会得到相同的效果。如果我在 A1 上写这个字符串 23:fa 那么我得到 Null 并且它是完美的但是如果我在 A2 上写上面那么我不会得到空值。我们有大约 30 个元素需要这条规则。你也能告诉我这个吗。提前致谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
相关资源
最近更新 更多