Excel - Error 1004 en una macro

 
Vista:
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Error 1004 en una macro

Publicado por Antoni Masana (2477 intervenciones) el 25/01/2022 17:26:32
Tengo una macro que actualiza varias hojas de varios libros y algunas hojas pueden estar o no en los libros.
Para evitar errores tengo esta función:

1
2
3
4
5
6
7
8
9
10
11
12
Function Buscar_Hoja(nombreHoja As String) As Boolean
    Dim I As Integer
 
    For I = 1 To Worksheets.Count        ' <-- Aqui sale el error
        If UCase(Worksheets(I).Name) = UCase(nombreHoja) Then
            Buscar_Hoja = True
            Exit Function
        End If
    Next
 
    Buscar_Hoja = False
End Function

Algunas veces da error 1004, y sale la ventana con las opciones de finalizar o depurar, le doy a depurar, analizó lo que vale Worksheets.Count, el valor es correcto, le for F8, continua, le doy F5 y sigue la macro.

¿Por que da error si no hay error? O ¿Cual es e problema?

Saludos.
\\//_
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Error 1004 en una macro

Publicado por Antoni Masana (2477 intervenciones) el 28/01/2022 11:13:01
Parece que ya no se produce el error y la solución ha sido tan simple como poner un DoEvents para que refresque la información

1
2
3
4
5
6
7
8
9
10
11
Function Buscar_Hoja(nombreHoja As String) As Boolean
    Dim I As Integer
    DoEvents
    For I = 1 To Worksheets.Count
        If UCase(Worksheets(I).Name) = UCase(nombreHoja) Then
            Buscar_Hoja = True
            Exit Function
        End If
    Next
    Buscar_Hoja = False
End Function


Hice esto para que hacer 100 intentos y si fallaba saliese un mensaje para volver a intentarlo sin salir el error y además grabase un registro de los intentos fallidos y no hay ninguno desde que lo he modificado.

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
33
34
35
36
37
38
39
Function Buscar_Hoja(nombreHoja As String) As Boolean
    Dim I As Integer, Intentos As Byte
    Dim C As Integer
 
    Intentos = 0: On Error GoTo Error_1004
    DoEvents
 
Reintenta:
    For I = 1 To Worksheets.Count
        If UCase(Worksheets(I).Name) = UCase(nombreHoja) Then
            Buscar_Hoja = True
            Exit Function
        End If
    Next
 
    Buscar_Hoja = False
    Exit Function
 
Error_1004:
    Intentos = Intentos + 1
 
    C = FreeFile
    Open "C:\Orpas\Buscar_Hoja.txt" For Append As #C
    Print #C, Date; " - "; Time; " - Libro: " & ActiveWindow.Caption & _
                                 " - Hoja: " & nombreHoja & _
                                 " - Intento: "; Intentos
    Close #C
 
    If Intentos = 100 Then
       Intentos = 0
       MsgBox "Se han realizado 100 intentos de recuperar el error 1004" & _
              " en el método 'Worksheets' de objeto '_Global'" & vbCrLf & _
              vbCrLf & _
              "Pulse para reintentar de nuevo.", vbCritical + vbOKOnly, _
              "Funcion Buscar_Hoja con ERROR 1004"
    End If
    DoEvents
    Resume Reintenta
End Function

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar