在两个特定的工作表之间按字母顺序插入新工作表

时间:2019-02-05 09:12:45

标签: excel vba

到目前为止,我已经创建了一个按钮“ AddaSheet”,该按钮弹出一个用户窗体,其中可以在文本框中插入名称“ NewSheetName”。然后,我有一个按钮(“ AddNow”),当单击该按钮时,需要执行以下操作(这是我需要的帮助):

复制“模板”表并将其重命名为“ NewSheetName”(即输入的文本),然后将此新表按字母顺序插入两个定义的表之间。

我的工作簿中有很多工作表,其中包含表格等不同元素,并且我将一种特殊的数据集工作表分组在一起。这样的话,理想情况下,如果可以在设定范围之间输入新的工作表,那就太好了。

提前感谢您的帮助!

p.s。我是一个初学者,如果可以用注释解释代码的作用,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

这会将您的工作表按字母顺序排序

Sub SortSheetsTabName()
    ' Turn off screenupdating so no visual effects to enduser
    Application.ScreenUpdating = False
    Dim iSheets%, i%, j%
    ' Get number of sheets in workbook
    iSheets = Sheets.Count
    ' Loop through all sheets in workbook
    For i = 1 To iSheets - 1
        ' Loop through sheets to find correct position of worksheet
        For j = i + 1 To iSheets
            ' Test position
            If Sheets(j).Name < Sheets(i).Name Then
                ' Move sheet to alphabetical position
                Sheets(j).Move before:=Sheets(i)
            End If
        Next j
    Next i
    ' Turn on screenupdating for end user
    Application.ScreenUpdating = True
End Sub

Source

答案 1 :(得分:1)

如果您需要按字母顺序在两个定义的工作表之间插入新工作表。例如,在名为Start的工作表和名为End的工作表之间,然后使用以下代码。

此代码的优点在于,Start之前和End之后的工作表可以按字母顺序随机排列,但是只有新的模板工作表才以正确的方式排序。

示例:
在以下工作表中,新的Delta工作表将在BetaEpsilon之间排序,但其余顺序完全是随机的:

enter image description here

Option Explicit

Public Sub CopyAndSortSheetInBetween()
    Dim wsTemplate As Worksheet 'template sheet
    Set wsTemplate = ThisWorkbook.Worksheets("Template")

    Dim iStart As Long 'define your start sheet
    iStart = ThisWorkbook.Sheets("Start").Index + 1

    Dim iEnd As Long 'define your end sheet
    iEnd = ThisWorkbook.Sheets("Stop").Index - 1

    If iEnd < iStart Then
        MsgBox "Stop sheet is before start sheet"
        Exit Sub
    End If

    Dim NewName As String 'name that your new sheet will be
    NewName = "Delta"

    'find out which position is between "Start" and "Stop" sheet is the correct
    Dim i As Long
    For i = iStart To iEnd
        If UCase(ThisWorkbook.Sheets(i).Name) > UCase(NewName) Then
            Exit For
        End If
    Next i

    'now i is the destination sheet number for your copied template sheet
    'and you can copy and rename your template
    wsTemplate.Copy Before:=ThisWorkbook.Sheets(i)
    ThisWorkbook.Sheets(i).Name = NewName
End Sub