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

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でコーディングする方法を学ぼうとしています。ありがとう。ちなみに、質問ボックスに入力されたコードを投稿に表示するにはどうすればよいですか?

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

また、選択範囲にセルが1つだけ含まれていることを確認するためのチェックも行いました。

于 2013-03-25T10:52:44.000 に答える