Доброго времени суток! Просьба написать макрос - активирование ячейки в определенном диапазоне. Детальнее - например, в макросе будет прописан диапазон ячеек в котором будет "ходить" активная ячейка. Например, указан диапазон в макросе А1:С2, активная ячейка на данный момент например, А2, по нажатия Enter без макроса стала бы активной ячейкой А3. При работающем макросе по нажатию Enter активная ячейка стала бы B1. Если активная ячейка не попадает в диапазон А1:С2, значит активная ячейка будет "ходит" по стандарту А3-А4-А5 и тд. В случае если активная ячейка - С2, по нажатию клавиши Enter выводить сообщение - ВЫПОЛНЕНО! Получилось много буков. Но Я так вижу данную процедуру. Сразу извинюсь за некорректное объяснение и название темы, но лучшее не приходит на ум. Не знаю нужно ли здесь прикладывать файл, да, и что там будет - пустой лист.
ENTER - Это подтверждение ввода или по пустой ячейке тоже должно работать? Без Учета
Цитата
ГДВ написал: В случае если активная ячейка - С2, по нажатию клавиши Enter выводить сообщение - ВЫПОЛНЕНО!
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static OldMoveAfterReturnDirection As Long
If Not Intersect(Target, Range("a1:c2")) Is Nothing Then
If Not Application.MoveAfterReturnDirection = xlToRight Then
OldMoveAfterReturnDirection = Application.MoveAfterReturnDirection
Application.MoveAfterReturnDirection = xlToRight
End If
Else
If Not IsEmpty(OldMoveAfterReturnDirection) Then
Application.MoveAfterReturnDirection = OldMoveAfterReturnDirection
OldMoveAfterReturnDirection = Empty
End If
End If
End Sub
БМВ, по пустой тоже должно работать. БМВ, застестил ваш макрос: активная ячейка А1, руками "записал" число, Enter - стала ячейка В1. активная ячейка В1, руками "записал" число, Enter - стала ячейка С1. активная ячейка С1, ничего не писал, Enter - стала ячейка D1. активная ячейка D1, руками "записал" число, Enter - стала ячейка D2.
Хотелось бы: активная ячейка А1, руками "записал" число, Enter - стала ячейка А2. активная ячейка А2, руками "записал" число, Enter - стала ячейка В1. активная ячейка В1, ничего не писал, Enter - стала ячейка В2. активная ячейка В2, руками "записал" число, Enter - стала ячейка С1. активная ячейка С1, руками "записал" число, Enter - стала ячейка С2. активная ячейка С2, руками "записал" число, Enter - сообщение "ВЫПОЛНЕНО".
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static OldMoveAfterReturnDirection As Long, PrevCell As Range, myRane As Range
Set MyRange = Range("a1:c2")
If Not Intersect(Target, MyRange) Is Nothing Then
Set PrevCell = Target
If Not Application.MoveAfterReturnDirection = xlDown Then
OldMoveAfterReturnDirection = Application.MoveAfterReturnDirection
Application.MoveAfterReturnDirection = xlDown
End If
Else
If Not PrevCell Is Nothing Then
If PrevCell.Row = MyRange.Row + MyRange.Rows.Count - 1 And PrevCell.Address = Target.Offset(-1).Address Then
If PrevCell.Column = MyRange.Column + MyRange.Columns.Count - 1 Then
MsgBox "Выполнено!"
Set PrevCell = Nothing
Else
Application.EnableEvents = False
Cells(MyRange.Row, PrevCell.Column + 1).Activate
Set PrevCell = ActiveCell
Application.EnableEvents = True
End If
Else
Set PrevCell = Nothing
End If
End If
If Not IsEmpty(OldMoveAfterReturnDirection) Then
Application.MoveAfterReturnDirection = OldMoveAfterReturnDirection
OldMoveAfterReturnDirection = Empty
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static s0 As Range, x&, y&
If s0 Is Nothing Then Set s0 = Target: Exit Sub
Select Case Application.MoveAfterReturnDirection
Case xlToRight: x = 1
Case xlToLeft: x = -1
Case xlDown: y = 1
Case xlUp: y = -1
End Select
If Intersect(s0.Offset(y, x), Target) Is Nothing Then
Set s0 = Target: Exit Sub
End If
Application.EnableEvents = False
If Not Intersect(s0, [a2:b2]) Is Nothing Then
Set s0 = s0.Offset(-1, 1): s0.Select
ElseIf Not Intersect(s0, [a1:c1]) Is Nothing Then
Set s0 = s0.Offset(1): s0.Select
ElseIf Not Intersect(s0, [c2]) Is Nothing Then
Set s0 = s0.Offset(-1, -2): s0.Select
Else
Set s0 = Target
End If
Application.EnableEvents = True
End Sub
БМВ, спс, работает, но почему-то в настройках Excel меняет направление (Файл - Параметры - Дополнительно. Переход к другой ячейки после нажатия клавиши ВВОД) с "Вниз" на "Влево" Iгор, спс. работает в указанном диапазоне, но не хватает MsgBox, и для меня на первый взгляд сложноват в плане адаптации под мои критерии.
не почему-то а потому, что такое принято решение и так написан макрос в макросах ничего не происходит "почему-то", а происходит строго так, как написано
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
ГДВ написал: но почему-то в настройках Excel меняет направление (Файл - Параметры - Дополнительно. Переход к другой ячейки после нажатия клавиши ВВОД) с "Вниз" на "Влево"
У меня не меняет, и более того в коде это не прописано.
Доброго времени суток! Может не по теме, но по поиску ближе всего нашел именно эту тему. Можно приписать макрос для переключения курсора по заданным ячейкам? Что не на вес Лист, а в определенных строках и ячейках и ещё чтобы ничего не сбилась при добавлении или удалении строки или ячейки. Последовательность указал в картине.