如何根据列表选择跳到特定单元格

时间:2019-06-13 14:26:50

标签: excel vba

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

3 个答案:

答案 0 :(得分: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是否甚至尝试运行此代码块的一种方法。

enter image description here

Debugging Excel Code

答案 1 :(得分:1)

假设我们在 S T 列中添加了一个跳转表,例如:

enter image description here

行号在 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

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

答案 2 :(得分:-1)

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