是否有可能擁有multipe按鈕,讓'按鈕1'和'按鈕2'運行相同的VBA代碼,但基於按下的按鈕產生不同的結果?有條件運行的VBA代碼
例如,當我按下按鈕1時,我希望它進入一個網站,加載數據並將其放到Sheet 1上。但是,當我按下按鈕2時,它會轉到同一站點並將其加載到Sheet 2。
我知道我可以有多個相同的VBA代碼(具有不同的名稱)的實例,但我希望簡化代碼並防止它過於複雜。
是否有可能擁有multipe按鈕,讓'按鈕1'和'按鈕2'運行相同的VBA代碼,但基於按下的按鈕產生不同的結果?有條件運行的VBA代碼
例如,當我按下按鈕1時,我希望它進入一個網站,加載數據並將其放到Sheet 1上。但是,當我按下按鈕2時,它會轉到同一站點並將其加載到Sheet 2。
我知道我可以有多個相同的VBA代碼(具有不同的名稱)的實例,但我希望簡化代碼並防止它過於複雜。
創建一個子工作並將工作表名稱作爲參數傳遞給該子工作。我用一個字符串變量來完成它,但你也可以用一個工作表變量來完成它。
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
我收到一條錯誤消息,指示「Sub或function not defined」,我複製並粘貼了您提供的代碼,並更改了命名,即Button1/Button2到Weel1/Week2。 – user1664305
@ user1664305查看我的編輯。我在最後一部分忘了部分名字。另外,在我有評論的地方添加你的代碼。 –
對不起,我沒有看到該編輯!試過了,它就像一個魅力!感謝您的幫助! – user1664305
如果您使用的是Forms
按鈕,您可以分配相同的宏和使用Application.Caller
返回調用按鈕的名稱/ ID。
Sub Test()
MsgBox Application.Caller & " was pressed"
End Sub
我靠在更多地轉向brettdj的解決方案,以及
如果您分配相同的宏許多按鈕,您將獲得基於按鈕的名稱不同的結果。
您可以將按鈕命名爲您想要的工作表。練習這個。添加幾個按鈕並將其分配給他們。點擊每個按鈕,看看會發生什麼。
Sub GetButtonName()
Dim Btn As String
Btn = ActiveSheet.Shapes(Application.Caller).Name
MsgBox Btn
End Sub
相關[如何從一個按鈕調用一個宏和傳遞參數](http://stackoverflow.com/questions/29858176/how-to-call-a-macro-from-a-button-and -pass-arguments),然後只是傳遞一個參數以用if語句或其他控制語句進行測試 – JGreenwell