Problema con ActiveSheet.Next.Select

Estimados expertos como están, ... Espero que bien. Abuso de vuestros conocimientos, necesito una mano ya que estoy usando una macro que me facilita para moverme entre hojas, tanto hacia adelante como hacia atrás.-
En el caso del código que estoy usando :
ActiveSheet.Next.Select
Me está dando error cuando llego al final de las hojas, como puedo hacer para que me salga un mensaje cuando llegue al final de las hojas y que no me dé el error.-
El mensaje me gustaría que sea el que yo quiera, y lo mismo cuando voy hacia atrás, ... Cuando uso ActiveSheet.Previous. Select me da error cuando la primera hoja está oculta.
También me gustaría que me permitiera dejar un mensaje y no dé el error, el error que me da es ERROR 91 EN TIEMPO DE EJECUCIÓN.
Desde ya muchísimas gracias y les deseo felices fiestas para todos.-
Gabriel.

1 Respuesta

Respuesta
1
'Intenta con esta macro:
Sub select_next_sheet()
Dim hoja As Integer
hoja = ActiveSheet.Index
If hoja = Sheets.Count Then
    Sheets(1).Select
Else
    On Error Resume Next
    hoja = hoja + 1
    Sheets(hoja).Select
    If Err = 1004 Then
        Err.Clear
        Do
        hoja = hoja + 1
        Sheets(hoja).Select
        Loop While Err = 1004
    End If
End If
End Sub
Muchas gracias EXPERTO por tu tiempo y tu respuesta, la macro funciona bárbaro, lo que no necesito es que pegue la vuelta o sea que al llegar a la última hoja comience otra vez por la primera, ... lo que necesito es que al llegar a la última hoja me permitiera dar un mensaje tipo : "NO HAY MÁS HOJAS PARA MIRAR" o lo que se me ocurra.-
La misma macro la voy a aplicar para ir para atrás, calculo que poniendo -1 debería andar. Pero también me interesaría que me avisara con un mensaje con el texto deseado.-
O sea no sé si me hago entender, la macro me debería permitir moverme del principio al final pero no volver al principio, y viceversa, del final al principio en las mismas condiciones.
Muchísimas gracias por su tiempo y compartir vuestros conocimientos.
'Aquí están tus macros, por separado, para recorrer de inicio a fin y viceversa
'mira si así te sirven
'no me pidas que las explique, porque soy mal maestro, además mi lógica
'creo que sólo la entiendo yo, jejejeje
Public YAinicioDEinicioAfin As Boolean
Public primerahojadesoculta As Integer
Public ultimahojadesoculta As Integer
Public YAinicioDEfinAinicio As Boolean
Sub de_inicio_a_fin()
Dim hoja As Integer
If YAinicioDEinicioAfin = False Then
    YAinicioDEinicioAfin = True
    On Error Resume Next
    For i = 1 To Sheets.Count
        Sheets(i).Select
        If Err = 0 Then
            primerahojadesoculta = i
            Exit Sub
        End If
        Err.Clear
    Next i
End If
hoja = ActiveSheet.Index
If YAinicioDEinicioAfin = False Then
If hoja <> primerahojadesoculta Then
    On Error Resume Next
    For i = 1 To Sheets.Count
        Sheets(i).Select
        If Err = 0 Then Exit For
        Err.Clear
    Next i
    Exit Sub
End If
End If
If hoja = Sheets.Count Then
    GoTo Findehojas
Else
    On Error Resume Next
    hoja = hoja + 1
    Sheets(hoja).Select
    If Err = 1004 Then
        Do
        Err.Clear
        hoja = hoja + 1
        Sheets(hoja).Select
        Loop While Err = 1004
    End If
End If
Exit Sub
Findehojas:
YAinicioDEinicioAfin = False
MsgBox "Ha llegado a la última hoja"
End Sub
Sub de_fin_a_inicio()
Dim hoja As Integer
If YAinicioDEfinAinicio = False Then
    On Error Resume Next
    Application.ScreenUpdating = False
    For i = 1 To Sheets.Count
        Sheets(i).Select
        If Err = 0 Then
            primerahojadesoculta = i
            Exit For
        End If
        Err.Clear
    Next i
    Application.ScreenUpdating = True
End If
If YAinicioDEfinAinicio = False Then
    YAinicioDEfinAinicio = True
    On Error Resume Next
    For i = Sheets.Count To 1 Step -1
        Sheets(i).Select
        If Err = 0 Then
            ultimahojadesoculta = i
            Exit Sub
        End If
        Err.Clear
    Next i
End If
hoja = ActiveSheet.Index
If hoja = primerahojadesoculta Then
    GoTo Findehojas
Else
    hoja = hoja - 1
    On Error Resume Next
    Sheets(hoja).Select
    If Err = 1004 Then
        Do
        Err.Clear
        hoja = hoja - 1
        Sheets(hoja).Select
        Loop While Err = 1004
    End If
End If
Exit Sub
Findehojas:
YAinicioDEfinAinicio = False
MsgBox "Ha llegado a la primera hoja"
End Sub
Estimado Experto, nuevamente agradecido por tu atención y tu tiempo, las macros las acomodé a mis necesidades, a pesar de que la de principio a fin no funcionó, pero como la de final a principio anduvo impecable pude arreglar la otra.-
Me fue de gran utilidad, nuevamente muchas gracias.-

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas