通常,空白估计工作簿在数据输入表单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
答案 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()