如何在VBA中实现重新计算功能?

时间:2016-07-06 22:02:22

标签: vba excel-vba excel

我有两组文本框A,B和C,D。我必须手动输入A和B中的值,而后端的代码计算C = A /(A + B)和D = B /(A + B)。

如果我更改A和B中的值,则更新C和D中的值。

有没有办法反过来发生。

如果这不是重新计算功能相关的问题,我表示歉意。

再次感谢!

1 个答案:

答案 0 :(得分:0)

更新

我会创建一个处理逻辑的方法。您必须设置一个标记以防止重新触发计算。

Public StopCalculations As Boolean

Private Sub a_Change()
    If Not StopCalculations Then UpdateValues a
End Sub

Private Sub b_Change()
    If Not StopCalculations Then UpdateValues b
End Sub

Private Sub c_Change()
    If Not StopCalculations Then UpdateValues c
End Sub

Private Sub d_Change()
    If Not StopCalculations Then UpdateValues d
End Sub

Sub UpdateValues(txt As MSForms.TextBox)
    StopCalculations = True

    Select Case txt
        Case a
           b.value = a.value
        Case b
            b.value = c.value
        Case c

        Case d
    End Select

    StopCalculations = False
End Sub

您可以在工作簿名称集合中存储和检索隐藏值,如下所示:

Private Sub UserForm_Initialize()
    a.value = getNameValue(a.Name)
    b.value = getNameValue(b.Name)
    c.value = getNameValue(c.Name)
    d.value = getNameValue(d.Name)
    Application.EnableEvents = False
End Sub

Private Sub UserForm_Terminate()
    ThisWorkbook.Names.Add a.Name, a.Text, False
    ThisWorkbook.Names.Add b.Name, b.Text, False
    ThisWorkbook.Names.Add c.Name, c.Text, False
    ThisWorkbook.Names.Add d.Name, d.Text, False
End Sub

Function getNameValue(value As String)
    Dim s As String
    On Error Resume Next
    s = ThisWorkbook.Names(value).value
    getNameValue = Right(s, Len(s) - 1)
    On Error GoTo 0
End Function