如何通过单击列表框表单控件中的值来运行宏而不对其滚动条功能产生不利影响?

问题描述 投票:0回答:1

我在放置在工作表上的列表框表单控件时遇到问题。列表框中列出了 100 多个值(值的总数动态波动,如有必要,我可以详细说明,但我认为这背后的原因与我遇到的问题并不真正相关)。我想在用户单击列表框中列出的任何值时运行宏,因此我将宏作为公共子存储在放置列表框的工作表的模块中(我可以详细说明什么)宏应该这样做,但同样,我认为这与问题无关),然后通过右键单击宏将宏分配给列表框表单控件,单击“分配宏...”,选择宏从列表中,然后单击“确定”按钮。

所以问题就出在这里:每当单击列表框中的某个值时,宏就会运行,但是,无论出于何种原因,每次列表框右侧滚动条的任何部分都也会运行被点击——无论是向上滚动按钮、向下滚动按钮、滚动条本身,还是滚动条和这些按钮之间的空白区域——这是不可接受的。

列表框中包含 100 多个值,问题变得更加复杂,随着时间的推移,可能会列出更多值;宏中的 VBA 代码不是很长或很复杂,但是它仍然会导致几秒钟的明显暂停,并暂时阻止用户每次运行时单击其他任何内容,当值是单击,但每次用户尝试向上或向下滚动列表框的数百个值时,我都不可能发生这种情况,因为它使列表框基本上无法使用。

通常,我会使用列表框 ActiveX 控件而不是列表框表单控件(不确定这是否可以避免这个特定问题),但出于工作簿的目的(至少是我当前设计的方式),我需要列表框中的值能够如上所述动态波动,并且在尝试此功能时,我可以找到一种方法使其仅适用于表单控件,而不适用于 ActiveX 控件。

我做错了什么吗?更重要的是,有人知道解决这个问题的方法吗?我可能是错的,但我无法想象微软会通过单击列表框表单控件中的值来实现运行宏的功能,而不首先测试和/或调试我认为是明显问题的内容说执行。所以我必须相信我做错了什么或者这只是这个表单控件的固有问题。

excel vba controls
1个回答
0
投票

是的,您需要使用ActiveX版本。正如您所发现的,将宏分配给表单控件对象只是将其在后台分配给单击事件。没有办法改变这一点。

使用 ActiveX 控件,您可以指定要对哪些事件做出反应,例如您的例子中的 Change 事件。您可以通过更新 ListFillRange 属性或手动添加/删除列表项来动态更改内容。

© www.soinside.com 2019 - 2024. All rights reserved.