我找不到办法做到这一点。我认为这是一个非常基本的问题,但我只是新的excel VBA,无法找到合适的公式。
最近我明白要做到这一点,我必须首先将 textboxes
中的每一个更改为整数,然后我可以将其添加到单个 {{1} } ,所以我将每个值转换为整数,而我将它们逐个加到一个文本框中。
我试过这段代码。
textbox
如何将多个文本框(8个文本框)合并为一个文本框?
答案 0 :(得分:2)
您需要在文本框中添加用户可更改的更改事件。
假设我在UserForm以下, TextBox1 到 TextBox3 :
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并粘贴到下面,然后替换下划线之前的字符串以匹配您拥有的文本框的名称。
样品输出:
答案 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建议的那样,另一种选择是使用不同的对象来保存数字,例如,一个标签,只是将其标题更改为与您目前的总标记类似。