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语句的主要内容,如果未能解决你的问题,请参考以下文章

vba 判断一个单元格中是不是包含某个字符串 有则执行后面的语句

vba中怎么遍历单元格中所有字符串

excel VBA用户定义函数中是不是可以有多个if语句

vb中mid函数是如何使用的

IF & Statement 从 excel 到 VBA

VBA研究用VBA取得EXCEL随意列有效行数