【问题标题】:Wildcard in String字符串中的通配符
【发布时间】:2020-11-21 06:16:20
【问题描述】:

我在通过 VBA 表单创建的 Excel 电子表格的单元格中有一个字符串。
在表单开发过程中,我们拥有三个唯一代码(MIC-CT-xxx、MIC-ET-xxx 和 MIC-UT-xxx)。
我有一个正在工作的功能。现在我需要根据最后一个值搜索 LastNo。

Public Function UniqueID()

LastID = xTracker.Range("B" & tRow).Value
LastNo = CLng(Replace(LastID, "MIC-*-", ""))

If Me.CB_CType.Value = "Create" Then
    NewID = "MIC-CT-" & Format(LastNo + 1, "000")

ElseIf Me.CB_CType.Value = "Edit" Then
    NewID = "MIC-ET-" & Format(LastNo + 1, "000")

ElseIf Me.CB_CType.Value = "Update" Then
    NewID = "MIC-UT-" & Format(LastNo + 1, "000")

End If
End Function

我可以通过 If 进行搜索,但想知道是否有在文本字符串中插入通配符来查找 MIC-*-xxx 而不是完整字符串的方法。

【问题讨论】:

  • 您可以使用正则表达式。见:VBA Regex
  • 不幸的是我没能让它工作。可能是我对 VBA 的了解有限。

标签: excel vba string function wildcard


【解决方案1】:

正如我在对问题的评论中提到的,我建议使用正则表达式。返回LastNo 的方法可能如下所示:

Private Function GetLastNo(sKey As String) As Long
    Dim pattern As String, sTmp As String
    Dim r As RegExp
    
    On Error GoTo Err_GetLastNo
    
    sTmp = 1
    pattern = "[A-Z]{3}-[A-Z]{2}-"
    Set r = New RegExp
    r.pattern = pattern
    sTmp = r.Replace(sKey, "")
    
    GetLastNo = CLng(sTmp)
    
Exit_GetLastNo:
    On Error Resume Next
    Set r = Nothing
    Exit Function
    
Err_GetLastNo:
    MsgBox Err.Description, vbExclamation, Err.Number
    Resume Exit_GetLastNo
End Function

用法:

Public Function GetUniqueID(LastID As String) As String
    Dim pre As String, LastNo As Long
    LastNo = GetLastNo(LastID) + 1
    
    Select Case Me.CB_CType.Value
        Case "Create"
            pre = "MIC-CT-"
        Case "Edit"
            pre = "MIC-ET-"
        Case "Update"
            pre = "MIC-UT-"
    End Select

    GetUniqueID = pre & Format(LastNo, "000")

End Function

注意:不要忘记添加对 MS VBScript 正则表达式 5.5 库的引用!更多信息:VBA Regex

祝你好运!

【讨论】:

    【解决方案2】:

    终于找到了有效的方法。可能不是最好的方法,但有效!

    Public Function UniqueID()
    
    LastID = xTracker.Range("B" & tRow).Value
    
    Dim Str As String
    Str = Left(LastID, 7)
    
    LastNo = CLng(Replace(LastID, Str, ""))
    
    If Me.CB_CType.Value = "Create" Then
    NewID = "MIC-CT-" & Format(LastNo + 1, "000")
    
    ElseIf Me.CB_CType.Value = "Edit" Then
    NewID = "MIC-ET-" & Format(LastNo + 1, "000")
    
    ElseIf Me.CB_CType.Value = "Update" Then
    NewID = "MIC-UT-" & Format(LastNo + 1, "000")
    
    End If
    
    End Function
    

    【讨论】:

      猜你喜欢
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多