比较工作簿中的工作表名称以获得匹配工作表的总数

时间:2017-09-23 12:41:10

标签: excel vba excel-vba vb6

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

Non linear autoregressive model

AR model
Coefficients:
     const      phi.1      phi.2 
 2.4352150  1.3842377 -0.7477757 

2 个答案:

答案 0 :(得分:0)

您的代码存在两个问题......

  1. 您正在比较工作表名称的第一个字母和字符串变量" BQ" &安培;一世。所以它无论如何都不匹配。
  2. 第二个问题是,你正在将i递增到错误的位置。它应该在IF块之外。
  3. 尝试这样的事情......

    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
    

答案 1 :(得分:0)

我在这里使用LeftRightLen重构了您的代码。

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