Excel VBA - 如何从另一个控件触发列表框单击
Posted
技术标签:
【中文标题】Excel VBA - 如何从另一个控件触发列表框单击【英文标题】:Excel VBA - How to trigger Listbox Click from another control 【发布时间】:2018-03-31 17:34:57 【问题描述】:我一直在做一个使用 Excel VBA 的小项目。当工作表打开时,我在工作表上有一个列表框 (listbox1),其中填充了来自 SQLServer 数据库的客户端名称。单击列表框中的项目可选择并显示所提供的服务。这一切正常。
我添加了两个数据选择器控件,用于减少所选行,具体取决于输入的日期。当日期选择器控件中的日期发生变化时,我想触发带有所选条目的列表框上的单击事件。
我的 VBA 有点生疏了,我这辈子都无法确定如何在数据选择器控件更改事件中编写代码来触发对列表框的单击。我尝试了几种方法,总是得到一个错误,表明“对象不支持该属性或方法”。这是最新尝试的简单代码:
Private Sub StartDatePicker_Change()
ThisWorkbook.ActiveSheet.ListBox1_Click
End Sub
我确信我缺少一些简单的东西。任何帮助将不胜感激!
【问题讨论】:
这是因为“ListBox1_Click”不是 Excel 工作表的本机属性。您可能有一个名为该程序的程序,但它属于工作表的特定实例 我的 VBA 也有点生疏,所以我无法为您提供完整的解决方案,但希望这对您有所帮助! 【参考方案1】:在 OP 的进一步规范之后编辑(见最后部分)
我不确定你的目标,但在工作表上有一个 ActveX 列表框控件,这将触发其点击事件处理程序:
Private Sub StartDatePicker_Change()
Me.ListBox1.ListIndex = 0
End Sub
当然,作为一个ActiveX控件,这段代码要放在工作表代码窗格中
或者你可以
将您当前执行填充工作的所有 ListBox1_Click
代码移至特定子:
Sub Populate()
... move here all code from ListBox1_Click doing the populating work
End Sub
如下更改您的 Listbox1_Click()
事件处理程序:
Private Sub ListBox1_Click()
Populate ' this will call the sub that does the populating work
... here goes other code (if any) directly connected with ListBox1 click event but not relevant for populating
End Sub
如下更改您的 StartDatePicker_Change()
事件:
Private Sub StartDatePicker_Change()
Populate 'this will do the populating work
End Sub
【讨论】:
感谢您的快速回复!这确实会触发单击事件,但它也会取消选择先前选择的列表框中的项目。单击列表框中的项目会根据两个数据选择器控件中的客户端名称和日期,使用与该客户端相关的数据填充许多行。 (想想这些日期之间提供的服务)。目标是每次在任一选择器中的日期信息发生更改时触发单击事件,以便提供的服务随之更改。希望这是有道理的...... 查看编辑后的答案。如果它解决了您的问题,那么您可以考虑将答案标记为已接受。谢谢 非常感谢您的回复。第二个选项效果很好。我将填充服务列表的代码移动到一个单独的子程序中,并从日期选择器控件和列表框单击事件中调用它。现在效果很好。感谢您的提示...我应该自己解决这个问题,但我专注于触发列表框上的点击事件。很好的反馈。【参考方案2】:如果我创建一个 ListBox 并将一个宏分配给右键单击上下文菜单,则该宏最终会出现在它自己的模块中。
然后我可以简单地通过宏的名称来调用它,例如ListBox1_Click
。你已经试过了吗?
【讨论】:
以上是关于Excel VBA - 如何从另一个控件触发列表框单击的主要内容,如果未能解决你的问题,请参考以下文章