Como sumar varios textbox con un botón

Buenas tardes expertos. Tengo este formulario, desde otra hoja traigo los datos, que puede ser del código 1 hasta el código 10, la cantidad de códigos es variable. Lo que necesito es: calcular el costo (0.5x1x2=1) y el porcentaje que representa ((1/4)*100)=25%) con el botón calcular.

¿Adicional se podría poner algún control de falta de datos? Es decir si falta la CANT "1-3" o el REND "2-5" que son los que coloco manualmente, ya que son datos, me solicite el dato pues no puede ir cero ni vació.

2 respuestas

Respuesta
1

Recomendación.

Nombra tus textbox del 1 al 10 de la siguiente manera:

TextTari_1 al TextTari_10

TextCant_1 al TextCant_10

TextRend_1 al TextRend_10

TextCost_1 al TextCost_10

TextPorc_1 al TextPorc_10

Pon el siguiente código en tu botón Calcular:

Private Sub CommandButton1_Click()
  Dim i As Long, tot As Double
  '
  'Validaciones
  For i = 1 To 10
    If Controls("TextCant_" & i).Value = "" Then
      MsgBox "Falta dato en cantidad : " & i
      Exit Sub
    End If
    If Controls("TextRend_" & i).Value = "" Then
      MsgBox "Falta dato en REND : " & i
      Exit Sub
    End If
  Next
  '
  'Calcular Costo
  For i = 1 To 10
    Controls("TextCost_" & i).Value = Controls("TextTari_" & i) * _
      Controls("TextCant_" & i) * Controls("TextRend_" & i)
    tot = tot + Controls("TextCost_" & i).Value
  Next
  '
  'Calcular Porcentaje
  For i = 1 To 10
    Controls("TextPorc_" & i).Value = (Controls("TextCost_" & i).Value / tot) * 100
  Next
End Sub

Hice unos ajustes en la validación. Prueba con este código:

Private Sub CommandButton1_Click()
  Dim i As Long, tot As Double
  '
  'Validaciones
  For i = 1 To 3
    If Controls("TextTari_" & i).Value <> "" Then
      If Controls("TextCant_" & i).Value = "" Then
        MsgBox "Falta dato en cantidad : " & i
        Controls("TextCant_" & i).SetFocus
        Exit Sub
      End If
      If Controls("TextRend_" & i).Value = "" Then
        MsgBox "Falta dato en REND : " & i
        Controls("TextRend_" & i).SetFocus
        Exit Sub
      End If
    End If
  Next
  '
  'Calcular Costo
  For i = 1 To 3
    If Controls("TextTari_" & i).Value <> "" Then
      Controls("TextCost_" & i).Value = Controls("TextTari_" & i) * _
        Controls("TextCant_" & i) * Controls("TextRend_" & i)
      tot = tot + Controls("TextCost_" & i).Value
    End If
  Next
  '
  'Calcular Porcentaje
  For i = 1 To 3
    If Controls("TextTari_" & i).Value <> "" Then
      Controls("TextPorc_" & i).Value = (Controls("TextCost_" & i).Value / tot) * 100
    End If
  Next
End Sub

DANTE BUENAS NOCHES.

Te comento que el primer código me corre excelente, pero me obliga a llenar todos los códigos, es decir las 10 herramientas.

pero generalmente no son diez exactas, en ocasiones son dos, tres, cinco, siete, etc, es decir son variables y cada vez diferentes, al tener menos de diez , la macro pide mas datos y se escapa.

Disculpa se puede redondear a tres decimales el resultado del porcentaje??

de antemano te quedo agradecido.

Eres un Dios en la materia.

Prueba la segunda macro que publiqué.

Prueba esta:

Private Sub CommandButton1_Click()
  Dim i As Long, tot As Double
  '
  'Validaciones
  For i = 1 To 3
    If Controls("TextTari_" & i).Value <> "" Then
      If Controls("TextCant_" & i).Value = "" Then
        MsgBox "Falta dato en cantidad : " & i
        Controls("TextCant_" & i).SetFocus
        Exit Sub
      End If
      If Controls("TextRend_" & i).Value = "" Then
        MsgBox "Falta dato en REND : " & i
        Controls("TextRend_" & i).SetFocus
        Exit Sub
      End If
    End If
  Next
  '
  'Calcular Costo
  For i = 1 To 3
    If Controls("TextTari_" & i).Value <> "" Then
      Controls("TextCost_" & i).Value = Controls("TextTari_" & i) * _
        Controls("TextCant_" & i) * Controls("TextRend_" & i)
      tot = tot + Controls("TextCost_" & i).Value
    End If
  Next
  '
  'Calcular Porcentaje
  For i = 1 To 3
    If Controls("TextTari_" & i).Value <> "" Then
      Controls("TextPorc_" & i).Value = Round((Controls("TextCost_" & i).Value / tot) * 100, 3)
    End If
  Next
End Sub
Respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas