我有以下代码来计算工作簿中特定工作表的总数。我使用vbTextCompare运算符(比较运算符)来匹配工作表的名称,如果它在那里则会计算工作表的数量。但不幸的是,这与字符串不匹配。任何帮助? 工作表名称按以下顺序排列BQ1,BQ2,BQ3 .....等等。
Non linear autoregressive model
AR model
Coefficients:
const phi.1 phi.2
2.4352150 1.3842377 -0.7477757
答案 0 :(得分:0)
您的代码存在两个问题......
尝试这样的事情......
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)
我在这里使用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