我知道并理解将项目添加到 ListBox
的常用方法使用逻辑测试:
If a = 1 Then
ListBox1.AddItem x
End If
但是,我想知道是否有可能
.AddItem
直接用逻辑语句?就像是:ListBox1.AddItem If a = 1
这不是一个让我难过的紧迫问题。我只想知道是否有其他方法可以添加到我的知识库中。
最佳答案
如果需要逻辑语句来判断是否添加该项,那么答案是:no*不可能。尽快.AddItem
方法被调用,将添加一个项目 .如果未提供参数(或参数为 Null
/Empty
/vbNullString
/某些不可打印的字符),则在末尾附加一个空白项。
唯一的单行解决方案是按照 K.Dᴀᴠɪs 的建议进行操作:
If a = 1 Then ListBox1.AddItem x
但是,如果逻辑语句可以在要添加的不同项目之间进行选择,那么是的,这是可能的。
方法一 -
IIf()
(内联如果):ListBox1.AddItem IIf(a = 1, x, y)
在哪里
a = 1
~> ListBox1.AddItem x
, 否则 ~> ListBox1.AddItem y
.方法二 -
Choose()
:ListBox1.AddItem Choose(a, x, y, z)
在哪里
a = 1
~> ListBox1.AddItem x
, a = 2
~> ListBox1.AddItem y
, a = 3
~> ListBox1.AddItem z
, ETC。* 从技术上讲,这是可能的。但是,它需要错误捕获和稍微复杂的
.AddItem
使用。方法的第二个参数**:On Error Resume Next
ListBox1.AddItem x, IIf(a = 1, ListBox1.ListCount, -2)
On Error GoTo 0
-2
如果条件失败,插入索引会强制出错,而 ListBox1.ListCount
index 导致项目被附加到列表的末尾。 On Error
语句导致 .AddItem
发生错误时要跳过的方法。第二个参数也可以用几种不同的方式重写,例如:
ListBox1.AddItem x, ListBox1.ListCount + IIf(a = 1, 0, 1)
ListBox1.AddItem x, ListBox1.ListCount + (a = 1) + 1
** 也可以在不使用第二个参数的情况下进行逻辑语句,但它要么需要区分字符串和数字,要么总是转换为字符串,结果不容易阅读/理解:
On Error Resume Next
' for numbers
ListBox1.AddItem 42 / -(a = 1)
' or for strings
ListBox1.AddItem "42" & String$(0 / (a = 1), 0)
' or for both
ListBox1.AddItem CStr(x) & String$(0 / (a = 1), 0)
ListBox1.AddItem CStr(x) & Choose(1 / (a = 1))
ListBox1.AddItem CStr(x) & IIf(1 / (a = 1), "", "")
On Error GoTo 0
这次的技巧是在条件失败时强制除以零错误,否则将数字除以 1 或将空字符串附加到字符串。 (
String$(0, 0)
返回空字符串,Choose(-1)
返回 Null
,它们像空字符串一样连接。)备注:
On Error
这种方式的陈述是不是 推荐的。一个适当的错误处理程序,它检查并仅恢复特定的适当错误应该几乎总是 总是 使用。 (当然,所有其他捕获的错误都会重新引发。)关于vba - 可以直接在 UserForm.AddItem 中使用逻辑语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48565892/