P.S. После изменения значения в текущей ячейке (и нажатия Enter или Tab или мышкой в другую произвольную ячейку) курсор отскочит от текущей как Вы просите:
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) Target.Offset(1, 3).Select End Sub
[/vba]
Этот код нужно поместить в модуль листа, на котором предполагается такое поведение (попасть в модуль - правой кнопкой мыши на корешке листа и выбрать "Исходный текст").
Ого, ход конём программируете?!
ПОСЛЕ ЧЕГО сдвигался? Enter?
P.S. После изменения значения в текущей ячейке (и нажатия Enter или Tab или мышкой в другую произвольную ячейку) курсор отскочит от текущей как Вы просите:
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) Target.Offset(1, 3).Select End Sub
[/vba]
Этот код нужно поместить в модуль листа, на котором предполагается такое поведение (попасть в модуль - правой кнопкой мыши на корешке листа и выбрать "Исходный текст").Gustav
Это все понятно, всем спасибо!( меню "Другие команды" - "Дополнительно" - "Параметры правки" - "Переход к правой ячейке после нажатия клавиши ВВОД")-это у меня стоит. Но дело в том что я сканирую штрих-коды и после третьего сканирование мне надо чтобы автоматом возвращалось на исходную позицию только на ячейку вниз
Это все понятно, всем спасибо!( меню "Другие команды" - "Дополнительно" - "Параметры правки" - "Переход к правой ячейке после нажатия клавиши ВВОД")-это у меня стоит. Но дело в том что я сканирую штрих-коды и после третьего сканирование мне надо чтобы автоматом возвращалось на исходную позицию только на ячейку внизФилатов
после третьего сканирование мне надо чтобы автоматом возвращалось на исходную позицию только на ячейку вниз
Тогда такой модуль:
[vba]
Code
Option Explicit
Dim cnt As Long
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True cnt = 0 'для принудительного обнуления End Sub
Private Sub Worksheet_Change(ByVal Target As Range) cnt = cnt + 1 If cnt Mod 3 = 0 Then On Error Resume Next Target.Offset(1, -2).Select 'каждый 3-й ентер On Error GoTo 0 Else Target.Offset(0, 1).Select 'каждый 1,2-й ентер End If End Sub
[/vba] Если процесс по какой-либо причине сбивается, то дабл-кликнуть по любой ячейке листа, чтобы обнулить счетчик движений cnt.
Quote (Филатов)
после третьего сканирование мне надо чтобы автоматом возвращалось на исходную позицию только на ячейку вниз
Тогда такой модуль:
[vba]
Code
Option Explicit
Dim cnt As Long
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True cnt = 0 'для принудительного обнуления End Sub
Private Sub Worksheet_Change(ByVal Target As Range) cnt = cnt + 1 If cnt Mod 3 = 0 Then On Error Resume Next Target.Offset(1, -2).Select 'каждый 3-й ентер On Error GoTo 0 Else Target.Offset(0, 1).Select 'каждый 1,2-й ентер End If End Sub
[/vba] Если процесс по какой-либо причине сбивается, то дабл-кликнуть по любой ячейке листа, чтобы обнулить счетчик движений cnt.Gustav
а если тоже-самое, только чтобы через одну перескакивало, и те же самые 3 ячейки? И огромнейшее спасибо за: [vba]
Code
Option Explicit
Dim cnt As Long
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True cnt = 0 'для принудительного обнуления End Sub
Private Sub Worksheet_Change(ByVal Target As Range) cnt = cnt + 1 If cnt Mod 3 = 0 Then On Error Resume Next Target.Offset(1, -2).Select 'каждый 3-й ентер On Error GoTo 0 Else Target.Offset(0, 1).Select 'каждый 1,2-й ентер End If End Sub
[/vba] ОЧЕНЬ ПОМОГЛО!!!!!
а если тоже-самое, только чтобы через одну перескакивало, и те же самые 3 ячейки? И огромнейшее спасибо за: [vba]
Code
Option Explicit
Dim cnt As Long
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True cnt = 0 'для принудительного обнуления End Sub
Private Sub Worksheet_Change(ByVal Target As Range) cnt = cnt + 1 If cnt Mod 3 = 0 Then On Error Resume Next Target.Offset(1, -2).Select 'каждый 3-й ентер On Error GoTo 0 Else Target.Offset(0, 1).Select 'каждый 1,2-й ентер End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) cnt = cnt + 1 If cnt Mod 2 = 0 Then On Error Resume Next Target.Offset(1, -2).Select 'каждый 2-й ентер On Error GoTo 0 Else Target.Offset(0, 2).Select 'каждый 1-й ентер End If End Sub
[/vba] Ну и если еще что-нибудь захочется, то уже самостоятельно по аналогии меняйте. Наверное, уже понятно, как я видоизменяю код.
Quote (Филатов)
B1,D1, B2, и т.д.
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) cnt = cnt + 1 If cnt Mod 2 = 0 Then On Error Resume Next Target.Offset(1, -2).Select 'каждый 2-й ентер On Error GoTo 0 Else Target.Offset(0, 2).Select 'каждый 1-й ентер End If End Sub
[/vba] Ну и если еще что-нибудь захочется, то уже самостоятельно по аналогии меняйте. Наверное, уже понятно, как я видоизменяю код.Gustav
то все понятно, я так уже делал, но не перескакивает курсор через одну ячейку, то-есть, мне надо что-бы совместно с Target.Offset(0, 2) было связан пропуск одной ячейки
то все понятно, я так уже делал, но не перескакивает курсор через одну ячейку, то-есть, мне надо что-бы совместно с Target.Offset(0, 2) было связан пропуск одной ячейкиФилатов
Как не перескакивает?! Я надеюсь Вы поняли, что процедуру Worksheet_Change из предыдущего сообщения надо подпихнуть вместо одноименной процедуры в полном коде модуля два моих сообщения назад?! Т.е. сверху должно остаться неизменная часть: [vba]
Code
Option Explicit Dim cnt As Long Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True cnt = 0 'для принудительного обнуления End Sub
[/vba] Или верхнюю часть выкинули??
P.S. В самый первый раз-то Вы можете установить курсор на ячейку B1? Например, мышкой. И дальше по Энтерам пошло: B1 D1 B2 D2 B3 D3 и т.д. Или я чего-то принципиально не понимаю?
Quote (Филатов)
не перескакивает курсор через одну ячейку
Как не перескакивает?! Я надеюсь Вы поняли, что процедуру Worksheet_Change из предыдущего сообщения надо подпихнуть вместо одноименной процедуры в полном коде модуля два моих сообщения назад?! Т.е. сверху должно остаться неизменная часть: [vba]
Code
Option Explicit Dim cnt As Long Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True cnt = 0 'для принудительного обнуления End Sub
[/vba] Или верхнюю часть выкинули??
P.S. В самый первый раз-то Вы можете установить курсор на ячейку B1? Например, мышкой. И дальше по Энтерам пошло: B1 D1 B2 D2 B3 D3 и т.д. Или я чего-то принципиально не понимаю?Gustav