Excel 2013 |尝试从一列中的列表底部移动到下一列的顶部

时间:2014-07-08 01:04:33

标签: excel-vba excel-2013 vba excel

我正在尝试在一个单元格块中填写一个列表:D2:E8向下移动。当我到达D8时,我希望能够按Enter(数字或常规)并移动到E2以启动列表的第二列。我意识到我可以选项卡,输入,制表符,输入...,但是,我不想!这是我的代码:

Sub returntotop()
'

' return_to_top Macro
'

If Selection.Address = "Sheet3!$D$8" Then
     Application.OnKey "~", "ActiveCell.Offset(-6, 1).Select"
End If

End Sub

但是,它什么也没做。

1 个答案:

答案 0 :(得分:1)

您可以设计一个事件程序,以便在您尝试从D8转到D9时激活E2 - 将下面的内容粘贴到您的工作表模块中:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static mybool As Boolean
    If Target.Address = Range("D8").Address Then
        mybool = True
        Exit Sub
    End If
    If mybool = True And Target.Address = Range("D9").Address Then
        Range("E2").Activate
    End If
    mybool = False
End Sub

@ Rupedaddy - 你有没有能够解决这个问题?如果不是,你很可能将上面的代码放在错误的地方,这表明你可能不熟悉目标代码模块,所以让我试着更好地解释。

您是否看到了Project explorer窗口?类似于此http://www.excel-vba.com/zi-vbe-project-add-sheet.jpg,默认情况下应显示在VBE窗口的左上角。如果是这样,只需尝试通过它显示的树结构找到自己的方式,应该非常直观:

  • 找到与您感兴趣的工作簿相关的VBAProject
  • 下面,浏览“Microsoft Excel Objects”节点
  • 双击与您的工作表相关的子节点。这将在主代码窗口中打开您的工作表对象代码模块

然后只需坚持上面的代码 - 你应该在路上。这是要求在与其关联的对象的代码模块中输入事件过程的要求。

希望这有帮助

编辑:为了适用于所有工作表,请将以下代码粘贴到Workbook目标代码模块中

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Static ws As Worksheet
    If Target.Address = Range("D8").Address Then
        Set ws = Sh
        Exit Sub
    End If
    If ws Is Sh Then
        Set ws = Nothing
        If Target.Address = Range("D9").Address Then
            Range("E2").Activate
        End If
    End If
End Sub