使用VBA组合框(表单控件,内部工作表)中的项来运行宏

时间:2016-05-07 08:13:50

标签: excel vba excel-vba combobox

所以我想要实现的是当有人点击组合框中的某一年(位于工作表中的单元格A1附近)时,宏会根据被点击的年份运行。我希望列表项存储在VBA代码本身,而不是在工作表上选择它们(我没有找到一个关于不使用工作表数据的组合框的教程)。

我创建了一个按钮来将数据加载到ComboBox1中。

这是现在的代码(我不是要严格遵守它,所以如果有更简单的方式来写这个,请告诉我):

Sub Button1_Click()
      Sheets("MacroBase").ComboBox1.List = Array("2015", "2016", "2017", "2018", "2019")    
End Sub

Sub ComboBox1_GotFocus()
    With ThisWorkbook.Sheets("MacroBase").Shapes("ComboBox1").ControlFormat
    Select Case .List(.Value)
        Case "2015": ShowOnly2015Columns
        Case "2016": ShowOnly2016Columns
        Case "2017": ShowOnly2017Columns
        Case "2018": ShowOnly2017Columns
        Case "2019": ShowOnly2019Columns
    End With
End Sub

我没有粘贴ShowOnly #### Columns的代码(测试并运行没有问题)。

目前_GotFocus不起作用。

我提前感谢您的所有时间和帮助:)

2 个答案:

答案 0 :(得分:1)

有两种类型的组合框。

看到这个问题和答案。这应该让你去。

Run Macro When ComboBox is Clicked

您可以参加GotFocus事件并填写组合框。

答案 1 :(得分:1)

使用此

Sheets(1).Shapes("ComboBox1").ControlFormat.List = Array("2015", "2016", "2017", "2018", "2019")

确保Sheets(1)引用您的“ComboBox1”组合框实际位于的工作表

使用像

这样的工作表名称会更安全
Sheets("mySheet").Shapes("ComboBox1").ControlFormat.List = Array("2015", "2016", "2017", "2018", "2019")

最后,如果你想用一些工作表范围内容填充组合框,而不是你使用的:

Sheets("mySheet").Shapes("ComboBox1").ControlFormat.ListFillRange = "'My Sheet'!A1:A5"