Saltar al contenido

Mensaje duplicado en el control de errores

publicado

Hola a todos, he puesto un control de errores en un procedimiento y se duplica el mensaje de  error dos veces  y no se porqué lo hace.

El procedimiento es este:

Sub InsertarTabla()
On Error GoTo Etiqueta
Dim nTabla As String
    nTabla = ActiveSheet.ListObjects(1).Name
    ActiveSheet.Range(nTabla & "[#All]").Select
    Selection.Copy
    
Etiqueta:
    If Err.Number = 0 Then
        'Correcto
    ElseIf Err.Number = 9 Then
        'No sé porque repite dos veces el mensaje, si no hay ninguna tabla debe destildar el check
        MsgBox "No hay ninguna tabla, operación cancelada", vbCritical, "Mensaje"
        UserForm1.CheckBox1.Value = False '---> Si comento esto no da error, pero necesito que si se detecta el error el check vuelva a quedar como False
    Else
        MsgBox Err.Number
    End If
End Sub

Adjunto macro.

 

Saludos.

MError.xlsm

Featured Replies

publicado
Sub InsertarTabla()
On Error GoTo Etiqueta
Dim nTabla As String
    nTabla = ActiveSheet.ListObjects(1).Name
    ActiveSheet.Range(nTabla & "[#All]").Select
    Selection.Copy
    Exit Sub '<------------------------------------
Etiqueta:
    If Err.Number = 0 Then
        'Correcto
    ElseIf Err.Number = 9 Then
        'No sé porque repite dos veces el mensaje, si no hay ninguna tabla debe destildar el check
        MsgBox "No hay ninguna tabla, operación cancelada", vbCritical, "Mensaje"
        UserForm1.CheckBox1.Value = False '---> Si comento esto no da error, pero necesito que si se detecta el error el check vuelva a quedar como False
    Else
        MsgBox Err.Number
    End If
End Sub

 

publicado
  • Autor
hace 38 minutos , Antoni dijo:
Sub InsertarTabla()
On Error GoTo Etiqueta
Dim nTabla As String
    nTabla = ActiveSheet.ListObjects(1).Name
    ActiveSheet.Range(nTabla & "[#All]").Select
    Selection.Copy
    Exit Sub '<------------------------------------
Etiqueta:
    If Err.Number = 0 Then
        'Correcto
    ElseIf Err.Number = 9 Then
        'No sé porque repite dos veces el mensaje, si no hay ninguna tabla debe destildar el check
        MsgBox "No hay ninguna tabla, operación cancelada", vbCritical, "Mensaje"
        UserForm1.CheckBox1.Value = False '---> Si comento esto no da error, pero necesito que si se detecta el error el check vuelva a quedar como False
    Else
        MsgBox Err.Number
    End If
End Sub

 

Hola Antoni, efectivamente me comí el "Exit Sub" , pero aun así lo repite. 

Inclusive he copiado tú procedimiento y lo pide igual.

¿No debería?

Si se te ocurre algo bien y si no comento la línea y punto.

Gracias como siempre Antoni.

publicado

Esto te ocurre porque estas usando el evento CheckBox1_Click() , prueba por ejemplo con CheckBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) y comenta

publicado

Otra forma de hacerlo con el evento CheckBox1_click() sería :

Public contador As Integer

Private Sub CheckBox1_Click()
    contador = contador + 1
    If contador = 1 Then
        Call InsertarTabla
        contador = 0
    End If
End Sub

 

publicado
hace 3 minutos , Benito Bartolomé dijo:

Hola @JSDJSD había visto el primero y no iba.

Para que funcione tientes que pulsar enter

publicado
  • Autor
Ahora mismo, JSDJSD dijo:

Marcas y depués pulsas enter

Gracias @JSDJSD por esta segunda opción, pulsando el Enter funciona correctamente.

Doblemente agradecido. Saludos

publicado

¿Porqué no usas?

ActiveSheet.ListObjects(1).Range.Copy

en lugar de

Dim nTabla As String
nTabla = ActiveSheet.ListObjects(1).Name
ActiveSheet.Range(nTabla & "[#All]").Select
Selection.Copy

 

publicado
  • Autor
hace 17 minutos , Antoni dijo:

¿Porqué no usas?

ActiveSheet.ListObjects(1).Range.Copy

en lugar de

Dim nTabla As String
nTabla = ActiveSheet.ListObjects(1).Name
ActiveSheet.Range(nTabla & "[#All]").Select
Selection.Copy

 

Hola @Antoni,  también está genial tú propuesta.

Ahora con la tuya hago un 3 x 1.??

Saludos y gracias a los dos.

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.