2017-09-23 55 views
-1

我有以下代码可以计算工作簿中特定工作表的总数。我使用vbTextCompare运算符(比较运算符)来匹配工作表的名称,如果它存在,那么它会计算表的数量。但不幸的是,这不符合字符串。任何帮助? 工作表名称是按以下顺序BQ1,BQ2,BQ3 .....等等..比较工作表在工作簿中的名称获取匹配工作表总数no

Dim tSheets As Long 
Dim WS As Worksheet 

i = 1 
For Each WS In ThisWorkbook.Worksheets 
    If StrComp(Left(WS.Name, 1), "BQ" & i, vbTextCompare) = 0 Then 
     tSheets = tSheets + 1 
     MsgBox WS.Name 
      i = i + 1 
    End If 

Next WS 

回答

0

这里我使用LeftRight,并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 
0

两个与您的代码的问题...

  1. 您比较第一表格名称的字母与字符串变量“BQ”& i。所以在任何情况下都不会匹配。
  2. 第二个问题是,你正在增加我在错误的地方。它应该在IF块之外。

尝试这样的事情......

Dim tSheets As Long 
Dim WS As Worksheet 
Dim i As Integer 
i = 1 
For Each WS In ThisWorkbook.Worksheets 
    If StrComp(WS.Name, "BQ" & i, vbTextCompare) = 0 Then 
     tSheets = tSheets + 1 
     MsgBox WS.Name 
    End If 
    i = i + 1 
Next WS 
+0

故意把我内如果块。所以它应该只在找到匹配的字符串后递增i。顺便说一句,我找到了解决方案..我比较了一个字母的名称而不是1,应该有3 – Hola

+0

@Hola在这种情况下,您应该使用计数器变量,一个用于动态构建工作表名称和另一个计算找到的工作表的出现次数,因为您只使用一个计数器变量。是的,这就是我指出的,你只是比较表名的第一个字母。如果您的问题已解决,请花点时间接受答案,将您的问题标记为已解决。 – sktneer

相关问题