Excel 2013 | Попытка перейти из нижней части списка в один столбец в начало следующего столбца

Я пытаюсь заполнить список в блоке ячеек: D2:E8, двигаясь вниз. Когда я доберусь до D8, я хочу иметь возможность нажать ввод (числовой или обычный) и перейти к 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

Но это ничего не делает.


person Rupedaddy    schedule 08.07.2014    source источник
comment
Вам не подходит выбор D2:E8 и нажатие ENTER KEY? Можете ли вы уточнить, чего вы хотите достичь?   -  person L42    schedule 08.07.2014
comment
Я знаю. Я мог бы это сделать, но я ленив и не хочу выбирать их все. Я хочу иметь возможность отправлять выбор из D8 в E2, когда я нажимаю Enter. Я новичок (очень новичок) студент VBA и хочу учиться на этом.   -  person Rupedaddy    schedule 09.07.2014


Ответы (1)


Вы можете разработать процедуру события, чтобы активировать E2 в любое время, когда вы пытаетесь перейти от D8 к D9 — вставьте нижеследующее в свой модуль рабочего листа:

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, тебе удалось это решить? если нет, вы, скорее всего, вставили приведенный выше код не в то место, и это говорит о том, что вы, возможно, не знакомы с модулями объектного кода, поэтому позвольте мне попытаться объяснить лучше.

Вы видите окно проводника проекта? похоже на этот http://www.excel-vba.com/zi-vbe-project-add-sheet.jpg и должен отображаться по умолчанию в левом верхнем углу окна VBE. Если это так, просто попробуйте найти свой путь через отображаемую древовидную структуру, это должно быть довольно интуитивно понятно:

  • найдите VBAProject, который относится к интересующей вас книге
  • под ним изучите узел «Объекты Microsoft Excel»
  • дважды щелкните подузел, относящийся к вашему рабочему листу. Это откроет модуль кода объекта рабочего листа в главном окне кода.

Затем просто вставьте туда приведенный выше код - и вы должны быть в пути. Это требование, чтобы событийные процедуры вводились в модуль кода объекта, с которым они должны быть связаны.

Надеюсь это поможет

Изменить: чтобы это работало для всех рабочих листов, вставьте приведенный ниже код в модуль объектного кода вашей книги.

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
person IAmDranged    schedule 08.07.2014
comment
Я не мог заставить это работать. Помогает ли вам сказать, что мои ячейки находятся в Sheet3? - person Rupedaddy; 09.07.2014
comment
@Rupedaddy На самом деле вам нужно поместить это в код Sheet3. - person L42; 09.07.2014
comment
Вы все классные! Я думал, что пытался вставить вышеуказанное в объект Sheet3, но, видимо, так и не сделал. Он работает теперь, когда он у меня есть. Это имеет смысл. Спасибо всем за помощь и работу с таким новичком, как я. Мне предстоит долгий путь. :) - person Rupedaddy; 11.07.2014
comment
Итак, следующий вопрос; как заставить это работать на всех листах в книге? В какое место нужно ввести код? Или что нужно добавить, чтобы это произошло? - person Rupedaddy; 11.07.2014