【问题标题】:How to jump to a specific cell based on the list selection如何根据列表选择跳转到特定单元格
【发布时间】:2021-11-23 21:03:54
【问题描述】:

我在单元格 R5 中创建了一个包含名称的下拉列表,我们称它们为 Name1 Name2 Name3。我希望当用户选择某个名称时,工作表将向下滚动到特定行。例如,如果选择了 Name 1,我希望它转到第 2 行,如果 Name2 选择第 10 行,Name3 第 18 行。该列表与我要滚动到的数据位于同一个工作表上。有什么代码可以用来做这个吗?

【问题讨论】:

  • 可能需要一个Worksheet Change 事件,您可以在其中查看带有下拉菜单的单元格是否已更改。
  • @osugirl7 “哦!”
  • @ArcherBird "I-O"!
  • 感谢@BigBen!这是一个 50/50 的镜头,哈哈
  • @BigBen - 如果是俄亥俄州,她的名字应该是“THEosugirl”,不是吗? :P

标签: excel vba


【解决方案1】:

您需要使用工作表事件来处理此问题。像这样的:

在具有输入范围的工作表的工作表模块中,输入此代码

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim InputRange As Excel.Range
    Set InputRange = Me.Range("R5")

    '// Check if the change is happening in your dropdown cell
    If Not Intersect(Target, InputRange) Is Nothing Then
        Select Case InputRange.Value
            Case "Name1"
                Application.ActiveWindow.ScrollRow = 2
            Case "Name2"
                Application.ActiveWindow.ScrollRow = 10
            Case "Name3"
                Application.ActiveWindow.ScrollRow = 18
            Case Else
                '//...
        End Select
    End If
End Sub

编辑:

如果您无法使其正常工作。尝试通过单击代码左侧的区域来添加断点。当代码流到达该点时,断点将停止执行。这是确定 Excel 是否正在尝试运行此代码块的一种方法。

Debugging Excel Code

【讨论】:

  • 您需要确保启用了宏并且将其放置在正确的工作表模块中。抱歉,不知道为什么它可能不适合您。
  • 我的宏已启用,我知道这一点是因为我还有其他正在工作的宏。当我运行你的代码时没有任何反应。
  • 我的猜测是 ScrollRow 已经在您的窗口的视图中,所以在这种情况下实际上不会发生滚动?
  • 我也有同样的想法,所以我将其更改为第 30 行和第 60 行,但仍然没有任何反应。
  • 我不知道这是否重要,但我使用数据验证窗口创建了列表。
【解决方案2】:

假设我们在 ST 列中放置了一个小跳转表,例如:

行号在 T 列中。我们把R5中的下拉菜单和工作表代码区的如下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim R5 As Range, v As String, r As Range
    Set R5 = Range("R5")
    If Intersect(Target, R5) Is Nothing Then Exit Sub
    v = R5.Value
    Set r = Range("S:S").Find(what:=v, After:=Range("S1"))
    Application.Goto Range("A" & r.Offset(0, 1).Value)
End Sub

每当用户在单元格 R5 中选择一个新名称时,代码将跳转到列 T 中列出的行。

因为是工作表代码,所以安装非常容易,自动使用:

  1. 右键单击 Excel 窗口底部附近的选项卡名称
  2. 选择查看代码 - 这将打开一个 VBE 窗口
  3. 粘贴内容并关闭 VBE 窗口

如果您有任何疑虑,请先在试用工作表上进行尝试。

如果您保存工作簿,宏将与它一起保存。 如果您使用的是 2003 年以后的 Excel 版本,则必须保存 文件为 .xlsm 而不是 .xlsx

删除宏:

  1. 如上所示打开 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件宏(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

必须启用宏才能正常工作!

【讨论】:

  • 好奇你为什么使用Application.Goto Range("A" & r.Offset(0, 1).Value),而不是Range("A" & r.Offset(0, 1).Select
  • @BruceWayne 我过去遇到过已选择目标的问题,但工作表没有滚动到新选择的单元格。
  • 谢谢,我也试过这段代码,但还是不行。我的文件启用了宏,所以我不确定发生了什么。
  • @osugirl7 - “......仍然不起作用” - 它怎么不起作用?什么都没有发生?它会做某事,但不是您所期望的吗?还要确保此代码在 工作表 中,而不是工作簿模块中。
  • @BruceWayne 没有任何反应。我像你说的那样把代码放在工作表上。右键单击选项卡并复制和粘贴。
【解决方案3】:

右键单击单元格。在弹出窗口的底部,您会找到“超链接”。点击它。另一个窗口打开。在那里选择工作表并输入您想要去的单元格号码。就这样。在此单元格中,出现超链接下给出的地址。如果你给它一个名字,这个名字就会出现。此后,每当您单击此工作表中的此单元格/名称时,您都会转到“超链接”下指定的工作表中的单元格。您可以在新位置输入数据。但是您将无法在按 Enter 键时返回此单元格。当您在新位置按“Enter”时,您会像往常一样转到该工作表中的下一个单元格。我使用另一个超链接返回。它对我有用。我希望这是 excel 提供的一种工具,可以根据超链接轻松跳转到新位置。希望不会有任何级联效应。我希望这正是您想要的。

【讨论】:

  • 在审查中,我发现您的要求是另一回事。我的回答是,如果单元格中有数据。不适用于附加到单元格的列表中的项目。该列表用于验证。列表中的变体在工作表上没有位置。被选中的人来到单元格。
【解决方案4】:

按键盘上的 TAB。它可能会起作用。试试看吧。

【讨论】:

  • 嗨,凯文,我不确定你的意思。当我按 Tab 时,它只会在一个单元格上跳动....
  • 凯文,你应该阅读问题并相应地回答。任何随机的答案都不会帮助任何人。
猜你喜欢
  • 2020-12-30
  • 2012-11-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 2011-01-14
相关资源
最近更新 更多