2014-02-16 56 views
1

我有一個userform填充命令按鈕:單擊按鈕確定要調用哪個宏,並且每個按鈕隱藏窗體,這允許常規模塊中的代碼繼續。Excel用戶表單「應用」按鈕

實現「應用」按鈕的最佳方式是什麼(例如,在窗體保持可見狀態時執行宏)?我的「解決方法」是讓「應用」按鈕直接調用宏,但這似乎打破了封裝理念。我確信有一個更好的方法來完成這個。

模塊代碼:

Sub Test() 
    Dim lBtn As Long 
    Dim F As frmTest 
    Set F = New frmTest 
    F.Show 
    lBtn = F.plBtn 'get clicked button 
    Select Case lBtn 
     Case 1 
'   run macro1 
     Case 2 
'   run macro 2 

'  etc, etc 
    End Select 

    Unload F 'done with form 
End Sub 

形態代碼:

Private Btn As Long 
Public Property Get plBtn() As Long 
    plBtn = Btn 
End Property 
Private Sub cmd1_Click() 
    Btn = 1 
    Me.Hide 
End Sub 
Private Sub cmd2_Click() 
    Btn = 2 
    Me.Hide 
End Sub 

回答

0

你可以只包封數值-ID到宏執行邏輯成一個函數(替換使用的LongEnum爲易讀性):

Public Enum Macros 
    MacroPrepareCake = 1 
    MacroBakeCake 
    MacroEatCake 
End Enum 

Public Sub RunMacro(macro As Macros) 
    Select Case macro 
     Case Macros.MacroPrepareCake 
      '// code/call 

     Case Macros.MacroBakeCake 
      '// code/call 

     Case Macros.MacroEatCake 
      '// code/call 

    End Select 
End Sub 

然後,您可以在隱藏窗體或點擊應用時調用RunMacro

+0

如果我正確解釋它,它看起來像我們從表單代碼中調用外部宏 - 是嗎?我希望避免這種情況,但是對於「應用」場景可能無法避免。 – DaveU