2016-02-02 58 views
2

是否有可能擁有multipe按鈕,讓'按鈕1'和'按鈕2'運行相同的VBA代碼,但基於按下的按鈕產生不同的結果?有條件運行的VBA代碼

例如,當我按下按鈕1時,我希望它進入一個網站,加載數據並將其放到Sheet 1上。但是,當我按下按鈕2時,它會轉到同一站點並將其加載到Sheet 2。

我知道我可以有多個相同的VBA代碼(具有不同的名稱)的實例,但我希望簡化代碼並防止它過於複雜。

+1

相關[如何從一個按鈕調用一個宏和傳遞參數](http://stackoverflow.com/questions/29858176/how-to-call-a-macro-from-a-button-and -pass-arguments),然後只是傳遞一個參數以用if語句或其他控制語句進行測試 – JGreenwell

回答

4

創建一個子工作並將工作表名稱作爲參數傳遞給該子工作。我用一個字符串變量來完成它,但你也可以用一個工作表變量來完成它。

Sub Button1_Click() 

     LoadWebsiteToSheet "Sheet1" 

    End Sub 

    Sub Button2_Click() 

     LoadWebsiteToSheet "Sheet2" 

    End Sub 

    Sub LoadWebsiteToSheet(sName as String) 

     '... code to load website to Worksheets(sName) 

    End Sub 
+0

我收到一條錯誤消息,指示「Sub或function not defined」,我複製並粘貼了您提供的代碼,並更改了命名,即Button1/Button2到Weel1/Week2。 – user1664305

+0

@ user1664305查看我的編輯。我在最後一部分忘了部分名字。另外,在我有評論的地方添加你的代碼。 –

+0

對不起,我沒有看到該編輯!試過了,它就像一個魅力!感謝您的幫助! – user1664305

5

如果您使用的是Forms按鈕,您可以分配相同的宏和使用Application.Caller返回調用按鈕的名稱/ ID。

Sub Test() 
MsgBox Application.Caller & " was pressed" 
End Sub 
0

我靠在更多地轉向brettdj的解決方案,以及

如果您分配相同的宏許多按鈕,您將獲得基於按鈕的名稱不同的結果。

您可以將按鈕命名爲您想要的工作表。練習這個。添加幾個按鈕並將其分配給他們。點擊每個按鈕,看看會發生什麼。

Sub GetButtonName() 
    Dim Btn As String 

    Btn = ActiveSheet.Shapes(Application.Caller).Name 
    MsgBox Btn 

End Sub