gpt4 book ai didi

vba - 可以直接在 UserForm.AddItem 中使用逻辑语句吗?

转载 作者:行者123 更新时间:2023-12-04 21:54:02 29 4
gpt4 key购买 nike

我知道并理解将项目添加到 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/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com