VBA文本框';s更改会影响第二个文本框,反之亦然

VBA文本框';s更改会影响第二个文本框,反之亦然,vba,textbox,Vba,Textbox,在我的表格上我有更多的文本框,但其中有两个是特别的。它是名为tbVolume的文本框和名为tbWeight的文本框 如果我更改tbVolume,则通过其他参数计算tbWeight的值,但当我将相同的过程添加到tbWeight(计算tbVolume的值)时,它会创建某种循环链接,因为体积的更改会更改重量,重量的更改会更改体积,等等 是否存在tbVolume\u Changed()/tbWeight\u Changed()的一些参数,这些参数可以告诉程序值是由用户还是由应用程序更改的 或者,您是否有

在我的表格上我有更多的文本框,但其中有两个是特别的。它是名为
tbVolume
的文本框和名为
tbWeight
的文本框

如果我更改
tbVolume
,则通过其他参数计算
tbWeight
的值,但当我将相同的过程添加到
tbWeight
(计算
tbVolume
的值)时,它会创建某种循环链接,因为体积的更改会更改重量,重量的更改会更改体积,等等

是否存在
tbVolume\u Changed()
/
tbWeight\u Changed()
的一些参数,这些参数可以告诉程序值是由用户还是由应用程序更改的


或者,您是否有其他解决此双文本框问题的方法?

您可以使用以下方法代替
tbWeight\u Change()
tb\u Volume\u Change()

Private Sub tbWeight_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    ' do everything you want to do
End Sub
当然:

Private Sub tbVolume_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    ' do everything you want to do
End Sub
更改文本框的值,通过选项卡或鼠标单击退出文本框,文本框的其他值将更改


如果在文本框中写入时需要并行输出,则可以使用额外的文本框仅用于显示计算值。

而不是
tbWeight\u Change()
tb\u Volume\u Change()
,您可以使用以下选项:

Private Sub tbWeight_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    ' do everything you want to do
End Sub
当然:

Private Sub tbVolume_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    ' do everything you want to do
End Sub
更改文本框的值,通过选项卡或鼠标单击退出文本框,文本框的其他值将更改


如果在文本框中写入时需要并行输出,则可以使用额外的文本框来显示计算值。

Oh。。最后很简单,只有两个新的布尔值,一切正常:

Dim editingVolumeByApp As Boolean
Dim editingWeightByApp As Boolean

Private Sub tbVolume_Change()
  If editingVolumeByApp = False Then
    '...
    editingWeightByApp = True
    tbWeight.Value = finalVolume * CDbl(tbMatDensi.Value)
    editingWeightByApp = False
    '...
  End If
End Sub

Private Sub tbWeight_Change()
  If editingWeightByApp = False Then
    '...
    editingVolumeByApp = True
    tbVolume.Value = finalVolume * CDbl(tbMatComplCoef.Value)
    editingVolumeByApp = False
    '...
  End If
End Sub

而且效果很好:-)

哦。。最后很简单,只有两个新的布尔值,一切正常:

Dim editingVolumeByApp As Boolean
Dim editingWeightByApp As Boolean

Private Sub tbVolume_Change()
  If editingVolumeByApp = False Then
    '...
    editingWeightByApp = True
    tbWeight.Value = finalVolume * CDbl(tbMatDensi.Value)
    editingWeightByApp = False
    '...
  End If
End Sub

Private Sub tbWeight_Change()
  If editingWeightByApp = False Then
    '...
    editingVolumeByApp = True
    tbVolume.Value = finalVolume * CDbl(tbMatComplCoef.Value)
    editingVolumeByApp = False
    '...
  End If
End Sub

它工作正常:-)

试试:
AfterUpdate
…@fuseldieb我测试了
AfterUpdate
-在我的情况下效果是一样的。:)试试:
AfterUpdate
…@fuseldieb我测试了
AfterUpdate
-对我来说效果一样。:)