Como usar On Error Resume Next para evitar varios errores posible en mi macro

Tengo un código que he hecho con la grabadora de macros y otras cosas que he investigado en esta pagina, todo funciona bien hasta que un dato no aparece, allí me marca error y no se como evitar ese error, quiero decir como saltarme el error y que la macro continué.

Lo que quiero hacer es que cuando no escuentre "despensa" se pase a la parte donde busca el siguiente palabra "maxi" y asi sucesivamente con todas las palabras que busco. Si me pudieran ayudar para saber como utilizar "On Error Resume Next" u otra forma para evitar que la macro se detenga cuando no encuentre esas palabras.

Esta es la macro.

Sheets("TABLAS").Select
Columns("U:U").Select
Selection.Find(What:="DESPENSA", after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Offset(0, 2).Resize(Selection.Rows.Count - 1, _
Selection.Columns.Count + 2).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("NDS").Select
Range("H90").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("TABLAS").Select
Columns("U:U").Select
Selection.Find(What:="MAXI", after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Offset(0, 2).Resize(Selection.Rows.Count - 1, _
Selection.Columns.Count + 2).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("NDS").Select
Range("H62").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("TABLAS").Select
Columns("U:U").Select
Selection.Find(What:="PAIZ", after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Offset(0, 2).Resize(Selection.Rows.Count - 1, _
Selection.Columns.Count + 2).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("NDS").Select
Range("H4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("TABLAS").Select
Columns("U:U").Select
Selection.Find(What:="WALMART", after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Offset(0, 2).Resize(Selection.Rows.Count - 1, _
Selection.Columns.Count + 2).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("NDS").Select
Range("H45").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("TABLAS").Select
Columns("U:U").Select
Selection.Find(What:="CLUBCO", after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Offset(0, 2).Resize(Selection.Rows.Count - 0, _
Selection.Columns.Count - 3).Select
Selection.Copy
Sheets("NDS").Select
Range("H59").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If

2 Respuestas

Respuesta
1

Te recomiendo que no utilices la instrucción "On Error Resume Next", ya que si utilizas esta instrucción, todos los errores se desactivan, entonces si tienes otro problema diferente al Find, no podrás saber por qué la macro está fallando.

Sin embargo, la mejor manera de utilizar la instrucción "On Error Resume Next", puede ser así:

Sub Macro()
'Por.Dante Amor
    On Error Resume Next    'Se desactivan los errores
    '
    Columns("U:U").Select
    Selection.Find(What:="DESPENSA", after:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate
    '
    numerr = Err.Number
    If Err.Number = 0 Then
        MsgBox "el dato existe", vbInformation
        On Error GoTo 0     'Se activan nuevamente los errores
    Else
        MsgBox "Número de error: " & Err.Number & ", " & Err.Description, vbCritical, "El dato no fue encontrado"
    End If
End Sub

Te anexo la macro actualizada para verificar si existe algún dato. Si no existe, entonces continúa con la siguiente búsqueda:

Sub Macro()
'Act.Por.Dante Amor
    Sheets("TABLAS").Select
    Set b = Columns("U").Find("DESPENSA", LookAt:=xlPart)
    If Not b Is Nothing Then
        Columns("U:U").Select
        Selection.Find(What:="DESPENSA", after:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
        ActiveCell.Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Offset(0, 2).Resize(Selection.Rows.Count - 1, _
        Selection.Columns.Count + 2).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Sheets("NDS").Select
        Range("H90").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End If
    '
    Sheets("TABLAS").Select
    Set b = Columns("U").Find("MAXI", LookAt:=xlPart)
    If Not b Is Nothing Then
        Columns("U:U").Select
        Selection.Find(What:="MAXI", after:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
        ActiveCell.Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Offset(0, 2).Resize(Selection.Rows.Count - 1, _
        Selection.Columns.Count + 2).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Sheets("NDS").Select
        Range("H62").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End If
    '
    Sheets("TABLAS").Select
    Set b = Columns("U").Find("PAIZ", LookAt:=xlPart)
    If Not b Is Nothing Then
        Columns("U:U").Select
        Selection.Find(What:="PAIZ", after:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
        ActiveCell.Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Offset(0, 2).Resize(Selection.Rows.Count - 1, _
        Selection.Columns.Count + 2).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Sheets("NDS").Select
        Range("H4").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End If
    '
    Sheets("TABLAS").Select
    Set b = Columns("U").Find("WALMART", LookAt:=xlPart)
    If Not b Is Nothing Then
        Columns("U:U").Select
        Selection.Find(What:="WALMART", after:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
        ActiveCell.Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Offset(0, 2).Resize(Selection.Rows.Count - 1, _
        Selection.Columns.Count + 2).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Sheets("NDS").Select
        Range("H45").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End If
    '
    Sheets("TABLAS").Select
    Set b = Columns("U").Find("CLUBCO", LookAt:=xlPart)
    If Not b Is Nothing Then
        Columns("U:U").Select
        Selection.Find(What:="CLUBCO", after:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
        ActiveCell.Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.Offset(0, 2).Resize(Selection.Rows.Count - 0, _
        Selection.Columns.Count - 3).Select
        Selection.Copy
        Sheets("NDS").Select
        Range("H59").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End If
End Sub


Todavía se le pueden hacer otras mejoras a tu macro, pero no entiendo muy bien qué datos son lo que vas a copiar, ya que tendría que ver cómo están acomodados los datos en tu hoja, en dónde tienes espacios en blanco, etc.

Si quieres que te ayude con tu macro para hacer más simple, crea una nueva pregunta, describe con un ejemplo qué es lo que quieres copiar, al final del desarrollo de la pregunta escribe que va dirigida a Dante Amor.

Saludos. Dante Amor

Recuerda valorar la respuesta.

Respuesta
1

El  On error Resume Next lo has de poner antes de lo que te puede dar error

Por el código que veo, has de ponerlo antes de los Selection.find

Sheets("TABLAS").Select
Columns("U:U").Select
On error Resume Next '<------------------------------------
Selection.Find(What:="DESPENSA", after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas