4 个相互链接(活动 X)滚动条



首先,感谢您的时间,我不是 VBA 专家,但尽力自学。我已经为此苦苦挣扎了几个星期,但无法完成,所以我求助于你们专家。我在网络上的任何地方都找不到合适的解决方案。

问题/挑战:我在工作表上有 4 个需要链接的活动 x 滚动条。它们总是需要加起来达到 100%,这意味着如果我向下拉一个滚动条(我颠倒了它们的滚动方向,向上 = 向上,向下 = 向下(,其他滚动条需要按比例上升 - 保持 100%。

它应该如何工作是我有 8 个"TA"——将它们视为市场——我每个人都有 4 个起始位置。这些也定义了它们应该移动的比例。我将起始位置加载到滚动条中没有问题。忽略这些 TA,这只是为了给你背景。这是我正在努力的运动。例如:

Start TA "xx":
Pos 1: 50%
Pos 2: 20%
Pos 3: 20%
Pos 4: 10%
Sum = 100%

现在我将 Scrollbar1 从 50% 上移到 70%。这应该会导致滚动条 2、3 和 4 按以下比例下降,保持 100%:

Scrollbar1 + 20%:
Scrollbar2: - 20% x (20/20+20+10) = -8%
Scrollbar3: - 20% x (20/20+20+10) = -8%
Scrollbar4: - 20% x (10/20+20+10) = -4%
Sum = 100%

我尝试了很多选项,但问题是滚动条值既是输入又是输出:

1( 我只是拿输出/链接单元格并计算与起始位置的差异,从其他位置按比例减去它们:这会导致"更改事件循环" - 因为来自 Pos 1 的更改事件触发 2、3 和 4,来自 2 个触发器 1、3 和 4 的变化事件,...等等。

因此:

Private Sub ScrollBar1_Change()
'scrollbar 1 reverse:
front-end output cell pos 1 = ScrollBar1.Max - ScrollBar1.Value
'other scrollbars:
front-end output cell pos 2 = start pos 2 + (difference start 1 and new pos 1) * (proportion 2)
front-end output cell pos 3 = start pos 3 + (difference start 1 and new pos 1) * (proportion 3)
front-end output cell pos 4 = start pos 4 + (difference start 1 and new pos 1) * (proportion 4)

如果我将类似的代码放在更改事件滚动条 2 - 4 中,它会导致"更改事件循环",最终以某种平衡位置结束。

2(我通过在工作表中进行所有计算来规避更改事件,但是滚动条并不总是随着计算而移动,从而导致功能问题。

因此:

我在工作表中执行相同的计算,而不是VBA代码:

我从scrollbar1中获取输入:

  • 起始值
  • 滚动条值->计算一张纸的差值,计算 2,3 和 4 的比例并将其发送回滚动条 2、3 和 4 等等......

这有效,但是一旦您开始进行复杂的移动,"背景值"就会开始远离显示的滚动条值,从而限制移动(因为 max 需要为 100 和最小值 0(。这很难解释和展示,但我希望你们中的一些人对此有经验。发布此内容的代码和工作表示例太多。

结论是,我需要以即时、简单和正确的方式链接滚动条,以便它们平滑和正确地移动,并且滚动条始终显示实际位置。

我已经为此工作了几个星期,它让我伤透了。我似乎不能做对,但正如我所说,我不是专家。如果是数学,我会简单地陈述类似scrollbar1.value + scrollbar2.value + scrollbar3.value + scrollbar4.value = 100%的东西,那就是这样,但当然它不是那样工作的......

只知道有一个简单而美丽的解决方案,但我想我只是没有能力。提前非常感谢您帮助我解决这个问题。

亲切问候

J.

也许创建某种"内存"来记住滚动条的最后一个位置,以便它只使用最后的差异进行计算?只是一个想法...

阅读有关GetScrollInfo和其他此类命令的信息,但无法理解它们或让它们工作...

谢谢

J.

相关内容

  • 没有找到相关文章

最新更新