如何修复无法将最后一个元素滚动到视图中的Excel列表框

Ala*_*ain 13 excel user-interface vba listbox

我在excel UI中遇到的一个杀手级问题,因为只要我记得,就是列表框滚动.

如果列表框中有更多可以显示的元素,则会显示一个scoll栏.但是,在某些情况下,将条形图一直滚动到列表底部并将其释放,将向上"跳跃"条形向下,您将无法看到列表中的最后一项.这在这里说明: 无法一直向下滚动

有许多论坛帖子提出了这个问题,解决方案一直是"将整数高度属性设置为false,然后再将其设置为true".这样做会稍微调整列表框的大小,使其高度四舍五入到单行的高度,然后不会隐藏任何项目.

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
End With
Run Code Online (Sandbox Code Playgroud)

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

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

然后简单地将积分高度设置为false,然后在更改高度之后或之间设置true将调整列表框的高度,但是当您向下滚动时,问题仍然存在 - 无法看到最后一项.

这个令人沮丧的问题的关键在于,虽然互联网上的其他人都在确认'integralHeight'解决方案适用于他们,但这些非常特殊的情况令人沮丧,想知道为什么它对他们不起作用.那么他们如何得到他们的修复?

Ala*_*ain 11

我必须为自己发现的东西,以及其他任何地方都找不到的东西(这就是我在这里发布的原因),就是这个问题增加了依赖于选择方法的维度.虽然我无法理解滚动条的工作方式不仅与高度和整数高度属性有关,而且与.MultiSelect属性有关,我发现它是.

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

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
    .MultiSelect = fmMultiSelectSingle
    .MultiSelect = fmMultiSelectExtended
End With
Run Code Online (Sandbox Code Playgroud)

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

解决方法有效

我希望发现这个特殊情况和更精确的解决方法可以节省一些我必须经历的挫折和实验的时间.


小智 5

我知道这是很老的帖子。但我已经经历了很多来解决这个问题,所以我只想分享我的提示。:)

首先,当工作表缩放级别不是 100% 时,integralheight 方法不起作用。

它会改变列表框的高度和宽度、位置等(即使你设置了对象属性“不移动或重新调整单元格”)

当您尝试使用代码修复它的原始大小和位置时,这一次无法看到它的最后一个项目

我的建议很简单。字体大小和列表框高度之间存在组合。

如果您的字体大小为 6-10(arial、regular),则列表框高度适合 12.75 的倍数(顺便说一句,我的列表框样式为 1:ListStyle、1-fmListStyleOption。样式 0 可能不同)

只要身高和12.75的倍数一样,就没有问题。

如果字体大小为 12(arial、regular),则为 13.55 的倍数

因此,如果您的项目中没有对列表框大小的限制,只需根据您的字体大小稍微调整它的大小即可提供更多舒适度。:)