Воспроизводимые в лабиринте excel-vba ячейки, превращающие клетки (воспринимаемые как стены) в объекты, через которые невозможно пройти - PullRequest
0 голосов
/ 12 октября 2018

, поэтому я сделал кнопки управления формой для offset.select (кнопки вверх, вниз, влево, вправо), и я не могу найти код, который, когда ячейка окружена стеной (я сделал ячейку, заполненную черным),ячейка может идти только влево / вправо / и т.д.Ваша помощь очень ценится (я бы посчитал, что мой навык в excel-vba новичок)

here's what my maze looks like

1 Ответ

0 голосов
/ 12 октября 2018

Используйте приведенный ниже код 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...