Как автоматически развернуть выпадающий список проверки - PullRequest
0 голосов
/ 28 февраля 2019

Есть ли альтернатива SendKeys для автоматического раскрывающегося списка проверки?Я хотел бы расширить раскрывающийся список проверки после нажатия на ячейку.Мой вопрос полностью сосредоточен на том, как избежать метода SendKeys.

Вот правильно работающее решение с использованием SendKeys:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If HasValidation(Target) Then
        SendKeys "%{DOWN}"
        SendKeys "{NUMLOCK}", True 'Workaround for Numlock turn off bug
    End If
End Sub

Function HasValidation(MyCell As Range) As Boolean
    Dim t: t = Null
    On Error Resume Next
    t = MyCell.Validation.Type
    On Error GoTo 0
    HasValidation = Not IsNull(t)
End Function

Ссылки по теме:
HasValidation функция: https://stackoverflow.com/a/31346246/1903793
NumLock ошибка: https://stackoverflow.com/a/29551913/1903793

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

1 Ответ

0 голосов
/ 28 февраля 2019

Ваше определение того, чего вы хотите достичь, оставляет несколько вопросов для ответа, но, возможно, приведенный ниже код поможет вам выбрать правильный путь.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Const Trigger As String = "A3:B4"               ' modify to suit
    Const ValCell As String = "H3"                  ' modify as required

    Dim ValType As Long

    If Not Application.Intersect(Target, Range(Trigger)) Is Nothing Then
        Application.EnableEvents = False
        Range(ValCell).Activate

        On Error Resume Next
        ValType = ActiveCell.Validation.Type
        On Error GoTo 0
        If ValType = 3 Then SendKeys "%{DOWN}"

        Application.EnableEvents = True
    End If
End Sub

Приведенная выше процедура контролирует триггер Диапазон 1005 * A3: B4, который вы можете настроить в соответствии с вашими потребностями.Если щелкнуть одну из ячеек в этом диапазоне (это может быть один диапазон ячеек), раскрывающийся список в ячейке, имеющей проверку, определяемую как ValCell , расширяется, если она существует.Код достигает этого, активируя ячейку CellVal.

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