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

时间:2013-03-25 02:39:20

标签: excel excel-vba vba

我的工作簿的第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中编码。谢谢。顺便说一句,如何让我的帖子显示问题框中输入的代码?

2 个答案:

答案 0 :(得分:2)

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

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

然后在你的另一个宏中,将范围变量声明为必需参数,如下所示:

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

您需要添加额外的测试以确保用户没有选择多个单元格等,但这应该可以让您入门。

答案 1 :(得分:1)

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

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

我还做了检查以确保选择中只有一个单元格。