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
动态范围或表格可能会给它带来麻烦,但希望这是一个开始。
我正在 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
动态范围或表格可能会给它带来麻烦,但希望这是一个开始。