如何修改VBA代码生成仅START PROJECTS与END PROJECTS间的工作表名称列表
提取指定区间内的工作表名称
以下是修改后的VBA代码,仅会将位于“START PROJECTS”和“END PROJECTS”之间的工作表名称写入DEFINITIONS工作表的P列:
Sub GetListOfTargetSheets() Dim startSheet As Worksheet Dim endSheet As Worksheet Dim w As Worksheet Dim i As Integer Dim startIdx As Integer, endIdx As Integer ' 初始化写入行号 i = 2 ' 清理目标列(原代码清理W列但写入P列,保持逻辑一致,如需调整可修改Range参数) Sheets("DEFINITIONS").Range("W:W").Clear On Error Resume Next ' 获取指定的起始和结束工作表对象 Set startSheet = ThisWorkbook.Worksheets("START PROJECTS") Set endSheet = ThisWorkbook.Worksheets("END PROJECTS") On Error GoTo 0 ' 检查是否找到边界工作表,避免后续报错 If startSheet Is Nothing Or endSheet Is Nothing Then MsgBox "未找到指定的起始或结束工作表,请确认名称拼写正确" Exit Sub End If ' 获取工作表索引,确保起始索引小于结束索引 startIdx = startSheet.Index endIdx = endSheet.Index If startIdx > endIdx Then ' 交换索引值,兼容起始表在结束表之后的异常情况 Dim tempIdx As Integer tempIdx = startIdx startIdx = endIdx endIdx = tempIdx End If ' 遍历工作表,仅写入区间内的表名 For Each w In ThisWorkbook.Worksheets ' 仅写入两个边界表之间的工作表名称(不包含边界表本身) If w.Index > startIdx And w.Index < endIdx Then Sheets("DEFINITIONS").Cells(i, 16) = w.Name i = i + 1 End If Next w End Sub
关键修改说明:
- 边界定位:通过
Worksheet.Index获取两个边界工作表的位置索引,确保区间判断准确 - 异常兼容:加入边界工作表不存在的判断,同时处理起始表在结束表之后的情况,避免逻辑出错
- 区间筛选:仅将索引介于两个边界表之间的工作表名称写入目标列(若需要包含边界表本身,可将判断条件改为
w.Index >= startIdx And w.Index <= endIdx)
内容的提问来源于stack exchange,提问作者osama hammoud
相关产品推荐
相关产品推荐

