0

我正在尝试编写一个“If”语句,以检查与(脚本)中名为 Players 的 Player 对象对应的 Key 是否具有包含字母“P”的 String 值。

我一定错过了一些 VBA 语法糖,但我似乎无法在任何地方找到我做错了什么的答案。

我现在的声明是:

For Each Key In Players.Keys()
    If Not (Players(Key).Position Like "*P*") Then 'something'
    End If
Next Key

但是,即使 Position 属性中有一个 P,它也会选择它循环通过的第一个字典条目。

在这种情况下,Player(Key).Position = "RP," 我想跳过“Then”语句。它目前不起作用。

任何帮助,将不胜感激。

编辑

播放器类是:

'Class Module: Player
Public Name As String
Public Position As String
Public WAR As Double
4

1 回答 1

1

这并不能解决您的问题,但是......它可能会有所帮助。我无法重现此行为:

播放器类模块:

'Class Module: Player
Public Name As String
Public Position As String
Public WAR As Double

子程序:

Sub test()
    Dim players As Scripting.Dictionary
    Set players = New Scripting.Dictionary

    Dim pers As Player

    Set pers = New Player
    pers.Position = "RP"
    players.Add "1", pers

    Set pers = New Player
    pers.Position = "What"
    players.Add "2", pers

    Set pers = Nothing

    For Each pkey In players.Keys
        If Not (players(pkey).Position Like "*P*") Then
            Debug.Print players(pkey).Position, "Not a P Player"
        Else
            Debug.Print players(pkey).Position, "Its a P Player"
        End If
    Next

End Sub

立即窗格中的结果:

RP            Its a P Player
What          Not a P Player

就像我在评论中说的那样,我不知道为什么这对你不起作用,但希望在简化代码中看到这一点可能会指出你的类实现、字典迭代或类似条件的一些问题......或者在您共享的代码中不明显的东西。

于 2018-05-03T20:20:38.047 回答