找到名为CSn的总页数

时间:2015-01-30 14:33:51

标签: excel vba excel-vba worksheet

通常,空白估计工作簿在数据输入表单CS1(始终存在)之前包含9张表格,包含CS表格的x个数量(其中x可以是50,100,200等),并且在最后一张CS表单之后包含零张数。有时用户会在最后一张CS表之前和之后添加纸张,但不允许在第一张和最后一张CS纸张之间添加纸张。

要求是优化现有的VLOOKUP代码(目前查看工作簿中的每张工作表)以仅查看所有CS工作表。因此,需要找到多少名为“CSn”(其中n是从1到未知的整数)表单在工作簿中。如果CS工作簿位于工作簿的末尾,但如果用户在最后一个CS工作表之后添加其他工作表,则这很容易。

由于CS表的数量不同,我无法弄清楚如何确定最后一张CS表索引。

显示CS表数量的快速代码

Public Sub No_of_Sheets()

    intCount = ActiveWorkbook.Sheets.Count      'Find total number of workbook sheets
    intCS1_Index = Sheets("CS1").Index          'CS1 Sheet index
    intCSCount = intCount - (intCS1_Index - 1)  'Find total number of CS sheets
    nonCSSheets = intCount - intCSCount         'Find total number of Non-CS sheets

    MsgBox " CS1 Sheet Index = " & intCS1_Index
    MsgBox " CS Sheet Count = " & intCSCount
    MsgBox " Non CS Sheet Count = " & nonCSSheets

End Sub

2 个答案:

答案 0 :(得分:1)

循环浏览每张表并测试CS的名称和另一个数字。然后将该字符串转换为整数,如果它更大则存储它,以便获得最大值。经过测试的工作:

Sub FindMaxCS()

    Dim ws1 As Worksheet, MaxInt As Integer

    MaxInt = 0

    For Each ws1 In ActiveWorkbook.Worksheets
        If ws1.Name Like "CS*" Then
            If MaxInt < CInt(Mid(ws1.Name, 3, 99)) Then
                MaxInt = CInt(Mid(ws1.Name, 3, 99))
            End If
        End If
    Next ws1

MsgBox MaxInt

End Sub

答案 1 :(得分:1)

这个简短的用户定义函数(或 UDF )将返回以字母 CS 开头的张数。

Public Function num_CSx_Sheets()
    Dim w As Long, cs As Long
    For w = 1 To Sheets.Count
        cs = cs - CBool(UCase(Left(Sheets(w).Name, 2)) = "CS")
    Next w
    num_CSx_Sheets = cs
End Function

可以在像

这样的工作表上使用
=num_CSx_Sheets()

......或者在VBA中,

Dim i as long
i = num_CSx_Sheets()