如何使用VBA选择数据验证列表中的下一个项目

时间:2013-06-03 03:00:00

标签: excel-vba excel-2010 validation commandbutton vba

我有一个数据验证列表,其中包含日期。当您更改日期时,它会影响工作表其余部分中显示的数据。

我想创建2个命令按钮,

  1. "接着" - 点击后将移至列表中的下一个日期,当它到达列表末尾时,它将返回列表的开头
  2. "前" - 点击后将移动到列表中的上一个日期,当它到达列表的开头时,它将转到列表的末尾
  3. 这可能吗?

    我确实看过List Box和Combo Box,但是对编码很困惑! 任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

你必须区分3个案例:

  1. 使用内联列表元素进行数据验证(例如Source =“1; 2; 3; 4; 5”)
  2. 使用范围内的列表元素进行数据验证
  3. 列表/组合框
  4. 案例1可能是最困难的,因为你只能在一个字符串中访问列表元素并且必须将它们拆分成一个数组,获取当前选择的索引并用两个按钮移动索引以获得想要的结果

    案例2稍微简单一些,但您需要以某种方式跟踪定义日期范围内的当前位置

    案例3可能是最容易实现的......但仍需要一定的编码工作,例如

    • 在首次显示之前将日期列表加载到列表/组合框中(OnLoad或OnActivate
    • 为UP和DOWN按钮创建代码以增加/减少列表框索引,并使用自动环绕

    我建议给你第4个案例......使用ActiveX旋转按钮......这在一个元素中提供了向上和向下的功能:

    • 在垂直命名范围 DateList
    • 中创建日期列表
    • 为Spin Button的索引保留一个单元格,并将其命名为 DateIndex
    • 使用Developer功能区,插入ActiveX旋转按钮(默认名称为 SpinButton1
    • SpinButton1 中设置LinkedCell属性(确保处于Developer / Design模式;右键单击Spin按钮并选择“属性”)到 DateIndex
    • 创建以下代码(仍处于设计模式,右键单击SpinButton并选择“查看代码”)

    Private Sub SpinButton1_SpinDown()
        If SpinButton1 = 0 Then
            SpinButton1 = Range("DateList").Rows.Count
        End If
    End Sub
    
    Private Sub SpinButton1_SpinUp()
        If SpinButton1 = Range("DateList").Rows.Count + 1 Then
            SpinButton1 = 1
        End If
    End Sub
    
    • 在要显示所选日期的单元格中,输入公式=INDEX(DateList,DateIndex)
    • 由于您正在处理命名范围,因此DateList和DateIndex可能位于与用户工作表不同的工作表(甚至是隐藏工作表)中。
    • 如果要在用户当前放置光标的单元格中创建当前所选日期的副本,请将以下语句添加到SpinDown / Up Sub的末尾(End If之后:{{ 1}}