Страницы: 1
RSS
Активирование ячейки в определенном диапазоне
 
Доброго времени суток!
Просьба написать макрос - активирование ячейки в определенном диапазоне. Детальнее - например, в макросе будет прописан диапазон ячеек в котором будет "ходить" активная ячейка. Например, указан диапазон в макросе А1:С2, активная ячейка на данный момент например, А2, по нажатия Enter без макроса стала бы активной ячейкой А3. При работающем макросе по нажатию Enter активная ячейка стала бы B1. Если активная ячейка не попадает в диапазон А1:С2, значит активная ячейка будет "ходит" по стандарту А3-А4-А5 и тд. В случае если активная ячейка - С2, по нажатию клавиши Enter выводить сообщение - ВЫПОЛНЕНО!
Получилось много буков. Но Я так вижу данную процедуру. Сразу извинюсь за некорректное объяснение и название темы, но лучшее не приходит на ум.
Не знаю нужно ли здесь прикладывать файл, да, и что там будет - пустой лист.
Изменено: ГДВ - 19.09.2021 11:08:04
 
ГДВ, ничего не понятно)) а букв много)
зачем Вам это? может решать задачу а не какие-то активации?? есть же логика в этих действиях?
Изменено: Mershik - 19.09.2021 10:53:52
Не бойтесь совершенства. Вам его не достичь.
 
Да, большинства логики нет)
Зачем это, ну вот появилась такая необходимость)
А где именно не понятно, можем разобрать ещё детальнее?
 
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
Изменено: БМВ - 19.09.2021 12:16:04
По вопросам из тем форума, личку не читаю.
 
БМВ, по пустой тоже должно работать.
БМВ, застестил ваш макрос:
активная ячейка А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
Изменено: БМВ - 19.09.2021 13:37:36
По вопросам из тем форума, личку не читаю.
 
Код
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 меняет направление (Файл - Параметры - Дополнительно. Переход к другой ячейки после нажатия клавиши ВВОД) с "Вниз" на "Влево"
У меня не меняет, и более того в коде это не прописано.
По вопросам из тем форума, личку не читаю.
 
Доброго времени суток!
Может не по теме, но по поиску ближе всего нашел именно эту тему.
Можно приписать макрос для переключения курсора по заданным ячейкам? Что не на вес Лист, а в определенных строках и ячейках и ещё чтобы ничего не сбилась при добавлении или удалении строки или ячейки. Последовательность указал в картине.
Страницы: 1
Наверх