我在窗口只添加标签、文本框和命令按钮,
可是下面程序运行后,却提示CtlA的取值包括true和false,
什么原因呢,以及如何在判断中把这两个值去掉,谢谢!Private Sub checkData()
    Dim CtlA
    For Each CtlA In Controls
        If Not (TypeOf CtlA Is Label Or TypeOf CtlA Is Command) Then
            If CtlA.Text = "" Then
                MsgBox CtlA.Text & "不能为空", vbOKOnly + vbExclamation, "警告"
                CtlA.SetFocus
                Exit Sub
            End If
            MsgBox CtlA
        End If
    Next
End Sub

解决方案 »

  1.   

    Private Sub Command1_Click()
        checkData
    End SubPrivate Sub checkData()
        Dim CtlA
        For Each CtlA In Controls
            If Not (TypeOf CtlA Is Label Or TypeOf CtlA Is CommandButton) Then
                If CtlA.Text = "" Then
                    MsgBox CtlA.Name & "不能为空", vbOKOnly + vbExclamation, "警告"
                    CtlA.SetFocus
                    Exit Sub
                End If
                MsgBox CtlA.Text
            End If
        Next
    End Sub
      

  2.   

    Private Sub checkData()
        Dim CtlA As Control
        For Each CtlA In Controls
            If (TypeOf CtlA Is TextBox Or TypeOf CtlA Is ComboBox) Then
                If CtlA.Text = "" Then
                    MsgBox CtlA.Name & "不能为空", vbOKOnly + vbExclamation, "警告"
                    CtlA.SetFocus
                    Exit Sub
                End If
                MsgBox CtlA
            End If
        Next
    End Sub
      

  3.   

    你的错误是虫子所指出的,没有排除 CommandButton。它的缺省属性 Value 是 Boolean 型,表示是否缺省选中。
      

  4.   

    这个问题很熟啊,好象问过类似的吧。
    关键是你对Controls集合的理解还有问题,就按你的程序,我们看一下:
    Dim CtlA
        For Each CtlA In Controls
           TypeOf CtlA Is Label ' 这个条件语句中,CtlA是做为整个对象引用
           CtlA.Text = "" ' 这个是引用了CtlA对象的Text属性。
          '当然你已经正确地使用前面两个了
            MsgBox CtlA   ' 而这句呢?他引用的是CtlA对象的默认属性。
       Next
               对于你程序中的Command来讲,是其Value属性,自然就返回True或False了。
               也就是说,当CtlA是文本框时,msgbox CtlA显示文本框的text属性,当它是label时,显示Caption属性。