Macro se queeda pegada

Hola, gracias por la ayuda del otro día, tengo mi ultima duda... Ya que estoy terminando la macro, hay alguna forma de hacer que si la macro se queda pegada(por mal ingreso de datos)esta se cierre en vez de que siga pegada...
No se si me entiendes..
Gracias

1 respuesta

Respuesta
1
Puedes usar el manejo de errores
Ejemplo
Sub Macro1()
    On Error GoTo Err_Macro1
    Dim i As Integer
    i = "a"
Exit_Macro1:
    Exit Sub
Err_Macro1:
    MsgBox Err.Number & "---" & Err.Description & "---" & Err.Source
    Resume Exit_Macro1
End Sub
otra cosa... ¿cómo puedo restringir en textbox que los datos que se en ingresen en el sean solo valores numéricos?, ya que estos los guardo en una columna en excel que después se suman yh si hay letras en alguna celda la suma me arroja error...
De ante mano
Gracias
PD:la respuesta anterior si me sirvió mucho
Para validar puedes usar la función IsNumeric de esa manera si alguien escribe algo distinto a números puedes enviar un msg y salir de la MACRO.
También puedes restringir que caracteres puedes aceptar en una caja de texto
Te dejo un código de ejemplo, pero si gustas te puede enviar el archivo con el ejemplo.
Private Sub CommandButton1_Click()
On Error GoTo Err_CommandButton1_Click
    If IsNumeric(Trim(TextBox1.Value)) And IsNumeric(Trim(TextBox2.Value)) Then
        MsgBox Val(Trim(TextBox1.Value)) + Val(Trim(TextBox2.Value))
    Else
        If Not IsNumeric(Trim(TextBox1.Value)) Then MsgBox "El contenido del cuadro de texto 1 no corresponde a una cantidad numérica"
        If Not IsNumeric(Trim(TextBox2.Value)) Then MsgBox "El contenido del cuadro de texto 2 no corresponde a una cantidad numérica"
    End If
Exit_CommandButton1_Click:
    Exit Sub
Err_CommandButton1_Click:
    MsgBox Err.Number & "---" & Err.Description & "---" & Err.Source, vbInformation, Application.Name
    Resume Exit_CommandButton1_Click:
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
On Error GoTo Err_TextBox1_KeyPress
    If InStr("0123456789." & Chr(8), Chr(KeyAscii)) = 0 Then KeyAscii = 0
Exit_TextBox1_KeyPress:
    Exit Sub
Err_TextBox1_KeyPress:
    MsgBox Err.Number & "---" & Err.Description & "---" & Err.Source, vbInformation, Application.Name
    Resume Exit_TextBox1_KeyPress:
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
On Error GoTo Err_TextBox2_KeyPress
    If InStr("0123456789." & Chr(8), Chr(KeyAscii)) = 0 Then KeyAscii = 0
Exit_TextBox2_KeyPress:
    Exit Sub
Err_TextBox2_KeyPress:
    MsgBox Err.Number & "---" & Err.Description & "---" & Err.Source, vbInformation, Application.Name
    Resume Exit_TextBox2_KeyPress:
End Sub
Eso de "restringir que caracteres puedes aceptar en una caja de texto" o sea ( 01234567890, ) solo números y la coma, ¿cómo podrías hacerlo?
Gracias
Usando el evento KeyPress de las cajas de texto
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
On Error GoTo Err_TextBox1_KeyPress 
If InStr("0123456789." & Chr(8), Chr(KeyAscii)) = 0 Then KeyAscii = 0 
Exit_TextBox1_KeyPress: 
    Exit Sub 
Err_TextBox1_KeyPress: 
    MsgBox Err.Number & "---" & Err.Description & "---" & Err.Source, vbInformation, Application.Name 
    Resume Exit_TextBox1_KeyPress: 
End Sub
Si gustas te mando el archivo donde hice la prueba

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas