字符串中的通配符
Wildcard in String
我在通过 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
正如我在问题评论中提到的,我建议使用正则表达式。 return 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 Regular Expression 5.5 库的引用!更多信息:VBA Regex
祝你好运!
我在通过 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
正如我在问题评论中提到的,我建议使用正则表达式。 return 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 Regular Expression 5.5 库的引用!更多信息:VBA Regex
祝你好运!