If Form9.List1.ListCount > 0 Then
    For dd = 0 To 11 '
    For ii = 0 To Form9.List1.ListCount - 1
        str = Form9.List1.List(ii)
        sz = Split(str, ",")
        
        st = sz(0)
        
        Form9.List1.ListIndex = ii        
       si(0) = st Mod 10
        si(1) = (st \ 10) Mod 10
       si(2) = (st \ 100) Mod 10
        si(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))  
         si(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))          si(5) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)         si(6) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)           si(7) = fq(st)   
        si(8) = fw(st)  
        si(9) = si(0) + si(1) + si(2)   
        si(10) = si(3) - si(4)   
        si(11) = si(9) - si(3) - si(4)   
        si(12) = si(3) + si(11) - si(4)  
         si(13) = si(11) + si(4)  
         si(14) = fi(st)  
         si(15) = fr(st) 
         si(16) = fq(st) - (si(9) - fq(st))  
 
        If Form9.Check1(0).Value = 1 Then mi(0) = si(7) 
        If Form9.Check1(1).Value = 1 Then mi(1) = si(8) 
        If Form9.Check1(2).Value = 1 Then mi(2) = si(16) 
        If Form9.Check1(3).Value = 1 Then mi(3) = si(9) 
        If Form9.Check1(4).Value = 1 Then mi(4) = si(10) 
        If Form9.Check1(5).Value = 1 Then mi(5) = si(11) 
        If Form9.Check1(6).Value = 1 Then mi(6) = si(12) 
        If Form9.Check1(7).Value = 1 Then mi(7) = si(13) 
        If Form9.Check1(8).Value = 1 Then mi(8) = si(14) 
        If Form9.Check1(9).Value = 1 Then mi(9) = si(15) 
        If Form9.Check1(10).Value = 1 Then mi(10) = si(5) 
        If Form9.Check1(11).Value = 1 Then mi(11) = si(6) 
        
        For i = MSFlexGrid1.Rows - 1 To 1 Step -1
            bb = MSFlexGrid1.TextMatrix(i, 1)
           
            si(0) = bb Mod 10
            si(1) = (bb \ 10) Mod 10
            si(2) = (bb \ 100) Mod 10
            si(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))   
            si(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))  
            ww(10) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2) 
            ww(11) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)   
            ww(0) = fq(bb) 
            ww(1) = fw(bb) 
            ww(3) = si(0) + si(1) + si(2) 
            ww(4) = si(3) - si(4) 
            ww(5) = ww(3) - si(3) - si(4) 
            ww(6) = si(3) + ww(5) - si(4) 
            ww(7) = ww(5) + si(4) 
            ww(8) = fi(bb) 
            ww(9) = fr(bb) 
            ww(2) = fq(bb) - (ww(3) - fq(bb)) 
       
            If Form9.Option1(0) = True And Form9.Option2(0) = True Then 
             
                If ww(dd) = mi(dd) And Form9.Check1(dd).Value = 1 Then MSFlexGrid1.RemoveItem i
                
        
           
             
            
  重点**********    ElseIf Form9.Option1(0) = True And Form9.Option2(1) = True Then  
            
                If ww(dd) <> mi(dd) And Form9.Check1(dd).Value Then MSFlexGrid1.RemoveItem i             
                End If
老师您看看这个,If ww(dd) <> mi(dd) And Form9.Check1(dd).Value Then MSFlexGrid1.RemoveItem i
这个 ww(dd) <> mi(dd),是递减方式,不是我想要得
这个就是想改成
将来也可能是1个复选被选,我要的结果是 
如复选11被选if ww(11) <> mi(11) then MSFlexGrid1.RemoveItem i 这个结果是我要的,一个的就不用and了 
如两个被选,如3,6 
if ww(3) <> mi(3) and ww(6) <> mi(6) then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
如3个被选,如4,5,6 
if ww(4) <> mi(4) and ww(5) <> mi(5) and ww(6) <> mi(6)then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
如4个被选,如4,5,6,9 
if ww(4) <> mi(4) and ww(5) <> mi(5) and ww(6) <> mi(6)and ww(9) <> mi(9)then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
...... 
...... 
...... 
如12个被选 
....... 
这样就是递增了,
(((((((也就是If Form9.Option1(0) = True And Form9.Option2(0) = True Then 
             
                If ww(dd) = mi(dd) And Form9.Check1(dd).Value = 1 Then MSFlexGrid1.RemoveItem i
这个结果的相反的结果
如最初i为123456789,
If Form9.Option1(0) = True And Form9.Option2(0) = True Then If ww(dd) = mi(dd),计算完的i为3,5,6,那么MSFlexGrid1.RemoveItem i
为删除,3,5,6行,输出的是,124789行
ElseIf Form9.Option1(0) = True And Form9.Option2(1) = True Then  
这个的结果应该为,输出的是,356行,而删除的是124789行)))))))),我想到的只有and,这样可以实现,或许有其他方法也可以
我想要得结果是这样的,就是想怎么能简化一下像ww(dd) <> mi(dd)then MSFlexGrid1.RemoveItem i 
这样简单的几句就可以解决问题的,然后我在复选任意选择,他的结果都是,and形态的 

