Просто используйте метод Application.Intersect , чтобы проверить, находится ли Target
в другом диапазоне.
If Not Intersect(Target, Me.Range("table_1[Codes]")) Is Nothing _
Or Not Intersect(Target, Me.Range("table_2[Names]")) Is Nothing _
Or Not Intersect(Target, Me.Range("table_3[Cities]")) Is Nothing Then
Target.Range("A1").Select
Application.CutCopyMode = False
End If
В качестве альтернативы Or
вы также можете использовать Union
:
If Not Intersect(Target, Union(Me.Range("table_1[Codes]"), Me.Range("table_2[Names]"), Me.Range("table_3[Cities]"))) Is Nothing Then
Target.Range("A1").Select
Application.CutCopyMode = False
End If
Если вы хотите, чтобы это было безопасно, в случае ошибок, таких как одна из таблиц в списке не существует, вы должны использовать некоторую обработку ошибок:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim RangeNames() As Variant
RangeNames = Array("table_1[Codes]", "table_2[Names]", "table_3[Cities]", "this does not exist")
Dim RangeName As Variant, TestRange As Range
For Each RangeName In RangeNames
Set TestRange = Nothing
On Error Resume Next
Set TestRange = Intersect(Target, Me.Range(RangeName))
On Error GoTo 0
If Not TestRange Is Nothing Then
Target.Range("A1").Select
Application.CutCopyMode = False
Exit For
End If
Next RangeName
End Sub
Если одна из названных таблиц не существует, этот код все еще работает для других.