本帖最后由 aqq886_88 于 2013-05-01 22:10:14 编辑

解决方案 »

  1.   

    楼主看看这个:
    Option ExplicitPrivate Function CheckOpt(ByRef strRetVal As String) As Boolean
       Dim strTemp As String
       Dim i&, c&
       strTemp = String(60, "-")
       c = 0
       For i = opt1.LBound To opt1.UBound
          If (opt1(i).Enabled) Then
             c = c + 1
          Else
             Mid$(strTemp, i * 3 + 1, 2) = opt1(i).Caption
          End If
       Next
       i = opt1.Count
       If (i > c) Then
          strTemp = Replace(strTemp, "-2", " 2")
          strTemp = Replace(Replace(strTemp, "-1", " 1"), "-0", " 0")
          strRetVal = Replace(strTemp, "-", "")
       End If
       CheckOpt = i = c
    End Function' 调用示例
    Private Sub Command1_Click()
       Dim strMSG As String
       If (CheckOpt(strMSG)) Then
          MsgBox "全部可编辑!", 64
       Else
          MsgBox "以下不可编辑:" & strMSG, 48
       End If
    End Sub
      

  2.   

    If (i > c) Then  ...... End if 那段可以这样改下:If (i = c) Then
       strRetVal = ""
    Else
       strTemp = Replace(strTemp, "-2", " 2")
       strTemp = Replace(Replace(strTemp, "-1", " 1"), "-0", " 0")
       strRetVal = Replace(strTemp, "-", "")
    End If
      

  3.   

    楼上大哥果然厉害,再请教一下,任意一个顺序,如opt1(0)到opt1(4),或者opt1(0)到opt1(8)为true,或者其它顺序,而余下的为false,这时就可以执行循环,执行下一个命令,假如后面有一个或者多个未选择为fasle,而实际为true,就是漏选了,执行的时候报错msgbox  **没有设为false,循环数据有间断(比如opt1(0)到opt1(4)为true,opt1(5)到opt1(19)为false,但是在操作的时候false其中有一个没有设为false,而为true,就报错)
      

  4.   


    Dim mySettings(19) As Boolean, i As IntegermySettings(0) = True
    mySettings(1) = True
    mySettings(2) = True
    mySettings(3) = TrueFor i = 0 To 19
        If mySettings(i) Xor opt1(i) Then
            MsgBox "选项 " & (i + 1) & " 没有设置为" & IIf(mySettings(i), "True", "False")
        End If 
    Next i
      

  5.   

    If mySettings(i) Xor opt1(i).Enabled Then
      

  6.   

    楼主理解我的意思有误,我的意思是说正常情况下如1-4或者1-7等任一一个顺序为true,其它余下的则为false时则不报错,执行下一个命令,如果余下的有一个或者多个没有设置为false,则报错
      

  7.   

    点击command3如果结果如图1所示则通过,直接执行下一个命令,如果设置如图2则msgbox报错并指出哪里出错,图中的顺序是不一定的,有可能是1-4、1-6、1-18等等,但中间不能断,后面的必须关闭,否则报错
      

  8.   

    楼主看看这个如何。Option ExplicitPrivate Function CheckObjPass(objCtrls As Object) As Boolean
    ' objCtrls  ----- 被检查的控件数组
       Dim i&, c&, u&, Mask&
       u = 0&:  Mask = -1&
       For i = objCtrls.LBound To objCtrls.UBound
          c = objCtrls(i).Enabled
          u = ((Mask Xor c) And 1&) + u
          Mask = c
       Next
       CheckObjPass = u < 2&
    End Function
    '调用示例:
    Private Sub Command2_Click()
       If (CheckObjPass(opt1)) Then
          MsgBox "通过!", 64
       Else
          MsgBox "错误!", 48
       End If
    End Sub