Arrays VBA:类模块和数组问题

Arrays VBA:类模块和数组问题,arrays,class,vba,object,module,Arrays,Class,Vba,Object,Module,我一直在做一个小项目,在这个项目中,我试图通过VBA使用类模块来获得结果 第一个问题: 以下语句来自类模块: Private xRef As Integer Private yRef As Integer Private bValue As Boolean Private NextTiles(1 To 4, 1 To 4) As Boolean Public Property Get PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integ

我一直在做一个小项目,在这个项目中,我试图通过VBA使用类模块来获得结果

第一个问题:

以下语句来自类模块:

Private xRef As Integer
Private yRef As Integer
Private bValue As Boolean
Private NextTiles(1 To 4, 1 To 4) As Boolean

Public Property Get PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer) As Boolean
    PreviewTiles(xRef, yRef) = NextTiles(xRef, yRef)
End Property

Public Property Let PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer, ByVal bValue As Boolean)
    NextTiles(xRef, yRef) = bValue
End Property
在主子模块主体中,存在以下语句:

Public P1, P2 As TetrisPlayer

Set P1 = New TetrisPlayer
Set P2 = New TetrisPlayer

...

P1.PreviewTiles(1, 1) = True
MsgBox P1.PreviewTiles(1, 1)
问题1- 这会返回P1.PreviewTiles(1,1)的值为False,而它应该为true

第二个问题:

下面的代码基于一个单独的子模块,集合播放器包括P1和P2(来自一个单独的子模块)

这或多或少是可行的(尽管它遇到了问题1)。因此,我尝试使用以下语句进行调试:

Sub TETRIS_Start(FormName As String)

   Call TETRIS_GenerateShape(FormName, P1, True)

End Sub
问题2- 这导致对象P1(公开声明,我甚至尝试在本地声明)无法传递到子模块TETRIS_GenerateShape

出现的错误消息是: 编译错误:ByRef参数类型不匹配

有什么建议吗?

这是:

Public P1, P2 As TetrisPlayer
没有做你认为是的事。P1现在是一个变体,P2是一个四驱播放器。相反,请使用:

Public P1 as TetrisPlayer, P2 as TetrisPlayer
在TetrisPlayer中使用此选项,或者在当前代码中使用:

Public Property Get PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer) As Boolean
    PreviewTiles = NextTiles(xRef, yRef)
End Property

Public Property Let PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer, ByVal bValue As Boolean)
    NextTiles(xRef, yRef) = bValue
End Property
首先,在MsgBox P1.PreviewFiles(1,1)上设置一个断点,然后运行代码以观察发生了什么

这是:

Public P1, P2 As TetrisPlayer
没有做你认为是的事。P1现在是一个变体,P2是一个四驱播放器。相反,请使用:

Public P1 as TetrisPlayer, P2 as TetrisPlayer
在TetrisPlayer中使用此选项,或者在当前代码中使用:

Public Property Get PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer) As Boolean
    PreviewTiles = NextTiles(xRef, yRef)
End Property

Public Property Let PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer, ByVal bValue As Boolean)
    NextTiles(xRef, yRef) = bValue
End Property
首先,在MsgBox P1.PreviewFiles(1,1)上设置一个断点,然后运行代码以观察发生了什么

这是:

Public P1, P2 As TetrisPlayer
没有做你认为是的事。P1现在是一个变体,P2是一个四驱播放器。相反,请使用:

Public P1 as TetrisPlayer, P2 as TetrisPlayer
在TetrisPlayer中使用此选项,或者在当前代码中使用:

Public Property Get PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer) As Boolean
    PreviewTiles = NextTiles(xRef, yRef)
End Property

Public Property Let PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer, ByVal bValue As Boolean)
    NextTiles(xRef, yRef) = bValue
End Property
首先,在MsgBox P1.PreviewFiles(1,1)上设置一个断点,然后运行代码以观察发生了什么

这是:

Public P1, P2 As TetrisPlayer
没有做你认为是的事。P1现在是一个变体,P2是一个四驱播放器。相反,请使用:

Public P1 as TetrisPlayer, P2 as TetrisPlayer
在TetrisPlayer中使用此选项,或者在当前代码中使用:

Public Property Get PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer) As Boolean
    PreviewTiles = NextTiles(xRef, yRef)
End Property

Public Property Let PreviewTiles(ByVal xRef As Integer, ByVal yRef As Integer, ByVal bValue As Boolean)
    NextTiles(xRef, yRef) = bValue
End Property
首先,在MsgBox P1.PreviewFiles(1,1)上设置一个断点,然后运行代码以观察发生了什么