簡體   English   中英

如何自動展開下拉驗證列表

[英]How to automatically expand drop-down validation list

除了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 : HasValidation
NumLock錯誤: https : //stackoverflow.com/a/29551913/1903793

上面的代碼可以順利運行。 我只是因為廣泛報道的問題而對SendKeys有偏見。 我懷疑將此解決方案合並到較大的代碼中可能會在將來導致意外行為,而這可能很難捕獲。

您對要實現的目標的定義還需要回答一些問題,但是也許下面的代碼將使您走上正確的道路。

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

上面的過程監視觸發范圍A3:B4,您可以將其調整為所需的范圍。 如果單擊此范圍內的一個單元格(可能是單個單元格范圍),則在存在驗證的單元格中定義為ValCell的下拉列表將展開(如果存在)。 該代碼通過激活CellVal單元來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM