【问题标题】:Having trouble using For/Next with variables将 For/Next 与变量一起使用时遇到问题
【发布时间】:2019-12-17 23:51:57
【问题描述】:

我正在使用 excel 用户表单,并在表单上创建了几个按顺序命名的标签字段。例如: 标签1,标签2...标签X 我想从我单独构建的数组中为它们分配 .caption。在我的脑海中,使用 For/Next 循环是最有意义的,但由于它是一个标签,所以我遇到了麻烦。我什至无法以一种有意义的方式获取代码。以下是我正在尝试的...

For i = 1 To 100
    Labeli.Caption = Array(i)
Next i

如果有办法将其保留在循环中,它会使代码变得不那么繁琐。提前感谢您的帮助。

【问题讨论】:

  • 所以你想'通过变量引用用户表单的控件',你应该对座位引擎提出什么问题-此外,vba数组默认情况下是从零开始的,第一个元素是数组( 0).
  • @ComputerVersteher 我想在一个列表(我的标签列表)中显示所有相关项目,以便用户快速查看他们需要的内容。这是一种食谱。标签是否被视为控件?我在下面的评论中注意到您提到了一个集合。那个对我来说是新的,所以我会再研究一下。我最初的研究告诉我,这可能是比我选择的方式更好的方法。另外,我没有意识到数组是从零开始的,但是我从一开始手动加载数组。我想 (0) 在此示例中将始终为空。感谢您的帮助。
  • 这听起来像是一个数据库任务和连续的子表单使用,所以我的建议是 Access 女士(至少作为前端)。您已经使用数据库还是数据存储在 excel 中?但那是旧时。查看访问表单和子表单,看看它们是否符合您的需求。

标签: excel vba label userform


【解决方案1】:

试试这个:

i = 1

For Each itm In Me.Controls

    If itm.Name = "Label" & i Then
        itm.Caption = Array(i)
        i = i + 1
    End If

Next

您不能形成像 Labeli 这样的对象名称,其中 i 是一个变量。但是您可以遍历所有控件并检查该标签是否具有像 Label1 这样的名称等。


另一种方法:

For i = 1 To 100
        Me.Controls("Label" & i).Caption = Array(i)
Next

【讨论】:

  • 如果您知道名称,为什么要循环这些控件,因为您可以在集合中按名称引用?
  • 我喜欢,避免了名字不存在的问题!如果itm 实际上是Label 类型的对象,可以通过测试来改进。
  • @ComputerVersteher .. 两种方法都有效。我习惯这样做,所以我发布了这个:)
  • @L8n OP 预先填充了一个数组,因此我们可以建议几乎所有标签都存在,如果不是他想识别(通过引发和捕获的错误),假设至少有 100 个标签(如果没有其他控件)100 * 50 次迭代(100 个控件,通过集合的平均循环约为 50),而如果没有循环使用集合,则为 100(2. 方法)。
  • 感谢大家对此的反馈。我用了你的第二种方法,对我来说效果很好,谢谢。
【解决方案2】:

您可以像这样“构建”标签的名称:

Userform.Controls("Label" & i).Caption

Userform 是对 Userform 的引用,如果您将其编写在 Userform 的代码隐藏中,则可以使用 Me.

但是如果你有一百个标签,可能会有更好的方法来创建你的用户表单,这看起来有点像XY-Problem

【讨论】:

  • 这个真的只有12个,抱歉。列表中有数百个东西,我搜索相关的东西并将它们存储在一个最多可以容纳 12 个的数组中。我只是在输入时感到困惑。不过,关于 XY 问题,您可能是对的。使用“我”的讨论也帮助我理清了很多事情。感谢您的帮助和反馈。
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 2021-07-15
  • 2013-06-19
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多