VBA - 在无限计算循环中具有多个TextBox的UserForm [英] VBA - UserForm with multiples TextBoxes in infinite calculation loop
本文介绍了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屋!
查看全文