这里我使用Left
,Right
,并Len
重构你的代码。
Sub CountBQSheets()
Const WSPrefix As String = "BQ"
Dim tSheets As Long
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If Left(UCase(ws.Name), Len(WSPrefix)) = WSPrefix Then
If IsNumeric(Right(ws.Name, Len(ws.Name) - Len(WSPrefix))) Then
tSheets = tSheets + 1
MsgBox ws.Name
End If
End If
Next ws
End Sub
我认为使用集合来收集名字会更有用。
Sub Test_getWSPrefixList()
Dim list As Object
Set list = getWSPrefixList(ThisWorkbook, "BQ")
Debug.Print Join(list.ToArray, ",")
End Sub
Function getWSPrefixList(wb As Workbook, WSPrefix As String) As Object
Dim list As Object
Dim ws As Worksheet
Set list = CreateObject("System.Collections.ArrayList")
For Each ws In ThisWorkbook.Worksheets
If Left(UCase(ws.Name), Len(WSPrefix)) = WSPrefix Then
If IsNumeric(Right(ws.Name, Len(ws.Name) - Len(WSPrefix))) Then
list.Add ws.Name
End If
End If
Next ws
Set getWSPrefixList = list
End Function
BQ20,BQ19,BQ18,BQ17,BQ16,BQ15,BQ14,BQ13,BQ12,BQ11,BQ10,BQ9,BQ8,BQ7,BQ6,BQ5,BQ4,BQ3,BQ2,BQ1
故意把我内如果块。所以它应该只在找到匹配的字符串后递增i。顺便说一句,我找到了解决方案..我比较了一个字母的名称而不是1,应该有3 – Hola
@Hola在这种情况下,您应该使用计数器变量,一个用于动态构建工作表名称和另一个计算找到的工作表的出现次数,因为您只使用一个计数器变量。是的,这就是我指出的,你只是比较表名的第一个字母。如果您的问题已解决,请花点时间接受答案,将您的问题标记为已解决。 – sktneer