以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  报错求救  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=6269)

--  作者:wqc360
--  发布时间:2010/3/21 23:12:00
--  报错求救
我在窗口按钮设置以下代码:
If Vars("用户组") = "管理员" and  Vars("用户组") <> "车间主管"
    With Tables("日报表")
        If .TopPosition > -1 Then
            For i as Integer = .TopPosition To .BottomPosition
                If .Rows(i)("审核") = False Then
                    .Rows(i)("审核") = True
                    .Rows(i)("审核人") = Tables("登陆")(0)("用户名") & " " & now
                Else
                    .Rows(i)("审核") = False
                    .Rows(i)("审核人") = Tables("登陆")(0)("用户名") & " " & now
                End If
            Next
        End If
    End With
End If
If Vars("用户组") = "车间主管"
    With Tables("日报表")
        If .TopPosition > -1 Then
            For i as Integer = .TopPosition To .BottomPosition
                If .Rows(i)("审核") = False Then
                    .Rows(i)("审核") = True
                    .Rows(i)("审核人") = Tables("登陆")(0)("用户名") & " " & now
                End If
            Next
        End If
    End With
End If
如选定行>筛选行/2,就报错,代码执行筛选行的一半行数,比如我窗口表筛选出20行"审核" = False的数据,我选择其中11到20行都一样,点按钮,只执行10行,并提示。
提示如下。


图片点击可在新窗口打开查看此主题相关图片如下:未命名.gif
图片点击可在新窗口打开查看
请帮忙看看问题出在哪里
[此贴子已经被作者于2010-3-21 23:12:35编辑过]

--  作者:mr725
--  发布时间:2010/3/21 23:33:00
--  

看不出了

[此贴子已经被作者于2010-3-21 23:34:19编辑过]

--  作者:程兴刚
--  发布时间:2010/3/21 23:58:00
--  

If Vars("用户组") = "管理员" and  Vars("用户组") <> "车间主管"
    With Tables("日报表")
        If .TopPosition > -1 Then
            For i as Integer = .TopPosition To .BottomPosition
                If .Rows(i,True).IsGroup Then
                    Exit For
                else
                    If .Rows(i)("审核") = False Then
                        .Rows(i)("审核") = True
                        .Rows(i)("审核人") = Tables("登陆")(0)("用户名") & " " & now
                    Else
                        .Rows(i)("审核") = False
                        .Rows(i)("审核人") = Tables("登陆")(0)("用户名") & " " & now
                    End If
                end if
            Next
        End If
    End With
End If
If Vars("用户组") = "车间主管"
    With Tables("日报表")
        If .TopPosition > -1 Then
            For i as Integer = .TopPosition To .BottomPosition
                If .Rows(i,True).IsGroup Then
                    Exit For
                else
                    If .Rows(i)("审核") = False Then
                        .Rows(i)("审核") = True
                        .Rows(i)("审核人") = Tables("登陆")(0)("用户名") & " " & now
                    End If
                end if
            Next
        End If
    End With
End If


--  作者:wqc360
--  发布时间:2010/3/22 15:22:00
--  
还是不行,应该是筛选的问题,请看示范文件,怎样在点按钮时,保持已筛选的行就好了(不是撤销筛选),谢谢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目24.table

[此贴子已经被作者于2010-3-22 15:40:17编辑过]

--  作者:czy
--  发布时间:2010/3/22 16:48:00
--  
我们没办法。
筛选后对筛选列赋值,赋一个单元格的值就会隐藏一行,出现这种问题也就不奇怪了。
--  作者:ssqq
--  发布时间:2010/3/22 17:26:00
--  
For i as Integer = .TopPosition To .BottomPosition
改为
For i as Integer = .BottomPosition To .TopPosition step -1

If .TopPosition > -1 Then
改为
If .BottomPosition > -1 Then
[此贴子已经被作者于2010-3-22 17:27:17编辑过]

--  作者:wqc360
--  发布时间:2010/3/22 19:36:00
--  

 

6楼还是不行,如果有代码指定暂停筛选就好了,CurrentTable.ApplyFilter = False不行,显示所有行了,要求当前筛选不变。代码应该怎么写


--  作者:ssqq
--  发布时间:2010/3/22 20:34:00
--  
在筛选状态下,随筛选结果变化的行变量是rows.count
你可以测试一下,执行公式过程中TopPosition BottomPosition两个参数的变化
在每次赋值后,outputshow()显示一下这连个参数的变化,有什么规律
就明白在筛选状态下,如何根据筛选结果进行行号的变化
--  作者:e-png
--  发布时间:2010/3/22 23:18:00
--  
要求当前筛选不变: 这样就要增加一列来判断了,筛选前先清空,筛选后勾上,执行1楼(修正后)代码后,再筛选出打勾的行来即可。 就是繁琐些了。