6

У меня есть лист "Конец", который нужно переместить, чтобы он стал последним из всех доступных листов. Мне нужно сделать это с помощью VBA.

У меня есть сортировка, которая работает, мне просто нужен синтаксис для перемещения. Вот что у меня есть:

Private Sub CommandButton263_Click()
Dim i As Integer
Dim j As Integer
For i = 1 To Sheets.Count
  For j = 1 To Sheets.Count - 1
        If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
           Sheets(j).Move After:=Sheets(j + 1)
        End If
  Next j
Next i
Sheets("Navigation").Select
Sheets("Navigation").Move Before:=Sheets(1)
Sheets("Navigation (2)").Select
Sheets("Navigation (2)").Move Before:=Sheets(2)
Sheets("EstimateTemplate").Select
Sheets("EstimateTemplate").Move Before:=Sheets(3)
Sheets("Formulas").Select
Sheets("Formulas").Move Before:=Sheets(4)
Sheets("End").Move After:=Sheets(EOF)  'what can i use instead of EOF?
Sheets("Navigation (2)").Select
End Sub

Специально глядя на строку Sheets("End").Move After:=Sheets(EOF) - Что я могу использовать, чтобы получить последний лист?

2 ответа2

11

Sheets("End").Move after:=Worksheets(Worksheets.Count)

Листы.Count возвращает общее количество листов, а Worksheets(index) выбирает лист под определенным номером. Комбинируя оба, вы должны получить последний, каким бы он ни был.

0

Я бы сначала переименовал ваше свойство VBA CodeName, чтобы оно имело смысл. Вместо "Sheet1" или чего бы то ни было, сделайте их значимыми модификаторами

Прямо сейчас, если кто-то изменит имя листа, ваш VBA сломается.

Если ваш лист вместо этого имеет CodeName, вы можете сделать очень хорошие вещи, такие как:

EndSheet.Move after:=Worksheets(Worksheets.Count)

Это означает, что даже если кто-то переименует этот лист, скажем «сломать ваш макрос!"это не ... сломает твой макрос.

Кроме того, что касается выбора, вы можете сделать это, чтобы сделать ваш код более надежным, быстрым и надежным:

NavigationSheet.Move Before:=Sheets(1)
NavigationTwoSheet.Move Before:=Sheets(2)
EstimateTemplateSheet.Move Before:=Sheets(3)
FormulasSheet.Move Before:=Sheets(4)
EndSheet.Move After:=Sheets(EOF)  
NavigationTwoSheet.Select

(это предполагает, что вы переименовали все ваши коды CodeName в VBE)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .