6 votos

¿Cómo puedo obtener la última hoja de trabajo en Excel VBA?

Tengo una hoja llamada "Fin" que necesita ser movida para ser la última de todas las hojas disponibles. Necesito hacer esto usando VBA.

Tengo una rutina de ordenación que funciona, sólo necesito la sintaxis para el movimiento. Esto es lo que tengo:

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

Específicamente mirando la línea Sheets("End").Move After:=Sheets(EOF) - ¿Qué puedo utilizar para obtener la última hoja?

11voto

Jonno Puntos 1288

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

Worksheets.Count devolverá la cantidad total de hojas, y Worksheets(index) selecciona una hoja de trabajo en un número específico. Combinando ambos, debería obtener la última, sea cual sea.

0voto

enderland Puntos 628

Primero cambiaría el nombre de la propiedad VBA CodeName de sus hojas de trabajo, para que tenga sentido. En lugar de "Hoja1" o lo que sea, haz que sean modificadores significativos

Ahora mismo, si alguien cambia el nombre de la hoja, su VBA se rompe.

Si su hoja es en cambio tiene un CódigoNombre puedes hacer cosas muy bonitas como:

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

Esto significa que aunque alguien cambie el nombre de esa hoja de trabajo, digamos para "romper su macro", no... romperá su macro.

Además, con respecto a los Selects, puedes hacer esto para que tu código sea más fiable, rápido y 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

(esto supone que has cambiado el nombre de todas tus hojas de trabajo por NombreCódigo en el VBE)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: