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

时间:2015-06-12 06:33:16

标签: excel vba excel-vba textbox

我找不到办法做到这一点。我认为这是一个非常基本的问题,但我只是新的excel VBA,无法找到合适的公式。

最近我明白要做到这一点,我必须首先将 textboxes 中的每一个更改为整数,然后我可以将其添加到单个 {{1} } ,所以我将每个值转换为整数,而我将它们逐个加到一个文本框中。

我试过这段代码。

textbox

如何将多个文本框(8个文本框)合并为一个文本框?

2 个答案:

答案 0 :(得分:2)

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

假设我在UserForm以下, TextBox1 TextBox3
UserForm1
TextBox3将是TextBox1和TextBox2的总和。

右键单击Project下的 UserForm1 并选择查看代码,然后输入 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

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

样品输出:
Sample

答案 1 :(得分:1)

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

最简单的方法是创建一个简单的宏来对文本框的值求和,然后从用户可能更改的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

如前所述,您需要为八个方框中的每一个进行一次更改事件。

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