【问题标题】:How to select next item in Data Validation list using VBA如何使用 VBA 选择数据验证列表中的下一项
【发布时间】:2013-06-03 03:00:00
【问题描述】:

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

我想创建 2 个命令按钮,

  1. “下一个” - 单击时将移动到列表中的下一个日期,当它到达列表末尾时将返回到列表开头
  2. “上一个” - 单击时将移动到列表中的上一个日期,当它到达列表的开头时,它将转到列表的末尾

这可能吗?

我确实看过列表框和组合框,但对编码感到非常困惑!!! 任何帮助都会很棒!

【问题讨论】:

  • 欢迎使用 StackOverflow

标签: excel excel-2010 validation commandbutton vba


【解决方案1】:

你要区分3种情况:

  1. 使用内联列表元素进行数据验证(例如 Source = "1;2;3;4;5")
  2. 使用范围内的列表元素进行数据验证
  3. 列表/组合框

情况 1 可能是最困难的,因为您只能在字符串中访问列表元素,并且必须将它们拆分为一个数组,获取当前选择的索引并使用两个按钮移动索引以获得想要的结果

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

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

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

我向您建议第 4 种情况……使用 ActiveX 旋转按钮……它在一个元素中提供向上和向下功能:

  • 在垂直命名范围内创建日期列表DateList
  • 为旋转按钮的索引再保留一个单元格并将其命名为 DateIndex
  • 使用开发者功能区,插入一个 ActiveX 旋转按钮(默认名称为 SpinButton1)
  • 将 SpinButton1 中的 LinkedCell 属性设置为 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 之后:Selection = Range("DateList").Cells(SpinButton1, 1)

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多