Страницы: 1
RSS
Как задать переход на нужную ячейку при нажатии ENTER
 
Прошу помощи у форумчан..  
 
Вопрос:  
Нужно создать код, который при нажатии Enter будет переводить выделение на нужную ячейку..  
Например, если мы нажмем Enter в ячейке А1, то перескок выделения на А5,  
если мы нажмем Enter в ячейке В1, то перескок выделения на В10,  
если мы нажмем Enter в ячейке С1, то перескок выделения на С15..    
 
В принципе, интересует сам подход, потому что адреса ячеек могут быть разными, как и их количество..  
Очень на Вас надеюсь..
 
'Это в модуль книги  
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
Application.OnKey "~", ""  
End Sub  
Private Sub Workbook_Open()  
Application.OnKey "~", "qwe"  
End Sub  
__________________  
Sub qwe() ' Это в рабочий модуль  
Selection.Offset(1, 7).Select  
'И тут выполняйте проверку - где находится курсор и что ему делать(не делать).  
'Геморройно это все, однако.  
End Sub  
Если же нужно прыгать после изменения ячейки, тогда лучше использовать событие листа Worksheet_Change.
Я сам - дурнее всякого примера! ...
 
Вот так можно (окончание редактирования):  
Private Sub Worksheet_Change(ByVal Target As Range)  
   If Not Intersect(Target, Range("A1")) Is Nothing Then  
       Target.Offset(4, 0).Select  
   End If  
   If Not Intersect(Target, Range("B1")) Is Nothing Then  
       Target.Offset(9, 0).Select  
   End If  
   If Not Intersect(Target, Range("C1")) Is Nothing Then  
       Target.Offset(14, 0).Select  
   End If  
End Sub  
(Копируем в модуль листа)
 
Спасибо, сейчас попробуем..
 
Юрий М..  
 
Ваш код сработал.. вопрос решен..! и при этом не потребовалось введения распознавания нажатых клавиш..  
 
Еще раз спасибо..
 
Только учтите, что если в ячейке ничего не менялось - ничего и не произойдёт.
 
В принципе, так и надо.. человек вводит число, жмет Enter, и для его удобства (чтобы не клацать мышкой..) идет перескок на другую, нужную ячейку для нового ввода..    
(Раньше использовал защиту ячеек, но в данном случае лист должен быть разблокирован..)  
И по ходу вопрос, а можно ли использовать вместо:  
If Not Intersect(Target, Range("B1")) Is Nothing Then  
 
вот так,  
If Target = Range("B1") Then
 
Дим, F2 не в счёт :-)
 
{quote}{login=}{date=06.06.2010 12:29}{thema=}{post}... вопрос, а можно ли использовать вместо:  
If Not Intersect(Target, Range("B1")) Is Nothing Then  
вот так,  
If Target = Range("B1") Then{/post}{/quote}  
А взять и проверить?
 
{quote}  
А взять и проверить?{/post}{/quote}  
 
 
Не.. не работает..  
Пишет ошибку "Тип не соответствует"..
 
У меня такая конструкция:  
If Target = Range("A1") Then Target.Offset(4, 0).Select  
работает
 
{quote}{login=The_Prist}{date=06.06.2010 12:46}{thema=Re: Re: Re: }{post}{quote}{login=}{date=06.06.2010 12:41}{thema=Re: Re: }{post}Не.. не работает..  
Пишет ошибку "Тип не соответствует"..{/post}{/quote}If Target.Address(0,0) = Range("B1") Then{/post}{/quote}  
 
Тоже не работает..  
Не происходит перескока..  
 
Вобщем, оставляю первый вариант Юрия, как самый надежный..
 
{quote}{login=The_Prist}{date=06.06.2010 01:01}{thema=Re: Re:}{post}{quote}{login=}{date=06.06.2010 12:59}{thema=Re:}{post}Тоже не работает..  
Не происходит перескока..  
 
Вобщем, оставляю первый вариант Юрия, как самый надежный..{/post}{/quote}Я поправил:  
If Target.Address(0,0) = "B1" Then{/post}{/quote}  
 
 
Да..  
Так получается нормально.. Спасибо..
 
Уважаемые, Форумчани!  
Столкнулся с проблемой при переходе с объеденными ячейками. т.е. если  
If Target = Range("N8") Then Target.Offset(1, 1).Select  
 
должен опускать на 1 вниз и на 1 права и попадать в ячейку P9, вместо этого, курсор попадает в AX9  
 
прикладываю файл для примера (см. вложение)
 
Удалось самостоятельно догадаться    
Если кому пригодиться, проблема решается следующим образом  
 
If Target.Address(0, 0) = "N8" Then Range("P9").Select
Страницы: 1
Читают тему
Наверх