2015-06-19 79 views
0

我一直在試圖做一個宏,但我很難找出它。這是它應該做的。VBA宏編碼

宏功能:當使用宏時,只有在當前標籤不是「產品」標籤,並且當前標籤是「產品」標籤時,才應該切換到名爲「產品」到以前訪問過的選項卡。

用途:比方說,我在工作表的索引3和使用宏 - 它應該激活「產品」選項卡,如果我再次按下它,它應該回到我表索引3

我我一直試圖以某種方式使用ActiveSheet.IndexSheets("Products").Index,但我認爲我需要使用超出目前對Visual Basics知識的東西。在聲明全局變量和傳遞信息時,我還沒有使用Public函數。

有人可以指出我正確的方向或告訴我我應該使用/看什麼?這在VBA中甚至可能嗎?

+0

這裏沒有保證,但你探索創建一個工作表變量,然後設置上移動到新的選項卡,然後前行變量,當您再次單擊它返回到你...其中,並設置變量再次等... – Kdean571

+0

你有任何現有的代碼切換表?您需要在全局範圍添加一個變量來存儲要恢復的「工作表」。這篇文章應該讓你開始聲明全局變量:http://stackoverflow.com/questions/2722146/how-do-i-declare-a-global-variable-in-vba –

回答

1

你想要的是一個全局變量。做一個模塊,並把像這樣的全局變量:

Global GblPreviousSheetName As String 

然後,所有工作表中,把下面的代碼:

Private Sub Worksheet_Deactivate() 

GblPreviousSheetName = Me.Name 

End Sub 

這將捕獲每當用戶或代碼更改表和將全局變量設置爲該工作表名稱。

然後,在你的程序中,這樣做:

Public Sub Test() 

If GblPreviousSheetName = "" Then 
     GblPreviousSheetName = "Sheet1" 'Put default sheet here (for first time workbook opens) 
End If 

'Run whatever code you want. 

     ActiveWorkbook.Sheets(GblPreviousSheetName).Activate 

End Sub 

需要注意的是,如果用戶按你的按鈕之前改變表,它也將記錄此。如果您只希望記錄代碼所做的更改,那麼不要放入「Worksheet_Deactivate」代碼,而只需在代碼中設置全局變量。