Problemas con el código suma al momento de hacerlo en otro formulario

Tengo un código que me ayudo el experto JAMES BOND, que consta de la suma de 3 cajas de texto que pueden contener letras y números pero al final me las va suma las que reconosca que tenga numero.

En esta captura de pantalla cuando lo hice primero en la practica funciono perfectamente la macros aunque en la macro me exigió que declara la variable suma pero al final funciono bien y le puse en cada text1, text2, text3 su evento changue la macro sumar.

Ahora mi pregunta es si ese mismo código funcionó bien por que cuando lo hice desde cero en otra hoja de calculo me sale error si es el mismo código alguien me puede explicar.

Aquí es cuando ejecuto la macro en otra hoja con el mismo código y al digital en la primera nota me sale error

Y este es el código del experto JAMES BOND que me ayudo lo único que me cambie fue el range (A4) nomas ya que desde allí empieza el encabezado y después todo esta igual lo que no entiendo por que sale ese error y antes si funciono.

Sub suma()
Dim suma As Double
FILAS = Range("A4").CurrentRegion.Rows.Count
TextBox1.Text = FILAS
For I = 2 To 4
    VALOR = Val(UserForm1.Controls("TEXTBOX" & I).Text)
    If IsNumeric(VALOR) Then suma = VALOR + suma
Next I
TextBox5.Text = suma
End Sub
Private Sub TextBox2_Change()
suma
End Sub
Private Sub TextBox3_Change()
suma
End Sub
Private Sub TextBox4_Change()
suma
End Sub

2 respuestas

Respuesta
1

No entiendo su código. Si haces una función para operaciones matemáticas fuera del control, lo correcto es pasarle los valores por argumentos y devolver el resultado a la función principal.

¿Lo qué quieres hacer es simplemente sumar?

Prueba este código:

Sub SumarTodo(Valor1 As Double, Valor2 As Double, Valor3 As Double)
Dim Total As Double
Total = Valor1 + Valor2 + Valor3
Me.TextBox4.Value = Total
End Sub
Private Sub TextBox1_Change()
Dim Val1 As Double, Val2 As Double, Val3 As Double
If Not IsNumeric(Me.TextBox1.Value) Then Val1 = 0 Else Val1 = Me.TextBox1.Value
If Not IsNumeric(Me.TextBox2.Value) Then Val2 = 0 Else Val2 = Me.TextBox2.Value
If Not IsNumeric(Me.TextBox3.Value) Then Val3 = 0 Else Val3 = Me.TextBox3.Value
Call SumarTodo(Val1, Val2, Val3)
End Sub
Private Sub TextBox2_Change()
Dim Val1 As Double, Val2 As Double, Val3 As Double
If Not IsNumeric(Me.TextBox1.Value) Then Val1 = 0 Else Val1 = Me.TextBox1.Value
If Not IsNumeric(Me.TextBox2.Value) Then Val2 = 0 Else Val2 = Me.TextBox2.Value
If Not IsNumeric(Me.TextBox3.Value) Then Val3 = 0 Else Val3 = Me.TextBox3.Value
Call SumarTodo(Val1, Val2, Val3)
End Sub
Private Sub TextBox3_Change()
Dim Val1 As Double, Val2 As Double, Val3 As Double
If Not IsNumeric(Me.TextBox1.Value) Then Val1 = 0 Else Val1 = Me.TextBox1.Value
If Not IsNumeric(Me.TextBox2.Value) Then Val2 = 0 Else Val2 = Me.TextBox2.Value
If Not IsNumeric(Me.TextBox3.Value) Then Val3 = 0 Else Val3 = Me.TextBox3.Value
Call SumarTodo(Val1, Val2, Val3)
End Sub

Esta es la manera correcta de hacer lo que quieres.

Así funciona: video demo

Andy

Bah solo cambia los nombres de los TextBox, yo los puse 1, 2, 3 y el resultado al 4. En tu caso creo que es 2, 3, 4, y el resultado al 5

Respuesta
1

Probé la modificación que hice a tu macro y este es el resultado, no se presento ningún problema

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas