【问题标题】:Run Macro When ComboBox is Clicked单击组合框时运行宏
【发布时间】:2016-08-28 16:43:37
【问题描述】:

当我单击 ComboBox 时,我需要有关如何使宏运行的帮助。例如,ComboBox 正在从另一列中提取列表,如果该列发生更改,我希望在第一次单击 ComboBox 时看到更新的列表。现在,在我单击 ComboBox 然后单击已存在的选项后,它正在运行宏。重新打开后,我会看到我希望在用户第一次点击时看到的更新列表。感谢您的帮助,非常感谢!!!!

Sub costcenterdup()
'
' costcenterdup Macro
Application.ScreenUpdating = False
With Sheets("Dollars")
.Range("K9:K" & .Cells(9, "K").End(xlDown).Row).Copyy
Destination:=Sheets("LookUp").Range("E2")
End With
With Sheets("LookUp")
.Range("$E2:E" & .Cells(.Rows.Count, "E").End(xlUp).Row).RemoveDuplicates
Columns:=1, Header:=xlNo
End With

With Application.Worksheets("LookUp")
.Range("E2:E5000").Sort Key1:=.Range("E2")
End With

Range("C5").Select
Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 请附上您的代码。
  • 添加代码,谢谢!
  • 我猜 sub 是绑定到组合框的?您的代码与组合框无关。如果您不提供代码来解决手头的问题 XD,将无法为您提供帮助
  • 我还没有代码。我不知道如何去做我想做的事情,这就是我想要帮助的原因。当您单击组合框时,是否可以做一些事情来触发宏运行,以便在列表弹出时更新它?
  • 表单控件没有“当组合框被激活或单击时”这样的事件。这仅在您使用 ActiveX 组合框时可用。这是一个答案,我在其中描述了如何查看 Outlook 中可用的所有事件(同样适用于 Excel、PowerPoint 等)stackoverflow.com/questions/36940417/…我建议您将组合框移动到表单(可能是无模式的)形式)。然后您可以使用ComboBox1_Enter 事件或ComboBox1_Click 事件。

标签: excel vba combobox


【解决方案1】:

您可以将两种类型的组合框添加到工作表中。

  • 其中之一是表单组合框,可从“表单”工具栏访问。

  • 另一个是ActiveX组合框,可以从“控制工具箱”工具栏访问。

这里有一个很好的解释(链接由@Ralph提供):http://peltiertech.com/forms-controls-and-activex-controls-in-excel/

当组合框发生变化时,您只能为第一个分配 one 宏。

但您可以为 ActiveX ComboBox 分配多个。如果你将它添加到GotFocus 事件中,那么它会在每次框获得焦点时运行宏:

Private Sub ComboBox1_GotFocus()

    'Add code here

End Sub

但是如果我正确理解了您的问题,您希望组合框包含列中的数据 - 那么您需要 第一个版本的组合框(表格一),只需右键单击它,选择“格式化控件...”,然后在“控件”选项卡上设置您想要填充数据的单元格。它会自动为您更新组合框,您将始终看到单元格中的值。在这种情况下不需要宏。见下图:

【讨论】:

  • @Ralph -- 我不知道你为什么这么说。我确实测试过了。我在控制工具箱的工作表上放了一个组合框。双击它,打开VBA,我将事件处理程序更改为GotFocus并添加MsgBox "Test."然后我关闭VBE,关闭控制工具箱以退出设计模式和VOILA。
  • 我不知道为什么我认为组合框必须是表单控件。然而,我正在再次阅读这篇文章 - 你是对的(我的错误) - 没有提到它应该/必须是表单控件的组合框。所以,如果 OP 使用 ActiveX 组合框,那么你是绝对正确的,这是可能的。但是,请在您的帖子中说明它必须是一个 ActiveX 组合框(只是为了说明这一点)。
  • 我做了,但是你还能在一张纸上放什么其他类型的组合框?啊...我猜你的意思是 OP 想要它在表单上?
  • 一个表单控件组合框:stackoverflow.com/questions/15455179/…
  • 这就是为什么我赞成你的回答。随着 ActiveX 添加(现在甚至更多),您的答案很好,应该被接受。干得好,我假设您在此过程中学到了很多东西(非常本着 SO 的精神)。
猜你喜欢
  • 2014-10-01
  • 2019-03-01
  • 2016-08-03
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2011-07-25
相关资源
最近更新 更多