【问题标题】:Excel jump to a specific column/cell based on a dropdown menu [closed]Excel根据下拉菜单跳转到特定列/单元格[关闭]
【发布时间】:2020-12-30 08:06:20
【问题描述】:

我在疗养院做志愿者,为护理人员创建简单的解决方案,以更好地帮助他们的居民。我正在开发一个交互式 Excel 日历,但我需要一个我一直在 Internet 上搜索但没有成功的功能。

我需要一个针对我的 excel 的解决方案(VBA,我猜测是基于类似的问题),它允许用户从包含大量日期的下拉列表中选择一个日历日期,然后用户将跳转到特定的单元格该日期在另一个范围内。

我的日期范围在一行中:F9:UA9,我的下拉菜单在 B11 中。

我希望通过在下拉列表中选择“20/09/2020”,用户将移动到该日期首次出现的 F9:UA9 范围内的单元格。

这是一些示例数据。 [1]:https://i.stack.imgur.com/l4GjH.png

提前致谢!

【问题讨论】:

  • 你有什么尝试吗? Range.FindApplication.Match 怎么样?
  • 我不知道任何 VBA,我已经尝试改进这里的代码:stackoverflow.com/questions/56582734/… 但由于我不知道如何编辑,所以我没有做对......因为有在同一列中跳跃,我需要水平跳跃

标签: excel vba dashboard


【解决方案1】:

您链接到的问题具有您需要的基本外壳。您可以使用Application.Match 查找日期的第一个实例,然后使用Application.Goto 滚动到它。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim dropDownRange As Range
    Set dropDownRange = Me.Range("B11")

    '// Check if the change is happening in your dropdown cell
    If Not Intersect(Target, dropDownRange) Is Nothing Then
        Dim lookInRange As Range
        Set lookInRange = Me.Range("F9:UA9")

        Dim matchResult As Variant
        matchResult = Application.Match(CLng(dropDownRange.Value), lookInRange, 0)

        '// First check that the corresponding date was found
        If Not IsError(matchResult) Then
            Application.Goto lookInRange.Cells(matchResult), Scroll:=True
        End If
    End If
End Sub

工作表代码模块中添加此代码:

如果您想滚动到第 1 行,可能如下:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim dropDownRange As Range
    Set dropDownRange = Me.Range("B11")

    '// Check if the change is happening in your dropdown cell
    If Not Intersect(Target, dropDownRange) Is Nothing Then
        Dim lookInRange As Range
        Set lookInRange = Me.Range("F9:UA9")

        Dim matchResult As Variant
        matchResult = Application.Match(CLng(dropDownRange.Value), lookInRange, 0)

        '// First check that the corresponding date was found
        If Not IsError(matchResult) Then
            Dim matchRange As Range
            Set matchRange = lookInRange.Cells(matchResult)

            Application.Goto  Me.Cells(1, matchRange.Column), Scroll:=True
        End If
    End If
End Sub

【讨论】:

  • 嘿!首先,我真的很感谢你花时间来帮助我!我正在尝试将其放入 VBA 命令中,但它似乎不起作用...我打开 VBA,单击我正在应用代码的工作表并准确粘贴您在此处放置的内容。就这样吗?
  • 是的。如果它不起作用,我猜它找不到匹配项。
  • Awww :( 我真的很兴奋这可以工作。B11 上的下拉列表基于 F9:UA9 中的范围,所以它们是完全相同的值(日期)。我已经还尝试使用“插入”>“模块”然后“保存”和 F5 插入 VBA 片段,但是当我执行 F5 时,没有出现可供我选择的宏。我应该在这里看到“Worksheet_Change”并能够运行它,对吧?我请询问您是否可以最后查看代码:)
  • 你把这个放在工作表代码模块中了吗? (右键单击工作表 > 查看代码)?如果是这样,日期格式可能是找不到匹配项的原因。
  • 我尝试放入工作表和插入模块。我还尝试检查我是否是日期格式,将范围切换为 A、b、c、d、e、f 等......并且下拉菜单仍然没有使光标跳转到具有该值的单元格:\
猜你喜欢
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
相关资源
最近更新 更多