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 de José Saúl Méndez Alonso
1
1
José Saúl Méndez Alonso, Programación Avanzada en Visual Basic, VBA, Modelo de Objetos de...
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