VBA - 在无限计算循环中具有多个TextBox的UserForm [英] VBA - UserForm with multiples TextBoxes in infinite calculation loop

查看:268
本文介绍了VBA - 在无限计算循环中具有多个TextBox的UserForm的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



但是,我如何避免无限循环 ,因为第一个将重新计算第二个将重新计算第一个等等...



这是我的UserForm代码的一部分,只有TextBox_Change(s ):

  Private Sub TxtNewVal_Change()
如果InStr(1,Me.TxtNewVal.Value,,)然后Me.TxtNewVal.Value = Val(Replace(Me.TxtNewVal.Value,,,。))

'重新计算值
如果右(Me.TxtNewVal.Value, 1)< 然后
Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value)* Val(Me.TxtTxEUR.Value)
Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value)* Val(Me .TxtTxUSD.Value)
End If
End Sub


Private Sub TxtTxEUR_Change()
如果InStr(1,Me.TxtTxEUR.Value, ,)然后Me.TxtTxEUR.Value = Val(替换(Me.TxtTxEUR.Value,,,。))
如果Val(Me.TxtTxEUR.Value)= 0,那么Me.TxtTxEUR.Value = TxEur
'重新计算值=
如果右(Me.TxtTxEUR.Value,1)< 那么Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value)* Val(Me.TxtTxEUR.Value)
'Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value)* Val(Me.TxtTxUSD。 Value)
End Sub


Private Sub TxtTxUSD_Change()
如果InStr(1,Me.TxtTxUSD.Value,,)然后Me.TxtTxUSD.Value = Val(Replace(Me.TxtTxUSD.Value,,,。))
如果Val(Me.TxtTxUSD.Value)= 0,那么Me.TxtTxUSD.Value = TxUsd
'重新计算值=
'Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value)* Val(Me.TxtTxEUR.Value)
如果右(Me.TxtTxUSD.Value,1)< 然后Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value)* Val(Me.TxtTxUSD.Value)
End Sub


Private Sub TxtValEUR_Change()
如果InStr(1,Me.TxtValEUR.Value,,)然后Me.TxtValEUR.Value = Val(替换(Me.TxtValEUR.Value,,,。))
'重新计算值=
'Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value)* Val(Me.TxtTxEUR.Value)

如果Val(Me.TxtTxEUR.Value)< 0和右(Me.TxtValEUR.Value,1)< 然后_
Me.TxtNewVal.Value = Val(Me.TxtValEUR.Value)/ Val(Me.TxtTxEUR.Value)
'Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value)* Val (Me.TxtTxUSD.Value)
End Sub



Private Sub TxtValUSD_Change()
如果InStr(1,Me.TxtValUSD.Value, ,)然后Me.TxtValUSD.Value = Val(Replace(Me.TxtValUSD.Value,,,。))
'重新计算值=
如果Val(Me.TxtTxUSD.Value) <> 0和右(Me.TxtValUSD.Value,1)< 然后_
Me.TxtNewVal.Value = Val(Me.TxtValUSD.Value)/ Val(Me.TxtTxUSD.Value)
'Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value)* Val (Me.TxtTxEUR.Value)
'Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value)* Val(Me.TxtTxUSD.Value)
End Sub


解决方案

如下所示:

 私人bIsUpdating As Boolean 


Private Sub TxtNewVal_Change()
如果bIsUpdating然后退出Sub
bIsUpdating = True
。 ..更新其他文本框
bIsUpdating = False
End Sub

私有Sub TxtValEUR_Change()
如果bIsUpdating然后退出Sub
bIsUpdating = True
...更新其他文本框
bIsUpdating = False
End Sub

...等...


I have an UserForm with 5 TextBoxes, and each time one is updated I recalculate the others.

But how do I avoid a "infinite loop" as the first will recalculate second which will recalculate the first and so on...

Here is a part of my UserForm's code, only the TextBox_Change(s) :

Private Sub TxtNewVal_Change()
If InStr(1, Me.TxtNewVal.Value, ",") Then Me.TxtNewVal.Value = Val(Replace(Me.TxtNewVal.Value, ",", "."))

'recalculate values
If Right(Me.TxtNewVal.Value, 1) <> "." Then
    Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxEUR.Value)
    Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxUSD.Value)
End If
End Sub


Private Sub TxtTxEUR_Change()
If InStr(1, Me.TxtTxEUR.Value, ",") Then Me.TxtTxEUR.Value = Val(Replace(Me.TxtTxEUR.Value, ",", "."))
If Val(Me.TxtTxEUR.Value) = 0 Then Me.TxtTxEUR.Value = TxEur
'recalculate values =
If Right(Me.TxtTxEUR.Value, 1) <> "." Then Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxEUR.Value)
'Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxUSD.Value)
End Sub


Private Sub TxtTxUSD_Change()
If InStr(1, Me.TxtTxUSD.Value, ",") Then Me.TxtTxUSD.Value = Val(Replace(Me.TxtTxUSD.Value, ",", "."))
If Val(Me.TxtTxUSD.Value) = 0 Then Me.TxtTxUSD.Value = TxUsd
'recalculate values =
'Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxEUR.Value)
If Right(Me.TxtTxUSD.Value, 1) <> "." Then Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxUSD.Value)
End Sub


Private Sub TxtValEUR_Change()
    If InStr(1, Me.TxtValEUR.Value, ",") Then Me.TxtValEUR.Value = Val(Replace(Me.TxtValEUR.Value, ",", "."))
'recalculate values =
'Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxEUR.Value)

If Val(Me.TxtTxEUR.Value) <> 0 And Right(Me.TxtValEUR.Value, 1) <> "." Then _
    Me.TxtNewVal.Value = Val(Me.TxtValEUR.Value) / Val(Me.TxtTxEUR.Value)
'Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxUSD.Value)
End Sub



Private Sub TxtValUSD_Change()
    If InStr(1, Me.TxtValUSD.Value, ",") Then Me.TxtValUSD.Value = Val(Replace(Me.TxtValUSD.Value, ",", "."))
'recalculate values =
If Val(Me.TxtTxUSD.Value) <> 0 And Right(Me.TxtValUSD.Value, 1) <> "." Then _
    Me.TxtNewVal.Value = Val(Me.TxtValUSD.Value) / Val(Me.TxtTxUSD.Value)
'Me.TxtValEUR.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxEUR.Value)
'Me.TxtValUSD.Value = Val(Me.TxtNewVal.Value) * Val(Me.TxtTxUSD.Value)
End Sub

解决方案

Something like this:

Private bIsUpdating As Boolean


Private Sub TxtNewVal_Change()
    If bIsUpdating Then Exit Sub
    bIsUpdating = True
    ... update other text boxes
    bIsUpdating = False
End Sub

Private Sub TxtValEUR_Change()
    If bIsUpdating Then Exit Sub
    bIsUpdating = True
    ... update other text boxes
    bIsUpdating = False
End Sub

... etc ...

这篇关于VBA - 在无限计算循环中具有多个TextBox的UserForm的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