如何将“Worksheet_SelectionChange”事件中的“目标”范围的内容传递给子?

我的工作簿的工作表1包含(除了其他数据)A列中的其他工作表的列表。我希望能够单击列A5中的任何单元格:A50并转到该单元格中列出的相应的工作表。 我的Sheet1代码是:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Me.Range("A5:A50")) Is Nothing Then SelectWorksheet End Sub 

而Module2是:

 Sub SelectWorksheet() Dim strName As String strName = Sheet1.Range("Target").Text (Error occurrs here: "Method 'Range' of object 'Worksheet' failed") Sheets(strName).Select End Sub 

我如何得到这个工作,如我所料? 我知道我可以点击相应的工作表选项卡,但是我想学习如何在VBA中编写代码。 谢谢。 顺便说一句,如何让我的post显示在问题框中键入的代码?

为什么不把单元格名称从单元格传递给子?

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Me.Range("A5:A50")) Is Nothing _ And Target.Cells.Count = 1 Then SelectWorksheet (Target.Value) End Sub Sub SelectWorksheet(strName As String) Sheets(strName).Select End Sub 

我也做了检查,以确保只有一个单元格在select。

喜欢这个。 您可能想要使用_SelectionChange事件而不是_Change事件。 或者您可能会发现有必要使用这两个事件来触发它。 在任何情况下,这里是如何将variables传递给另一个子程序/模块:

 Sub Worksheet_SelectionChange(byVal Target as Range) 'Some code... ' Call OtherMacro(Target) ' End Sub 

然后在你的其他macros中,声明一个范围variables作为需要的参数,如下所示:

 Sub SelectWorksheet(rng as Range) ' Dim strName as String ' at this point you can work with the "rng" variable, because it's been received from the other subroutine strName = rng.Value Sheets(strName).Activate ' End Sub 

您将需要添加额外的testing,以确保用户没有select多个单元格等,但这应该让你开始。