2015-04-17 88 views
0

我已經爲我的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 
+0

你實際上沒有指出什麼_isn't_工作,但我認爲[JNevill](http://stackoverflow.com/a/29701964/2344413)已經達到了它。 – FreeMan

回答

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 
+0

如果我想在組合框旁邊放一個「ENTER」按鈕以讓您選擇該項目,然後單擊該按鈕啓動宏,該怎麼辦? –

+0

然後代碼會進入'Sub Button1_Click()'而不是'Sub ComboBox1_click()'。 – FreeMan

+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只有一行a nd該行表示調用子程序MC323,該子程序只有一行,該行可調用子程序MC323

因此,無論如何,你陷入了一個無限的遞歸循環,這是不好的。不要在MC323的內部調用子程序MC323。把你想要的代碼放入子程序MC323。像...

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

我實際上試圖讓它調用名爲MC323的VBA模塊。我會怎麼做呢? –

+0

在這種情況下......你可能有一個子程序名爲MC323,名稱爲「Module1」的模塊或類似的東西。你可以用'Call Modules1.MC323()'這行來在'MC323()'裏面調用它。如果你在這一行上放置了一個斷點(按'F9'):'Select Case ComboBox1()'在你的工作表或模塊內重命名子例程,這樣你就不會錯誤地調用錯誤的'MC323()' – JNevill

+0

.Value',然後通過代碼進行調試(按'F8'),我想你會發現@JNevill已經正確地識別了你的問題。你的代碼調用了適當的'Sub',但是'Sub'實際上並沒有做任何有用的工作。 – FreeMan

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工作表模塊中:

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