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
。我怀疑将此解决方案合并到较大的代码中可能会在将来导致意外行为,而这可能很难捕获。
答案 0 :(得分:-1)
您对要实现的目标的定义需要回答一些问题,但是也许下面的代码将使您走上正确的道路。
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
以上过程监视 Trigger 范围A3:B4,您可以根据需要进行调整。如果单击此范围内的一个单元格(可能是单个单元格范围),则在存在验证的单元格(定义为 ValCell )中的下拉列表会扩展(如果存在)。该代码通过激活CellVal
单元格来实现。