ListBox表单控件滚动

时间:2019-06-28 22:00:09

标签: excel vba userform

我一直在进行大量研究,最终我让步了,希望社区能够提供帮助。我有一个FORM CONTROL列表框,而不是活动的x。我出于各种不必要的原因而故意使用表单控件(除非您可以指导我如何100%确保activeX控件在打开工作簿时不会自行调整大小)。我一生无法解决如何使表单控件列表框滚动到所选值并将其显示的问题。这是我所拥有的:

ActiveSheet.ListBoxes("List Box 13").Selected = 100

列表中有1000个值可供选择。运行此命令时,将选择#100,但不在视野中。列表框不会移动。

  

如何使滚动发生,使所选值位于顶部?

ActiveX为:

.TopIndex

但这不适用于窗体控件。

1 个答案:

答案 0 :(得分:0)

滚动到给定的列表框索引以显示在可见列表的顶部

  

我一生无法解决如何使表单控件列表框滚动到所选值并将其显示的问题。

似乎实际上没有标准方法(撇开API调用)来控制 form 控件列表框而不是 Userform 的列表框内部显示的可见性的 ActiveX 控件列表框。

其他提示

为了完整性(并出于评论的目的),我演示了如何通过组合两个导航属性(即通过设置 .ListIndex 和< strong> .TopIndex 以及定义的索引 :-),例如通过以下过程:

示例通话

  ScrollTo 100          ' attention: zerobased

  ScrollTo ActiveSheet.ListBoxes("List Box 13").Selected 

帮助程序

...将当前ListIndex设置为例如100 AND 将其定义为.TopIndex

旁注:当然,目标列表末端中的目标甚至可能显示在.TopIndex下方,具体取决于实际的.ListCount )< / p>

Private Sub ScrollTo(ByVal idx&)
' Purpose: Scroll to given target index to be displayed on top of visible list
' Site:    https://stackoverflow.com/questions/56813550/listbox-form-control-scrolling 
' Author:  https://stackoverflow.com/users/6460297/t-m
    Me.ListBox1.TopIndex = idx
    Me.ListBox1.ListIndex = idx
End Sub