Используйте приведенный ниже код VBA на рабочих листах, и вы даже сможете пройтись по лабиринту с помощью клавиш со стрелками.Вы не сможете проходить сквозь стены.
Option Explicit
Public OldPosition As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If OldPosition Is Nothing Then Set OldPosition = Target.Parent.Range("AF9") 'adjust AF9 to your start position
If Target.Interior.Color = vbBlack Or Target.Row = 1 Or Target.Column = 1 Or Intersect(Target, OldPosition.Offset(-1, -1).Resize(3, 3)) Is Nothing Then
Application.EnableEvents = False
OldPosition.Select
Application.EnableEvents = True
Else
OldPosition.Interior.Pattern = xlNone
Set OldPosition = Target
OldPosition.Interior.Color = vbRed
End If
If Not Intersect(Target, Target.Parent.Range("V50")) Is Nothing Then
MsgBox "you finished"
End If
End Sub
Как это работает?
- Мы используем открытую переменную для сохранения текущей позициивыбранная ячейка.
- Событие Worksheet_SelectionChange срабатывает при каждом изменении выбранной ячейки.Поэтому мы проверяем, является ли цвет фона целевой ячейки
Target.Interior.Color
черным.Если это так, то мы возвращаемся к старой позиции OldPosition.Select
, в противном случае мы принимаем и запоминаем целевую ячейку как нашу текущую позицию Set OldPosition = Target
Это предотвращает прыжок пользователя с помощью мыши
If Target.Interior.Color = vbBlack Or Intersect(Target, OldPosition.Offset(-1, -1).Resize(3, 3)) Is Nothing Then