viernes, 28 de diciembre de 2018

VBA: Suma acumulada de varios TextBox

Hoy trabajaremos con los TextBox de un UserForm para dar una posible solución a un lector que preguntaba:
[...] Quiero sumar varios Textbox. Son como 90. y todos empiezan con: Peso2 y un número que va del 1 al 90. Cómo puedo hacer para que me los sume automáticamente y los ponga en otro textbox?[...]


El objetivo es obtener la suma acumulada de todos esos 90 textbox sin tener que sumar uno por uno...
En el ejemplo me plantaré en la suma de 9 textbox:

VBA: Suma acumulada de varios TextBox



Para ello en el editor de VB insertaremos un UserForm y dentro de él los siguientes controles:
- 9 TextBox con nombres TxtCal1,TxtCal2,TxtCal3...TxtCal9
- 1 TextBox con nombre txtResultado
- 1 CommandButton cmdSalir
- 1 CommandButton cmdCalculo
- 1 label

VBA: Suma acumulada de varios TextBox



Es muy importante el patrón a la hora de dar nombre a los controles!!.

Para conseguir nuestro objetivo insertamos los siguientes evento en la ventana de código del UserForm:

Private Sub cmdCalculo_Click()
Dim ctrl As Control      'crea un objeto tipo Control

suma = 0
'recorre cada control dentro del formulario
For Each ctrl In Me.Controls
    'comprueba si es un TextBox
    If TypeName(ctrl) = "TextBox" Then
        'y que el TextBox se llama "TxtCal..." y tiene dato
        If InStr(1, ctrl.Name, "TxtCal") > 0 And ctrl.Text <> "" Then
            'en ese caso acumulamos el valor del TextBox
            suma = suma + CDbl(Controls(ctrl.Name).Value)
        End If
    End If
Next ctrl
'y acabamos llevando el acumulado al último textbox
Me.txtResultado.Value = suma
End Sub

Private Sub cmdSalir_Click()
'salimos del UserForm
Unload Me
End Sub



Y listo... como podemos comprobar en la primera imagen del post, la suma se obtiene de manera correcta.

OJO!!, recuerda escribir los números decimales con tu separador decimal... en mi caso la coma!

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.