VBA Excel不像字符串If语句
Posted
技术标签:
【中文标题】VBA Excel不像字符串If语句【英文标题】:VBA Excel Not Like String If Statement 【发布时间】:2018-05-03 19:48:02 【问题描述】:我正在尝试编写一个“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
【问题讨论】:
我相信您只想测试Players(Key)
,它将返回Players
字典中该键的值。而不是测试Players(Key).Position
。我不确定这里会返回什么“.Position”。这不是字典对象的属性或方法。
你也可以通过字典的值而不是For Each player in Players.Items
的键来循环...我不确定你在做什么,所以也许这不是一个选择。
@JNevill 我编辑了我的原始帖子以包含播放器类。如果我只使用 Players(Key),它会返回一个 Player 对象,它不是作为字符串的 Position 属性,我想检查它是否包含 P。
啊!字典项是一个对象。头脑=吹。现在这是有道理的。如果你在Players(key).Position
的 IF 测试中设置断点,你会得到什么价值。由于您的 If 条件正确,因此似乎有些问题。
@JNevill "RP" - 这是最令人困惑的部分
【参考方案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
就像我在 cmets 中所说的那样,我不知道为什么这对您不起作用,但希望在简化代码中看到这一点可能会指出您的类实现、字典迭代或您的类似条件存在一些问题...或者在您共享的代码中不明显的东西。
【讨论】:
If Not players(pkey).Position Like "*P*" Then
也有效以上是关于VBA Excel不像字符串If语句的主要内容,如果未能解决你的问题,请参考以下文章