Excel 字符串中的通配符

Excel 字符串中的通配符,excel,vba,string,function,wildcard,Excel,Vba,String,Function,Wildcard,我在单元格中有一个字符串,它位于通过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-*-

我在单元格中有一个字符串,它位于通过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而不是完整字符串。

最终找到了一种有效的方法。可能不是最好的方法,但很有效

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

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

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

正如我在对问题的评论中提到的,我建议使用正则表达式。返回
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库的引用!更多信息,请访问:


祝你好运

正如我在对问题的评论中提到的,我建议使用Regex。返回
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的了解有限。你可以使用正则表达式。看:不幸的是,我没能让它工作。可能是我对VBA的了解有限。