Вставка нового листа в алфавитном порядке между двумя конкретными листами - PullRequest
0 голосов
/ 05 февраля 2019

Пока что я создал кнопку «AddaSheet», которая выскакивает пользовательскую форму, где имя «NewSheetName» можно вставить в текстовое поле.Затем у меня есть кнопка («AddNow»), которая при нажатии должна (и в этом мне нужна помощь) сделать следующее:

скопировать лист «Template» и переименовать его в «NewSheetName» (таквведенный текст) и вставьте этот новый лист в алфавитном порядке между двумя определенными листами.

В моей книге много листов с различными элементами, такими как таблицы и т. Д., И я сгруппировал листы набора данных определенного типа вместе.Таким образом, в идеале, если новый лист можно вводить в заданном диапазоне, это было бы здорово.

Заранее благодарю за помощь!

ps Я новичок, я быочень признателен, если вы могли бы объяснить с комментариями, что делает код.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Если вам нужно вставить новый лист в алфавитном порядке между двумя определенными листами .Например, между листом с именем Start и листом с именем End используйте следующий код:

Преимущество этого кода состоит в том, что до Start и после может быть алфавитный случайный порядок листовEnd, но только новый лист шаблона сортируется правильным образом.

Пример:
На следующих листах новый лист Delta будет отсортирован в диапазоне от Beta до Epsilon, ноостальная часть заказа полностью случайна:

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
0 голосов
/ 05 февраля 2019

Это отсортирует ваши листы в алфавитном порядке

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

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...