解决方案 »

  1.   


    '...传说中的巨型FUNCTION...
      

  2.   

    别着急,把你的问题描述清楚再说。昨天你发帖问的是同一个问题么?那tiger_zhao最后给你写的代码很简捷,应该是没错的。你看看?
      

  3.   

    这段代码的长度不是问题,其实就改
    重点**********    ElseIf Form9.Option1(0) = True And Form9.Option2(1) = True Then  
                
                    If ww(dd) <> mi(dd) And Form9.Check1(dd).Value Then MSFlexGrid1.RemoveItem i             
                    End If 
    这一块
      

  4.   

    重点**********    ElseIf Form9.Option1(0) = True And Form9.Option2(1) = True Then  
                
                    If ww(dd) <> mi(dd) And Form9.Check1(dd).Value Then MSFlexGrid1.RemoveItem i             
                    End If 把它改出所出的数据为
    如复选11被选if ww(11) <> mi(11) then MSFlexGrid1.RemoveItem i 这个结果是我要的,一个的就不用and了 
    如两个被选,如3,6 
    if ww(3) <> mi(3) and ww(6) <> mi(6) then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    如3个被选,如4,5,6 
    if ww(4) <> mi(4) and ww(5) <> mi(5) and ww(6) <> mi(6)then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    如4个被选,如4,5,6,9 
    if ww(4) <> mi(4) and ww(5) <> mi(5) and ww(6) <> mi(6)and ww(9) <> mi(9)then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    ...... 
    ...... 
    ...... 
    如12个被选 
    。。
    因为现在的ww(dd) <> mi(dd)所出的数据是递减的,不是我要的
      

  5.   

    老师们不用看整段代码,老师看这段就可以
    在说明一下要求
    If Form9.Option1(0) = True And Form9.Option2(0) = True Then 
                
                    If ww(dd) = mi(dd) And Form9.Check1(dd).Value = 1 Then MSFlexGrid1.RemoveItem i 
                    
            
              
                
                
      重点**********    ElseIf Form9.Option1(0) = True And Form9.Option2(1) = True Then  
                
                    If ww(dd) <> mi(dd) And Form9.Check1(dd).Value Then MSFlexGrid1.RemoveItem i             
                    End If 
    第一个If Form9.Option1(0) = True And Form9.Option2(0) = True Then 没有毛病,如最初的i为MSFlexGrid1.Rows - 1 To 1 Step -1 ‘如1 to 20
    计算完的符合ww(dd) = mi(dd)要求的i分别是1,2,4,5,6,15,14,MSFlexGrid1.RemoveItem i 
    删除了1,2,4,5,6,15,14行,这时MSFlexGrid1剩下的是,3,7,8,9,10,11,12,13,16,17,18,19,20行第二个就有问题了
    第二个ElseIf Form9.Option1(0) = True And Form9.Option2(1) = True Then  
    说白了,就是和第一个相反,同样的条件,他删除3,7,8,9,10,11,12,13,16,17,18,19,20行,保留1,2,4,5,6,15,14行
      

  6.   

    我通过单独测试,以下形态可以得到正确数据,但是,我不会进行整合将来也可能是1个复选被选,我要的结果是 
    如复选11被选if ww(11) <> mi(11) then MSFlexGrid1.RemoveItem i 这个结果是我要的,一个的就不用and了 
    如两个被选,如3,6 
    if ww(3) <> mi(3) and ww(6) <> mi(6) then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    如3个被选,如4,5,6 
    if ww(4) <> mi(4) and ww(5) <> mi(5) and ww(6) <> mi(6)then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    如4个被选,如4,5,6,9 
    if ww(4) <> mi(4) and ww(5) <> mi(5) and ww(6) <> mi(6)and ww(9) <> mi(9)then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    ...... 
    ...... 
    ...... 
      

  7.   

    我通过单独测试,以下形态可以得到正确数据,但是,我不会进行整合将来也可能是1个复选被选,我要的结果是 
    如复选11被选if ww(11) <> mi(11) then MSFlexGrid1.RemoveItem i 这个结果是我要的,一个的就不用and了 
    如两个被选,如3,6 
    if ww(3) <> mi(3) and ww(6) <> mi(6) then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    如3个被选,如4,5,6 
    if ww(4) <> mi(4) and ww(5) <> mi(5) and ww(6) <> mi(6)then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    如4个被选,如4,5,6,9 
    if ww(4) <> mi(4) and ww(5) <> mi(5) and ww(6) <> mi(6)and ww(9) <> mi(9)then MSFlexGrid1.RemoveItem i 这个结果数据是我要的 
    ...... 
    ...... 
    ...... 
      

  8.   

    楼主初用VB吧,先帮你优化一点:
    原代码:
    If Form9.Check1(0).Value = 1 Then mi(0) = si(7) 
            If Form9.Check1(1).Value = 1 Then mi(1) = si(8) 
            If Form9.Check1(2).Value = 1 Then mi(2) = si(16) 
            If Form9.Check1(3).Value = 1 Then mi(3) = si(9) 
            If Form9.Check1(4).Value = 1 Then mi(4) = si(10) 
            If Form9.Check1(5).Value = 1 Then mi(5) = si(11) 
            If Form9.Check1(6).Value = 1 Then mi(6) = si(12) 
            If Form9.Check1(7).Value = 1 Then mi(7) = si(13) 
            If Form9.Check1(8).Value = 1 Then mi(8) = si(14) 
            If Form9.Check1(9).Value = 1 Then mi(9) = si(15) 
            If Form9.Check1(10).Value = 1 Then mi(10) = si(5) 
            If Form9.Check1(11).Value = 1 Then mi(11) = si(6) 建议修改si数组,下标与mi对应。比如:si(5)改为si(10)=si(3) - si(4)
    改完后,check1控件组各控件的索引号用以整型变量代码循环语句,很短!
    dim intCx as integer
    for intcx=0 to 11
      if form9.check1(intcx)then mi(intcx)=si(intcx+5)
    next别的就不看了,嵌套的太乱。最后提一点建议:自内层向外层写,每写一层看看有没有能优化的部分,加以时日,必有所成。不要急着编太大的软件,即使是做给自己用,也可以先做一个整体规划,然后一个模块一个模块的做,最后再合在一起。看别人的代码实在太累,难怪都说改别人的代码不如自己写。请见谅…