【发布时间】:2020-01-16 22:06:24
【问题描述】:
我有一个用户窗体,上面有 132 个控件对象。用户填写表单,然后单击“确认”按钮运行一个宏,该宏使用提交的信息来做出决定。下图。我写了一个 If 语句来检查: 如果没有在顶部输入名称,则不要运行宏;如果未选中任何复选框,则不要运行宏。我发现 If 语句在几乎所有选中和未选中框的组合中都能发挥作用。如果它发现任何一个复选框被选中,则它结束 For Loop 并继续执行宏。
这是我的用户表单图像的链接:
这是质量门 If 语句,当我收到错误时,星号** 行会突出显示:
Dim cCont As Control
Dim datacheck As Boolean
datacheck = False
If ProductName.Value <> "" Then
For Each cCont In AddNewPage.Controls
**If TypeName(cCont) = "CheckBox" And cCont.Value = True Then**
datacheck = True
Exit For
End If
Next cCont
End If
If datacheck = True Then
'very long, hopefully unrelated macro
Else
MsgBox ("Please name the part, then click at least one" & Chr(13) & "checkbox. These are _
the parameters to be audited.")
End If
问题是,如果我只选中底部三个组中的复选框,我会收到运行时错误 438。如果我只选中顶部组中的复选框,或者如果我选中来自顶部组和底部组,但如果我只选中底部组中的复选框,则不会。
我无法识别顶部复选框和底部复选框之间的区别。属性似乎都是一样的,所以我不知道为什么一个复选框会抛出错误而另一个不会。
【问题讨论】:
-
所有控件都有
Value属性吗? -
是的,据我所知。我一一确保在他们的属性字段中输入默认的 False 。并且在非常相似的函数的以下 For 循环中,我没有收到此错误。
-
错误 438 表示
Value不是成员,因此您肯定确实拥有没有Value属性的控件。查看屏幕截图,我看到一堆Label控件 - 这些是主要候选者 =) -
好吧,我没想到。有道理,谢谢!