¿Cómo manejo el control de errores en VBA para un código?

Tengo el siguiente código

Private Sub CommandButton1_Click()
' Asimilador de crudos para HACH AS950
Dim strArchivo As String
Dim informe As String
Dim Datos As String
Application.ScreenUpdating = False
strArchivo = Application.GetOpenFilename
Workbooks.OpenText Filename:=strArchivo
informe = ThisWorkbook.Name
Datos = ActiveWorkbook.Name
' Copiar y pegar hoja 1 en informe
Workbooks(Datos).Activate
Sheets(1).Select
Range("A3:G183").Select
Selection.Copy
Workbooks(informe).Activate
Sheets("CRUDOS").Activate
Range("A6:G1386").Select
ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
Workbooks(Datos).Close Savechanges:=False
Sheets("DATOS").Select
End Sub

El codigo me abre un cuadro para buscar un archivo y absorber su informacion. El tema esta en que al poner CANCELAR, si es que no quiero insertar nada, me tira un error de ejecucion y al poner ON ERROR RESUME NEXT, se me cierra el formulario completo y me deja el excel sin nada para la visual, como si se quedara pegado.

3 respuestas

Respuesta
1

Solo agrega la línea que marcada en azul en la imagen a tu macro, si das cancelar Excel le dará un valor falso a la variable strarchivo y mediante un IF finaliza el programa o puedes poner goto siguiente en vez de END y antes del end sub pones siguiente:, así no te sacara del formulario.

James bond
Cuando pongo el argumento que expones, me cierra el formulario por completo, yo solo necesito que me cierre el cuadro que pide insertar archivo

Si te dije que eso te iba a pasar y también te di la solución para que no te cerrara el formulario, como veo que no quedo claro te paso la macro completa. solo tienes que cambiar el END por un goto siguiente y añadir antes de la linea de final goto siguiente: asi permanceeras en el formulario.

Private Sub CommandButton1_Click()
' Asimilador de crudos para HACH AS950
Dim strArchivo As String
Dim informe As String
Dim Datos As String
Application.ScreenUpdating = False
strArchivo = Application.GetOpenFilename
If UCase(strArchivo) = "FALSO" Then GoTo SIGUIENTE
Workbooks.OpenText Filename:=strArchivo
informe = ThisWorkbook.Name
Datos = ActiveWorkbook.Name
' Copiar y pegar hoja 1 en informe
Workbooks(Datos).Activate
Sheets(1).Select
Range("A3:G183").Select
Selection.Copy
Workbooks(informe).Activate
Sheets("CRUDOS").Activate
Range("A6:G1386").Select
ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
Workbooks(Datos).Close Savechanges:=False
Sheets("DATOS").Select
SIGUIENTE:
End Sub
Respuesta

[Hola

Es una mala costumbre usar "On Error Resume Next" a menos que sea estrictamente necesario. Al usarlo y ocurrir algún error, como cuando cancelas en este caso, es normal que salte todo y siga el proceso y no ocurra nada en tu caso.

Yo sugiero usar esto:

If strArchivo = False Then
    MsgBox "Operación cancelada"
    Exit Sub
End If

Colócalo debajo de esto:

Workbooks.OpenText Filename:=strArchivo

Comentas

Abraham Valencia

Me tira el siguiente error y al depurar me marcar esa línea

Oh, disculpa, me faltó señalar que cambies por esto:

Dim strArchivo As Variant

Saludos]

Abraham Valencia

Respuesta

Puedes simplemente agregar al principio de la macro "On error resume next" y si encuentra un error saltara a la siguiente línea

si quieres saltar una linea especifica pon "On error resume next" antes de la linea y "Goto 0" donde termina para que solo ignore los errores de esa linea

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas