Select 验证列表中的下一项 VBA

Select the next item in a validation list VBA

我正在 excel 中创建一个简单的表单,它将 运行 在触摸设备中使用。在表单的某些部分,我创建了一个下拉验证列表。我需要使用按钮转到验证列表中的下一项和上一项。

我发现的唯一方法是使用 Application.Sendkeys 访问下拉菜单,但没有用。有什么想法吗?

sub Next_item click()
    
ActiveSheet.Range(cell_rng.Text).Select
Application.SendKeys ("%{Down}")
Application.SendKeys ("{Down}{Enter}")

End Sub

您可能会考虑转到数据验证源并获取下一项,而不是尝试直接操作 in-cell 下拉列表。例如,如果您的数据验证是 comma-separated 列表

您可以使用这样的代码来获取下一个值:

Public Sub NextItem()
    
    Dim dv As Validation
    Dim vaSplit As Variant
    Dim i As Long
        
    'Formula1 contains the comma sep list of values
    Set dv = ActiveCell.Validation
    vaSplit = Split(dv.Formula1, ",")
    
    For i = LBound(vaSplit) To UBound(vaSplit)
        'if you're at the currently selected one
        If vaSplit(i) = ActiveCell.Value Then
            'but not at the last one
            If i < UBound(vaSplit) Then
                'select the next one
                ActiveCell.Value = vaSplit(i + 1)
                Exit For
            End If
        End If
    Next i
    
End Sub

如果您的列表来自一个简单的范围

您可以使用几乎相同的代码

Public Sub NextItemRange()
    
    Dim dv As Validation
    Dim vaSplit As Variant
    Dim i As Long
    
    Set dv = ActiveCell.Validation
    
    vaSplit = Range(dv.Formula1).Value
    
    For i = LBound(vaSplit, 1) To UBound(vaSplit, 1)
        If vaSplit(i, 1) = ActiveCell.Value Then
            If i < UBound(vaSplit, 1) Then
                ActiveCell.Value = vaSplit(i + 1, 1)
                Exit For
            End If
        End If
    Next i
    
End Sub

动态范围或表格可能会给它带来麻烦,但希望这是一个开始。