2015-06-19 49 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”代码,而只需在代码中设置全局变量。