excel - VBA Excel不像字符串If语句
问题描述
我正在尝试编写一个“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
解决方案
这并不能解决您的问题,但是......它可能会有所帮助。我无法重现此行为:
播放器类模块:
'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
就像我在评论中说的那样,我不知道为什么这对你不起作用,但希望在简化代码中看到这一点可能会指出你的类实现、字典迭代或类似条件的一些问题......或者在您共享的代码中不明显的东西。
推荐阅读
- spring-boot - 为什么即使满足一致性级别,cassandra 写入也会失败?
- qt - QT Scene Graph 无法绘制网格
- azure - 添加或删除订阅 - Azure
- angularjs - Angularjs(如何制作响应式网站)
- laravel - 无法覆盖 laravel 默认的身份验证用户名方法
- postgresql - 在 Postgres 中保存行时出错,如何解决?
- java - 如何在 Spring 配置中以 MB 或 GB 为单位指定 maxInMemorySize
- kubernetes - GCE Image 突然找不到
- c# - 如何加快两个循环的进程
- html - 使 HTML 表格具有响应性