excel - 如何修复 Excel 列表框无法将最后一个元素滚动到 View 中的问题

标签 excel vba user-interface listbox

从我记事起,我在 Excel UI 中遇到的一个致命问题就是列表框滚动。

当列表框中有更多可以显示的元素时,将会出现滚动条。但是,在某些情况下,将滚动条一直滚动到列表底部并释放它,会使滚动条向上“跳跃”一个档次,并且您将无法看到列表中的最后一项。如下所示: Can't scroll all the way down

有很多论坛帖子提出了这个问题,解决方案一直是“将积分高度属性设置为 false,然后再次将其设置为 true”。其作用是稍微调整列表框的大小,使其高度四舍五入为单行的高度,然后不会隐藏任何项目。

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
End With

但是,在某些情况下这不起作用。如果您是:

  1. 以编程方式设置列表框的高度
  2. 使用简单的列表框选择 (fmMultiSelectSingle)

然后,只需将整体高度设置为 false,然后在更改高度之后或之间将其设置为 true,就会调整列表框的高度,但是当您向下滚动时,问题仍然存在 - 最后一项看不到。

这个令人沮丧的问题的关键在于,虽然互联网上的其他人都确认“integralHeight”解决方案对他们有效,但这些非常特殊的情况却令人沮丧,想知道为什么它对他们不起作用。那么他们如何解决问题呢?

最佳答案

我必须自己发现一些在其他地方找不到的东西(这就是我将其发布在这里的原因),即这个问题具有依赖于选择方法的附加维度。虽然我无法理解滚动条的工作方式不仅与高度和整体高度属性相关,而且还与 .MultiSelect 属性相关,但我发现它确实如此。

当上面显示的 .IntegralHeight 方法不起作用时,以下方法会以某种方式起作用:

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
    .MultiSelect = fmMultiSelectSingle
    .MultiSelect = fmMultiSelectExtended
End With

只需将 .MultiSelect 属性更改为 fmMultiSelectSingle,然后将其恢复为所需的选择样式,.IntegralHeight 属性将自动将列表框的高度调整为与未执行这些操作时略有不同的高度执行 - 差异导致滚动条正常工作:

Workaround worked

我希望这种特殊情况的发现和更精确的解决方法可以帮助其他人免去我必须经历的挫折和实验时间。

关于excel - 如何修复 Excel 列表框无法将最后一个元素滚动到 View 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859459/

相关文章:

c++ - 暂时使 MFC 功能区中的控件处于非事件状态或禁用状态

python - 如何将消息从 C 代码打印到 Tkinter

excel - 引用在另一个单元格中的字符串中定义的单元格

python - excel单元格颜色读取和设置的差异

vba - 如何在 Excel VBA 用户窗体中创建两列查找组合框

python - 使用python将特殊值粘贴到另一个多个excel文件

vba - 加快声明变量?

arrays - Excel VBA 和数组公式

html - VBA 获取用于更改 ID 的 HTML 元素信息

ios - 更改 ios 应用程序下方标签栏的高度和设计