【问题标题】:Userform controls - looping and checking value用户窗体控件 - 循环和检查值
【发布时间】:2015-07-11 00:18:08
【问题描述】:

我正在尝试遍历用户窗体上的两组控件。如果两个控件(切换按钮)的组合为真,则执行某些操作。从创建控件的用户窗体调用 sub。这是我第一次使用 userform 控制变量,下面的代码不会编译,所以这可能是完全错误的。请问有什么建议吗?

更新了代码示例,但出现编译错误。见下图:

Private Sub CONTROLS_Click()
Dim X As Integer, Y As Integer
Dim BOOK As Variant, STRAT As Variant

BOOK = Array("TYPE1", "TYPE2")
STRAT = Array("FAST", "MEDIUM", "SLOW")


For X = LBound(BOOK) To UBound(BOOK)
    If Me.CONTROLS(BOOK(X)).Value = True Then
        For Y = LBound(STRAT) To UBound(STRAT)
             If Me.CONTROLS(STRAT(Y)).Value = True Then
                'DO SOMETHING
            End If
        Next Y
    End If
Next X


End Sub

【问题讨论】:

  • Me.CONTROLS(...) 保持大写,而不是 VBE 的自动更正,这使得 Me.Controls(..) 成为我应该关注的方式。就像您使用 CONTROLS 作为某事物的名称,而您已经覆盖了它的保留用途。

标签: excel vba controls userform togglebutton


【解决方案1】:

这些都是 1 的数组。

BOOK = Array("TYPE1, TYPE2")
STRAT = Array("FAST,MEDIUM,SLOW")

他们应该是,

BOOK = Array("TYPE1", "TYPE2")
STRAT = Array("FAST", "MEDIUM", "SLOW")

变体数组通常从零开始; BOOK 数组中的第一个元素位于 BOOK(0)。当直接从工作表中填写时,他们使用基于 1 的索引,如果明确重新调整为从 1 开始。最好始终使用 LBound functionUBound function 来确定下边界和上边界.

 Private Sub CONTROLS_Click()
    Dim X As Integer, Y As Integer
    Dim BOOK As Variant, STRAT As Variant

    'Type1, Type2, Fast, Medium and Slow are the names of the togglebuttons
    BOOK = Array("TYPE1", "TYPE2")
    STRAT = Array("FAST", "MEDIUM", "SLOW")

    For X = LBound(BOOK) To UBound(BOOK)
        If Me.CONTROLS(BOOK(X)).Value = True Then
            For Y = LBound(STRAT) To UBound(STRAT)
                 If Me.CONTROLS(STRAT(Y)).Value = True Then
                    'DO SOMETHING
                End If
            Next Y
        End If
    Next X

 End Sub

这应该会修复您的数组分配和嵌套的 For ... Next 循环。

【讨论】:

  • @Zeus - BOOK 声明不知何故变成了 BOOK_COMP,使得 BOOK 的所有其他用途都无效。不知道它是怎么发生的,但我现在已经纠正了。
  • 我也发现了这一点,并对其进行了更改,但即使进行了更正,我仍然会收到编译错误。我确信这可以完成....任何想法为什么它不会编译?
  • 我发现了问题。其中一个列表框被称为 CONTROLS 并导致编译错误。代码现在工作。感谢您的帮助。
  • 听起来我怀疑一个流氓命名是正确的。很高兴听到您发现问题并解决了问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
相关资源
最近更新 更多