excel-vba可玩迷宫使细胞(解释为墙)成为无法通过的对象

时间:2018-10-12 08:25:20

标签: excel vba excel-vba

所以我制作了用于offset.select的表单控制按钮(selection(左上右下按钮)),我想不出一个代码,当一个单元被墙壁包围时(我将其设为黑色填充单元),单元只能转到其左/右/等位置。非常感谢您的帮助(我认为我是excel-vba的新手)

here's what my maze looks like

1 个答案:

答案 0 :(得分:1)

在工作表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