繁体   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