我的工作簿的第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中编码。谢谢。顺便说一句,如何让我的帖子显示问题框中输入的代码?
答案 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
我还做了检查以确保选择中只有一个单元格。