代码之家  ›  专栏  ›  技术社区  ›  Houcine Adsens

如果所有复选框都为FALSE,则访问VBA

  •  1
  • Houcine Adsens  · 技术社区  · 7 年前

    大家下午好

    我有这段代码来检查表单的复选框是否未选中,但每次我都会收到以下错误消息: 运行时错误“438”

    Private Sub Btn_Send_Click()
    Dim ctl As Control
    Dim iX As Integer
    
        For Each ctl In Me.Controls
            If TypeName(ctl) = "CheckBox" And ctl.Value = False Then iX = iX + 1
        Next ctl
    
    If iX = 0 Then MsgBox "No checkBox Selected", vbExclamation, "Title"
    
    End Sub
    

    去毛刺错误:

    If TypeName(ctl) = "CheckBox" And ctl.Value = False Then
    

    运行时错误#438:对象不支持此属性或方法

    谢谢你的帮助

    1 回复  |  直到 7 年前
        1
  •  2
  •   Vityata    7 年前

    试着这样做:

    For Each ctl In Me.Controls
        If TypeName(ctl) = "CheckBox" Then
            If ctl.Value = False Then
                 iX = iX + 1
            End If
        End If
    Next ctl
    

    原因是VBA不支持 短路求值 - Does the VBA "And" operator evaluate the second argument when the first is false?

    因此,即使你的第一个条件是 False 它很好地检查了你的第二个条件。如果不是 CheckBox 控件,然后它抛出一个错误,因为它没有 .Value 所有物