Estoy tratando de recorrer todas las hojas y verificarlas una por una y hacer lo siguiente: Si en la celda marcada el valor de E18 = N / A, entonces en la primera hoja (llamada Resumen) cambiaría el valor de G23 a N / A también (y luego hacer eso para cada celda, y en el cambio de resumen G23 luego G24 luego G25 y así sucesivamente) escribí el siguiente ciclo, se ejecuta pero no hace nada en absoluto

Sub MyTestSub()

Dim ws As Worksheet

LastRow = Cells(Rows.Count, "G").End(xlUp).Row
For X = 22 To LastRow
    For Each ws In Worksheets
        If ws.Range("E18").Value="N/A" then ThisWorkbook.Sheets("Summary").Range("G"&x).Value="N/A"
    Next ws                 
Next x

End Sub

¡Cualquier ayuda sería apreciada!

0
Rhyfelwr 15 nov. 2017 a las 17:13

2 respuestas

La mejor respuesta

Debe ser un procedimiento de 2 pasos:

  1. Compruebe si IsError en la celda.
  2. Compruebe si el tipo de error es #N/A, con If .Range("E18").Value = CVErr(xlErrNA) Then.

De lo contrario, si tiene un String normal, como "Aprobado", obtendrá un error.

Código

Dim lRow As Long

LastRow = Sheets("Summary").Cells(Sheets("Summary").Rows.Count, "G").End(xlUp).Row
lRow = 23 ' start from row 23

For Each ws In Worksheets
    With ws
        If .Name <> "Summary" Then
            If IsError(.Range("E18").Value) Then
                If .Range("E18").Value = CVErr(xlErrNA) Then
                    Sheets("Summary").Range("G" & lRow).Value = CVErr(xlErrNA)
                End If
            End If
        End If
    End With
    lRow = lRow + 1
Next ws   
2
Shai Rado 15 nov. 2017 a las 15:08

Intente invertir los bucles anidados. Algo como esto debería estar funcionando:

Sub MyTestSub()
    Dim ws As Worksheet
    For Each ws In Worksheets
        LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row            
        If IsError(ws.Range("E18")) then 
            For X = 22 To LastRow
                Sheets("Summary").Range("G" & LastRow) = ws.Range("E18")
            next x
        end if
    Next ws                 
End Sub

Además, supongo que LastRow es diferente según la hoja de trabajo, por lo que debe restablecerlo con bastante frecuencia, cada vez que hay una nueva hoja de trabajo. Por último, pero no menos importante, asegúrese de consultar la hoja de trabajo, cuando se refiera a Cells, de esta manera:

LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row            

Si no lo haces estarás teniendo en cuenta las ActiveSheet.

Aquí hay más información sobre los errores en Excel y su devolución: http://www.cpearson.com/ excel / ReturnsErrors.aspx

La solución funcionará con cualquier error, no solo con # N / A

0
Community 8 may. 2018 a las 21:49