可以在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 被使用。 (当然,所有其他被困错误都会重新出现。)