如何将 8 个文本框中的值加到一个文本框中?

How can I sum value in 8 textboxes to the a single textbox?

我找不到执行此操作的方法。我认为这是一个非常基本的问题,但我只是 excel VBA 的新手,找不到正确的公式。

最近我了解到要求和,我必须先将每个 textboxes 变成整数,然后我可以将它加到一个 textbox,所以我将每个值转换为整数,同时将它们一一求和到一个文本框。

我试过这个代码。

Private Sub txtTotal_Change() 
txtTotal.Value = CInt(txtKas) + CInt(txtInvestasi) + CInt(txtDanaTerbatas) + CInt(txtBruto) + ...
End Sub

如何将多个文本框(8 个文本框)汇总为一个文本框?

当有人试图更改总计框中的值时,您(可能)不希望对文本框中的值求和 - 您希望在其他八个框中的任何一个值发生变化时对它们求和。

执行此操作的最简单方法可能是创建一个简单的宏来对文本框的值求和,然后从用户可能更改的 8 的 change-events 中调用它。

对文本框求和并放入总计框的宏

Private Sub sum_boxes()
    txtTotal = CLng(txtKas.Value) + CLng(Investasi.Value) + CLng(DanaTerbatas.Value)
End Sub

更改事件会是什么样子

Private Sub txtKas_Change() 
    Call sum_boxes
End Sub

如前所述,您需要为八个盒子中的每一个制作一个 change-event。

换句话说,使用文本框来存储总数可能不是一个好主意,因为您不希望用户更改其中的内容。一种选择是锁定文本框,正如 PatricK 所建议的那样,另一种选择是使用不同的 object 来保存数字,例如一个标签,只需将其标题更改为类似于您目前的总数即可。

您需要在用户可更改的文本框上添加 Change 事件。

假设我有下面的 UserForm 和 TextBox1TextBox3:

TextBox3 将是 TextBox1 和 TextBox2 的总和。

右键单击项目下的UserForm1和select查看代码,然后输入TextBoxesSum Sub(我使用 Double 类型接受小数):

Private Sub TextBoxesSum()
    Dim Total As Double
    Total = 0
    If Len(TextBox1.Value) > 0 Then Total = Total + CDbl(TextBox1.Value)
    If Len(TextBox2.Value) > 0 Then Total = Total + CDbl(TextBox2.Value)
    ' Add more for the rest of your text boxes
    TextBox3.Value = Total
End Sub

为了安全和聪明,您还应该根据用户输入进行密钥检查。由于文本框的数量,最好有一个函数来处理它:

Private Function NumericOnly(ByVal KeyAscii As MSForms.ReturnInteger) As MSForms.ReturnInteger
    Dim Key As MSForms.ReturnInteger
    Select Case KeyAscii
        Case 46, 48 To 57 ' Accept only decimal "." and numbers [0-9]
            Set Key = KeyAscii
        Case Else
            KeyAscii = 0 ' Minor bug earlier
            Set Key = KeyAscii
    End Select
    Set NumericOnly = Key
End Function

现在回到UserForm1对象,右击TextBox1然后查看代码,输入:

Private Sub TextBox1_Change()
    TextBoxesSum
End Sub

还要检查 KeyPress 事件:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = NumericOnly(KeyAscii)
End Sub

现在复制上面的 2 组 TextBox Sub 并粘贴到下面,然后替换下划线之前的字符串以匹配您拥有的文本框的名称。

示例输出: