可以在UserForm.AddItem中直接使用逻辑语句吗?
Possible to use logic statement directly in UserForm.AddItem?
我知道并理解使用逻辑测试向 ListBox
添加项目的常用方法:
If a = 1 Then
ListBox1.AddItem x
End If
但是,我想知道是否可以直接用逻辑语句.AddItem
?类似于:
ListBox1.AddItem If a = 1
这不是一个让我难过的紧迫问题。我只想知道是否有其他方法可以添加到我的知识库中。
据我所知,您不能直接使用 .addItem 方法添加逻辑语句。但是,您可以定义一个函数,例如:
Function check(b As Integer)
If b = 1 Then
check = "x"
Else
End If
End Function
然后像这样使用 .addItem:
ListBox1.AddItem check(a)
编辑:不幸的是,正如@robinCTS 所注意到的,此方法将导致添加空白项目做列表框项目。所以它只有在你想有一个替代方案时才有效(例如根据条件添加 "x" 或 "y" )。似乎只能通过在 .addItem 行之后删除它来解决空白行的问题。
如果需要逻辑语句来判断是否添加item,那么答案是:否*是不可能的。一旦调用 .AddItem
方法, 将添加一个项目 。如果没有提供参数(或者参数是Null
/Empty
/vbNullString
/某些非打印字符),则在末尾附加一个空白项。
唯一的单线解决方案是按照 K.Dᴀᴠɪ 的建议:
If a = 1 Then ListBox1.AddItem x
但是,如果逻辑语句是在要添加的不同项目之间进行选择,那么是的,这是可能的。
方法 1 - IIf()
(内联 if):
ListBox1.AddItem IIf(a = 1, x, y)
其中 a = 1
~> ListBox1.AddItem x
,否则 ~> ListBox1.AddItem y
.
方法 2 - Choose()
:
ListBox1.AddItem Choose(a, x, y, z)
其中 a = 1
~> ListBox1.AddItem x
, a = 2
~> ListBox1.AddItem y
, a = 3
~> ListBox1.AddItem z
, 等等
*从技术上讲,是可能的。但是,它需要错误捕获和稍微复杂地使用 .AddItem
方法的第二个参数**:
On Error Resume Next
ListBox1.AddItem x, IIf(a = 1, ListBox1.ListCount, -2)
On Error GoTo 0
如果条件失败,-2
插入索引会强制出错,而 ListBox1.ListCount
索引会使项目附加到列表的末尾。 On Error
语句导致 .AddItem
方法在发生错误时被跳过。
第二个参数也可以用几种不同的方式重写,例如:
ListBox1.AddItem x, ListBox1.ListCount + IIf(a = 1, 0, 1)
ListBox1.AddItem x, ListBox1.ListCount + (a = 1) + 1
** 也可以有一个逻辑语句 without 使用第二个参数,但它要么需要区分字符串和数字或总是转换为字符串,结果并不容易 read/understand:
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)
returns 一个空字符串,和 Choose(-1)
returns Null
,它像一个空字符串一样连接。)
备注:
- 虽然所有这些示例都将项目附加到列表的末尾,但它们可以修改为在中间添加或插入。
- 一般来说,不推荐以这种方式使用
On Error
语句。一个正确的错误处理程序可以检查并仅恢复特定的适当错误,应该 almost always always 被使用。 (当然,所有其他被困错误都会重新出现。)
我知道并理解使用逻辑测试向 ListBox
添加项目的常用方法:
If a = 1 Then
ListBox1.AddItem x
End If
但是,我想知道是否可以直接用逻辑语句.AddItem
?类似于:
ListBox1.AddItem If a = 1
这不是一个让我难过的紧迫问题。我只想知道是否有其他方法可以添加到我的知识库中。
据我所知,您不能直接使用 .addItem 方法添加逻辑语句。但是,您可以定义一个函数,例如:
Function check(b As Integer)
If b = 1 Then
check = "x"
Else
End If
End Function
然后像这样使用 .addItem:
ListBox1.AddItem check(a)
编辑:不幸的是,正如@robinCTS 所注意到的,此方法将导致添加空白项目做列表框项目。所以它只有在你想有一个替代方案时才有效(例如根据条件添加 "x" 或 "y" )。似乎只能通过在 .addItem 行之后删除它来解决空白行的问题。
如果需要逻辑语句来判断是否添加item,那么答案是:否*是不可能的。一旦调用 .AddItem
方法, 将添加一个项目 。如果没有提供参数(或者参数是Null
/Empty
/vbNullString
/某些非打印字符),则在末尾附加一个空白项。
唯一的单线解决方案是按照 K.Dᴀᴠɪ 的建议:
If a = 1 Then ListBox1.AddItem x
但是,如果逻辑语句是在要添加的不同项目之间进行选择,那么是的,这是可能的。
方法 1 - IIf()
(内联 if):
ListBox1.AddItem IIf(a = 1, x, y)
其中 a = 1
~> ListBox1.AddItem x
,否则 ~> ListBox1.AddItem y
.
方法 2 - Choose()
:
ListBox1.AddItem Choose(a, x, y, z)
其中 a = 1
~> ListBox1.AddItem x
, a = 2
~> ListBox1.AddItem y
, a = 3
~> ListBox1.AddItem z
, 等等
*从技术上讲,是可能的。但是,它需要错误捕获和稍微复杂地使用 .AddItem
方法的第二个参数**:
On Error Resume Next
ListBox1.AddItem x, IIf(a = 1, ListBox1.ListCount, -2)
On Error GoTo 0
如果条件失败,-2
插入索引会强制出错,而 ListBox1.ListCount
索引会使项目附加到列表的末尾。 On Error
语句导致 .AddItem
方法在发生错误时被跳过。
第二个参数也可以用几种不同的方式重写,例如:
ListBox1.AddItem x, ListBox1.ListCount + IIf(a = 1, 0, 1)
ListBox1.AddItem x, ListBox1.ListCount + (a = 1) + 1
** 也可以有一个逻辑语句 without 使用第二个参数,但它要么需要区分字符串和数字或总是转换为字符串,结果并不容易 read/understand:
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)
returns 一个空字符串,和 Choose(-1)
returns Null
,它像一个空字符串一样连接。)
备注:
- 虽然所有这些示例都将项目附加到列表的末尾,但它们可以修改为在中间添加或插入。
- 一般来说,不推荐以这种方式使用
On Error
语句。一个正确的错误处理程序可以检查并仅恢复特定的适当错误,应该almost alwaysalways 被使用。 (当然,所有其他被困错误都会重新出现。)