Como obtenho a última planilha no Excel VBA?

6

Eu tenho uma planilha chamada "End" que precisa ser movida para ser a última de todas as planilhas disponíveis. Eu preciso fazer isso usando o VBA.

Eu tenho uma rotina de classificação que funciona, eu só preciso da sintaxe para o movimento. Aqui está o que eu tenho:

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

Olhando especificamente para a linha Sheets("End").Move After:=Sheets(EOF) - O que posso usar para obter a última planilha?

    
por DanM 08.01.2016 / 17:33

2 respostas

11

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

Worksheets.Count retornará a quantidade total de folhas, e Worksheets (index) seleciona uma planilha em um número específico. Combinando ambos, você deve pegar o último, seja o que for.

    
por 08.01.2016 / 17:36
0

Primeiramente, renomeie a propriedade VBA CodeName das planilhas para que seja significativa. Em vez de "Folha1" ou seja lá o que for, faça-os modificadores significativos

Neste momento, se alguém alterar o nome da planilha, o seu VBA quebrará.

Se sua planilha tiver um CodeName , você poderá fazer coisas muito interessantes, como :

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

Isso significa que mesmo que alguém renomeie essa planilha, diga para "quebrar sua macro!" não vai ... quebrar sua macro.

Além disso, em relação a Selects, você pode fazer isso para tornar seu código mais confiável, mais rápido e robusto:

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

(isto assume que você renomeou todas as suas planilhas CodeName no VBE)

    
por 08.01.2016 / 23:39