Перемещение выбранного листа рабочей книги на позицию перед другим выбранном листом или после него с помощью кода VBA Excel и отмена перемещения.
Перемещение листа и его отмена
Для реализации примера нужны две кнопки из коллекции «Элементы ActiveX» на рабочем листе «Лист1» и пользовательская форма, как на изображении:
При нажатии кнопки «Перемещение» отображается пользовательская форма, в которой с помощью раскрывающихся списков можно выбрать перемещаемый лист и лист-ориентир, перед или после которого следует вставить перемещаемый лист. Позиция перемещаемого листа относительно листа-ориентира выбирается с помощью переключателей.
Выбранный лист перемещается на новое место после нажатия кнопки «Переместить», а пользовательская форма закрывается. При нажатии кнопки «Отмена перемещения» перемещенный лист возвращается в первоначальное положение.
Код в стандартном модуле
В разделе «Declarations» стандартного модуля «Module1» объявляем глобальные переменные, которые используются в модуле листа «Лист1» и в модуле формы «UserForm1»:
1 2 |
Option Explicit Public n1 As Long, n2 As Long |
Код в модуле формы
Код VBA Excel, размещенный в модуле пользовательской формы «UserForm1»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
'Настройка формы перед ее отображением Private Sub UserForm_Initialize() Dim mySheet As Object 'Задаем выбранный переключатель по умолчанию OptionButton1 = True 'Заполняем поля со списками именами листов For Each mySheet In ThisWorkbook.Sheets ComboBox1.AddItem mySheet.Name ComboBox2.AddItem mySheet.Name Next End Sub Private Sub CommandButton1_Click() On Error GoTo Instruk 'Сохраняем индекс перемещаемого листа до перемещения Module1.n1 = Sheets(ComboBox1.Value).Index If OptionButton1 Then Sheets(ComboBox1.Value).Move Before:=Sheets(ComboBox2.Value) Else Sheets(ComboBox1.Value).Move After:=Sheets(ComboBox2.Value) End If 'Сохраняем индекс перемещаемого листа после перемещения Module1.n2 = Sheets(ComboBox1.Value).Index 'Выбираем Лист1 (с кнопками), так как активным становится перемещенный лист Лист1.Select 'Выгружаем форму Unload Me Exit Sub Instruk: 'Отображаем информационное сообщение при возникновении ошибки MsgBox "Произошла ошибка: " & Err.Description & " (Может быть лист не выбран?)" End Sub |
Код в модуле листа
Код VBA Excel, размещенный в модуле листа «Лист1»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Private Sub CommandButton1_Click() 'Отображаем форму на экране UserForm1.Show End Sub Private Sub CommandButton2_Click() On Error GoTo Instruk 'Возвращаем перемещенный лист на первоначальное место If Module1.n1 > Module1.n2 Then Sheets(Module1.n2).Move After:=Sheets(Module1.n1) Else Sheets(Module1.n2).Move Before:=Sheets(Module1.n1) End If 'Выбираем Лист1 (с кнопками), так как активным становится перемещенный лист Лист1.Select 'Обнуляем глобальные переменные Module1.n1 = 0 Module1.n2 = 0 Exit Sub Instruk: 'Отображаем информационное сообщение при возникновении ошибки MsgBox "Произошла ошибка: " & Err.Description & " (Может быть лист еще не перемещали?)" End Sub |