VBA Excel 不喜欢 String If 语句
VBA Excel Not Like String If Statement
我正在尝试编写一个 "If" 语句来检查与名为 Players 的 (Scripting.)Dictionary 中的 Player 对象相对应的 Key 是否具有包含字母 "P."
我一定是遗漏了一些 VBA 语法糖,但我似乎找不到任何地方做错的答案。
我现在的声明是:
For Each Key In Players.Keys()
If Not (Players(Key).Position Like "*P*") Then 'something'
End If
Next Key
但是,即使位置 属性 中有 P,它也会选择它循环的第一个字典条目。
在这种情况下 Player(Key).Position = "RP," 然后我想跳过 "Then" 语句。它目前不起作用。
如有任何帮助,我们将不胜感激。
编辑
玩家 class 是:
'Class Module: Player
Public Name As String
Public Position As String
Public WAR As Double
这不能解决您的问题,但...可能会有所帮助。我无法重现此行为:
玩家Class模块:
'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
就像我在评论中所说的,我不知道为什么这对你不起作用,但希望在简化代码中看到这一点可能会指出你的 class 实现或你的字典存在一些问题迭代,或您的类似条件...或您共享的代码中不明显的内容。
我正在尝试编写一个 "If" 语句来检查与名为 Players 的 (Scripting.)Dictionary 中的 Player 对象相对应的 Key 是否具有包含字母 "P."
我一定是遗漏了一些 VBA 语法糖,但我似乎找不到任何地方做错的答案。
我现在的声明是:
For Each Key In Players.Keys()
If Not (Players(Key).Position Like "*P*") Then 'something'
End If
Next Key
但是,即使位置 属性 中有 P,它也会选择它循环的第一个字典条目。
在这种情况下 Player(Key).Position = "RP," 然后我想跳过 "Then" 语句。它目前不起作用。
如有任何帮助,我们将不胜感激。
编辑
玩家 class 是:
'Class Module: Player
Public Name As String
Public Position As String
Public WAR As Double
这不能解决您的问题,但...可能会有所帮助。我无法重现此行为:
玩家Class模块:
'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
就像我在评论中所说的,我不知道为什么这对你不起作用,但希望在简化代码中看到这一点可能会指出你的 class 实现或你的字典存在一些问题迭代,或您的类似条件...或您共享的代码中不明显的内容。