Ограничить выбранные ячейки диапазоном - PullRequest
1 голос
/ 07 июня 2019

Я использую этот код, чтобы пользователи могли выбирать только одну ячейку за раз на листе.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Target.Range("A1").Select
    Application.CutCopyMode = False
End Sub

Я хочу применить это только к определенным диапазонам ListObject внутри листа, например,

Range("table_1[Codes]")
Range("table_2[Names]")
Range("table_3[Cities]")

, чтобы пользователь мог свободно выбирать несколько ячеек вне этих диапазонов ListObject.

1 Ответ

3 голосов
/ 07 июня 2019

Просто используйте метод 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

Если одна из названных таблиц не существует, этот код все еще работает для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...