在定义的工作表范围内按字母顺序插入工作表

问题描述 投票:0回答:1

我有一个工作簿,其中包含使用“分隔符”工作表定义的工作表的不同部分。一节示例如下:

  • ‘大师’
  • '公司模板'
  • 'DIV - 概述'
  • “A公司”,“B公司” 公司'、'C公司'等
  • 'DIV - 新闻'

在“主”工作表中输入新公司时,将复制“公司模板”工作表,将其插入到“DIV - OVERVIEW”分隔表之后和“DIV - NEWS”分隔表之前,并使用该工作表重命名输入文本。该过程使用以下代码:

Dim TEMPOverview As Worksheet

wsTEMPOverview.Copy After:=.Sheets("DIV - OVERVIEW")
ActiveSheet.Name = CStr(Nm.Text)   

我希望将新工作表按字母顺序放置在指定的工作表范围内。例如:“公司 B”位于“DIV - OVERVIEW”:“DIV - NEWS”工作表范围内的“公司 A”和“公司 C”之间。我想首先的问题是如何使用分隔页定义工作表的范围。然后我会使用 For 循环将复制的工作表按字母顺序放置在范围内,如下所示:

Dim o
    For o = 1 To trackingWB.Sheets.Count
        If trackingWB.Sheets(o).Name >= companyName.Text Then
            Exit For
        End If
    Next o
    wsTEMPOverview.Copy before:=trackingWB.Sheets(o)
    ActiveSheet.Name = CStr(Nm.Text)

我该怎么办?

excel vba range worksheet
1个回答
0
投票

这样的事情会起作用:

Sub sheetTest()
    CreateSheetFromTemplate "CompanyB"
    CreateSheetFromTemplate "CompanyZZ"
    CreateSheetFromTemplate "CompanyH"
End Sub


Sub CreateSheetFromTemplate(companyName As String)
    Dim indxOv As Long, indxNews As Long, wb As Workbook, n As Long, pos As Long
    Dim wsTEMPOverview As Worksheet
    
    Set wb = ThisWorkbook
    indxOv = wb.Worksheets("DIV - OVERVIEW").Index 'positions of the bounding sheets
    indxNews = wb.Worksheets("DIV - NEWS").Index
    Set wsTEMPOverview = wb.Worksheets("template")
    
    For n = indxOv + 1 To indxNews - 1
        If wb.Worksheets(n).Name > companyName Then 'compare names
            pos = n  'insert before sheet n
            Exit For 'done schecking
        End If
    Next n
    If pos = 0 Then pos = indxNews 'new name comes after all existing sheets
    
    wsTEMPOverview.Copy before:=wb.Sheets(pos) 'copy and rename
    ActiveSheet.Name = companyName
    
End Sub

可能需要添加一个检查以确保该名称尚不存在。

© www.soinside.com 2019 - 2024. All rights reserved.