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形态的
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形态的
'...传说中的巨型FUNCTION...
重点********** 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
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)所出的数据是递减的,不是我要的
在说明一下要求
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行
如复选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 这个结果数据是我要的
......
......
......
如复选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 这个结果数据是我要的
......
......
......
原代码:
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别的就不看了,嵌套的太乱。最后提一点建议:自内层向外层写,每写一层看看有没有能优化的部分,加以时日,必有所成。不要急着编太大的软件,即使是做给自己用,也可以先做一个整体规划,然后一个模块一个模块的做,最后再合在一起。看别人的代码实在太累,难怪都说改别人的代码不如自己写。请见谅…