问题描述
|
为清楚起见,请参见图片。
我有5个变量(A,B,C,D和E),每个变量的范围从0到100。我需要所有这些变量的总和始终为100,而不是更多,更少。但是,按照目前的设置方式,如果我将变量A从21更改为51,则总数变为130。
我如何设置它,以便如果我更改一个变量,其他变量可以自动补偿该增加或减少,使得总数始终为100?
解决方法
使用“滑块更改”事件,以便在一个滑块更改值时缩放其他滑块,使值总计为100
使用3个滑块的示例代码-您可以缩放它以允许任意数量的滑块
Private UpdateSlider As Boolean
Private Sub ScaleSliders(slA As Double,ByRef slB As Double,ByRef slC As Double)
Dim ScaleFactor As Double
If (slB + slC) = 0 Then
ScaleFactor = (100# - slA)
slB = ScaleFactor / 2
slC = ScaleFactor / 2
Else
ScaleFactor = (100# - slA) / (slB + slC)
slB = slB * ScaleFactor
slC = slC * ScaleFactor
End If
End Sub
Private Sub ScrollBar1_Change()
Dim slB As Double,slC As Double
\' UpdateSlider = False
If Not UpdateSlider Then
slB = ScrollBar2.Value
slC = ScrollBar3.Value
ScaleSliders ScrollBar1.Value,slB,slC
UpdateSlider = True
ScrollBar2.Value = slB
ScrollBar3.Value = slC
UpdateSlider = False
End If
End Sub
Private Sub ScrollBar2_Change()
Dim slB As Double,slC As Double
If Not UpdateSlider Then
slB = ScrollBar1.Value
slC = ScrollBar3.Value
ScaleSliders ScrollBar2.Value,slC
UpdateSlider = True
ScrollBar1.Value = slB
ScrollBar3.Value = slC
UpdateSlider = False
End If
End Sub
Private Sub ScrollBar3_Change()
Dim slB As Double,slC As Double
If Not UpdateSlider Then
slB = ScrollBar1.Value
slC = ScrollBar2.Value
ScaleSliders ScrollBar1.Value,slC
UpdateSlider = True
ScrollBar1.Value = slB
ScrollBar2.Value = slC
UpdateSlider = False
End If
End Sub
请注意,滑块数据类型为整数,因此您可能需要允许舍入不等于100