从组合框选择中调用宏

时间:2015-04-17 13:37:27

标签: excel-vba vba excel

我在我的excel电子表格“Sheet1”中添加了一个activex组合框“ComboBox1”,我希望能够根据组合框中的选择调用不同的宏。我拥有的一些宏名称是“MC323”,“MC616”,“MC813”。

所以基本上你从组合框列表中选择MC616我想让它运行MC616宏。

我试过寻找答案但是从那以后我没有做过任何事情。这是我到目前为止所做的,这并不多,我肯定不对。

Option Explicit

Private Sub Workbook_Open()
With Sheet1.ComboBox1
ComboBox1.Clear
    .AddItem "MC323"
    .AddItem "MC616"
    .AddItem "MC813"
End With
End Sub

Sub ComoBox1_Change()
With Sheet1.ComboBox1
    Select Case ComboBox1.Value
        Case "MC323": MC323
        Case "MC616": MC616
        Case "MC813": MC813
    End Select
End With
End Sub

Sub MC323()
    Call MC323
End Sub

Sub MC616()
    Call MC616
End Sub

Sub MC813()
    Call MC813
End Sub

3 个答案:

答案 0 :(得分:1)

直到你到达这里一切都很好看:

Sub MC323()
    Call MC323
End Sub

Sub MC616()
    Call MC616
End Sub

Sub MC813()
    Call MC813
End Sub

子程序MC323只有一行,并且该行表示调用子程序MC323,它只有一行和该行,该行表示调用只有一行的子程序MC323并且该行表示调用仅有一行的子例程MC323,该行表示调用只有一行的子例程MC323,该行表示调用只有一行的子例程MC323 line和该行表示调用只有一行的子例程MC323,并且该行调用子例程MC323

所以无论如何,你进入一个无休止的递归循环,这是不好的。不要在MC323内调用子例程MC323。将您想要的代码放入子例程MC323。喜欢......

Sub MC323()
    MsgBox("Endless recursive loops are bad")
End Sub

答案 1 :(得分:0)

你有拼写错误,这可能是一个问题,无论如何...... 这应该进入Sheet1模块

Sub ComboBox1_Click()
    Select Case ComboBox1.Value
    Case Is = "MC323": MC323
    Case Is = "MC616": MC616
    Case Is = "MC813": MC813
    End Select
End Sub

这应该进入常规模块,

Sub MC323()
    MsgBox "MC323"
End Sub

Sub MC616()
    MsgBox "MC616"
End Sub

Sub MC813()
    MsgBox "MC813"
End Sub

这是在工作簿模块中,

Private Sub Workbook_Open()
    With Sheet1.ComboBox1
        .Clear
        .AddItem "MC323"
        .AddItem "MC616"
        .AddItem "MC813"
    End With
End Sub

答案 2 :(得分:0)

我一直想知道为什么我无法使用我的示例 - MC323,MC616和MC813也是工作表单元格引用。

所以......确保你有一张带有代号为Sheet1的表和一个名为ComboBox1的ActiveX组合框。 在ThisWorkbook模块中:

Private Sub Workbook_Open()

    With Sheet1
        .ComboBox1.Clear
        .ComboBox1.AddItem "MC323"
        .ComboBox1.AddItem "MyMacro2"
        .ComboBox1.AddItem "MyMacro3"
    End With

End Sub

注意第一项会导致错误 - '无法运行宏'MC323'。宏可能在此工作簿中不可用,或者可能禁用所有宏。

在正常模块中:

Public Sub MC323()
    MsgBox "1"
End Sub

Public Sub MyMacro2()
    MsgBox "2"
End Sub

Public Sub MyMacro3()
    MsgBox "3"
End Sub

最后,在Sheet1的Worksheet模块中:

Private Sub ComboBox1_Change()
    Application.Run Sheet1.ComboBox1.Value
End Sub

指向帮助文件的有用链接:

Application.Run Method

Ron de Bruin - How do I use Application.Run in Excel