1

我的工作簿的表 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

模块 2 是:

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

4

2 回答 2

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

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

于 2013-03-25T02:50:29.883 回答
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

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

于 2013-03-25T10:52:44.000 回答