2017-01-03 4 views
0

私が最初に計画していたのは、どれ程の範囲がわかるまで、すべての範囲でこれを繰り返すことでした。選択が名前付き範囲と交差する場合は、その名前付き範囲を選択します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

If Intersect(ActiveCell, Range("M_1")) Is Nothing Then 
Else 
    Range("M_1").Select 
End If 

End Sub 
+0

だけループを**そのシートの編集のための** –

+0

@JNevillの感謝を:) – mrkrister

+0

ゲイリーの学生@ – mrkrister

答えて

2

まず、activecelltarget以来targetには、呼び出し元の範囲として、静的であることを変更したいと思います。また、ちょうどので、あなたは、あなたがtargetは、名前付き範囲の少なくとも一つを交差するかどうかを確認するために名前付き範囲のリストに対してtargetをテストしたい場合はELSE

を使用する必要はありませんあなたのIFにあなたをNOT条件を追加にループを追加

doIntersect = false 
rngCounter = 0 
For each strTestRange in Array("M_1", "M_2", "M_3") 
    If Not Intersect(Target, Range(strTestRange) Is Nothing Then 
     doIntersect = true 
     rngCounter = rngCounter + 1 
    End if 
Next strTestRange 

If doIntersect Then 
     msgbox(rngCounter & " named ranges intersect your selection") 
Else 
     msgbox("None of the named ranges intersected your selection") 
End if 
+0

私が理解しているかわからない、私はM_1からM_1260まで1260の名前付き範囲を持っていますが、あなたはそれをどのように書くのですか? – mrkrister

+0

上記のScottの答えをご覧ください。そこでは、彼はシート内のすべての名前付き範囲をループします。このループの中で、 'if left(nm.name、2)=" M_ "Then'のようなテストを追加することができます。 'For i = 1〜1260'、' Range( "M_&i).DoSomething'この猫をスキンするにはたくさんの方法があります。 – JNevill

+0

これはしばらく経っていますが、私は自分のコードの仕組みを理解していると思います。間違っていれば修正しますが、選択したセルと交差するかどうかを調べるために、そうした名前付き範囲を1つ選択します。私はすべての名前付き範囲で動作するので、私はそれの中で追加のテストを実行する必要があるとは思わないので、私は基本的にコードをコピーし、ランタイムエラーで私に残しました。オブジェクト '_Woorksheet'これは私に多くの他のものを学ばせましたが、悲しいことにこの権利を得る方法はありません – mrkrister

1

If Not Intersect(Target, Union(Range("M_1"), Range("M_2"), Range("M_3")) Is Nothing Then 

あなたはより多くの制御が必要な場合は、ループを行うことができます。アプリケーションのunionメソッドを使用することができます名前付き範囲を反復処理:名前付き範囲を超える

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim nm As Name 
Dim nmStr As String 
For Each nm In ThisWorkbook.Names 
    nmStr = nm.Name 
    If Not Intersect(Target, Range(nmStr)) Is Nothing Then 
     Application.EnableEvents = False 
     Range(nmStr).Select 
     Application.EnableEvents = True 
    End If 
Next nm 

End Sub 
+0

私は何が間違っているのか分かりませんが、これを動作させることはできません – mrkrister

関連する問題