2011-11-22 11 views
7

P: ¿Cómo puedo determinar si hay un error en cualquier celda de todo el libro con Excel VBA?¿Cómo puedo determinar si hay un error en cualquier celda de todo el libro con Excel VBA

errores

será normalmente dividir por 0 o #VALOR errores, pero esta lista no es exhaustiva (o es - no sé si más existen)

¿Hay una manera de determinar si una célula contiene un error y omite el procesamiento adicional en mi script sin escupir un mensaje de depuración/advertencia/error.

algo tal como

  if value in current.Workbook.cell is error then go to <jump> 
      OR 
      if value in old.Workbook.cell is error then go to <jump> 

donde jump es un marcador al final de un caso statmenet pero dentro de un bucle.

la secuencia de comandos compara valores entre dos libros de trabajo y actualiza el libro actual con colores para mostrar la diferencia.

No tengo ninguna experiencia de VBA en absoluto. pero entiendo la esencia del guión que me han dado.

gracias amablemente.

+0

una lista de posibles errores que deseo ignorar (omitir) # DIV/0! # NAME? # N/A #NULL! #NUM! #REF! #VALOR! – ChelseaStats

Respuesta

15

Puede omitir celdas con errores utilizando la función VarType. Por ejemplo:

If VarType(ActiveCell.Value) <> vbError Then 
    ' do something 
End If 

La función VarType es también muy útil para validar el tipo de datos. Por ejemplo, si su código espera un valor de fecha pero a veces encuentra texto, puede usar esta función para examinar los datos y manejar las excepciones correctamente.

+0

muchas gracias, implementado esto y parece haber detenido los errores y permitió que el proceso continúe. – ChelseaStats

3

He aquí un fragmento de código que registra en la ventana Inmediato, el nombre de la hoja, dirección de la celda y la fórmula, donde hay un error de fórmula de cálculo ...

Dim ws As Worksheet, r As Range 

For Each ws In Worksheets 
    For Each r In ws.UsedRange 
     If IsError(r.Value) Then 
      Debug.Print r.Parent.Name, r.Address, r.Formula 
     End If 
    Next 
Next 
+0

no era lo que buscaba, pero gracias, es útil saberlo. Ahora si pudiera obtener la información de error de mi VB en un script php ... – ChelseaStats

0

Hay otra manera de hacerlo manejar esto: agregue On Error Resume Next en su código (por lo general, simplemente colóquelo antes del bucle).

Si una célula es un error, que sólo va a saltar y moverse al siguiente elemento en el bucle :)

+0

gracias por esto. supongo que esto tiene que ser antes de cada ciclo o declaración de estado en lugar de al principio de un documento. He agregado esto y me ha ayudado. gracias – ChelseaStats

+0

¡No solo una vez en el sub o en la función y funciona todo el tiempo! – aevanko

+0

No recomendaría 'on error resume next', ya que ocultará * todos * los errores, no solo cuando el valor de la celda sea erróneo. –

3

Dado su pregunta inicial era ¿Cómo se detecta errores en cualquier celda del libro con VBA entonces deberías buscar un enfoque muy eficiente: ¡mirar cada celda es muy costoso en cuanto al tiempo!

dos opciones para esto son: SpecialCells

  1. Uso de Excel para acortar el proceso de
  2. usar mi Mappit! addin que está configurado para informar sobre errores de cálculo

Para SpecialCells consulte el código de abajo .Esto se aprovecha de la colección ready-made de errores que existe como fórmulas

favor que esa constantes también tienen una colección de errores, por lo que si ha copiado a continuación, ejecutar una pasta especial como valor en un error de fórmula, entonces sería necesitará utilizar Set rng1 = ws.Cells.SpecialCells(xlConstants, xlErrors) para detectar estos

Se puede utilizar también detectar SpecialCells manualmente por

  • Seleccionar todas las celdas en el área de interés
  • Presione F5
  • Haga clic en especial
  • seleccione 'errores' en 'fórmulas' (o 'constantes')

enter image description here

Tenga en cuenta que antes de la XL2010 hay un límite de 8192 areas that SpecialCells can handle

Sub ErrorList() 
    Dim ws As Worksheet 
    Dim rng1 As Range 
    Dim strOut As String 
    For Each ws In ActiveWorkbook.Sheets 
     Set rng1 = Nothing 
     On Error Resume Next 
     Set rng1 = ws.Cells.SpecialCells(xlFormulas, xlErrors) 
     On Error GoTo 0 
     If Not rng1 Is Nothing Then strOut = strOut & (ws.Name & " has " & rng1.Cells.Count & " errors" & vbNewLine) 
    Next ws 
    If Len(strOut) > 0 Then 
     MsgBox "Error List:" & vbNewLine & strOut 
    Else 
     MsgBox "No Errors", vbInformation 
    End If 
End Sub 
Cuestiones relacionadas