Excel 字符串中的通配符
我在单元格中有一个字符串,它位于通过VBA表单创建的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-*-
在表格开发过程中,我们有三个独特的代码(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的了解有限。