以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  下列代码错哪了  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=51265)

--  作者:lpxjw_zyl
--  发布时间:2014/5/23 3:03:00
--  下列代码错哪了
With DataTables("表Ⅰ")
    Dim tj1 As Double = Val(.datarows(14)("B6")) + Val(.datarows(14)("B7"))
    If RibbonTabs("全面薄改")("电子计算")("学校类别").text = "教学点" Then
        Output.Show(tj1)
        If tj1 <= 4 Then
            .datarows(0)("B4") = 1.9
        ElseIf tj1 >= 36 Then
            .datarows(0)("B4") = 14
        Else
            For i As Integer = 0 To Tables("小学校舍标准").Rows.count -1
                If tj1 > Tables("小学校舍标准").Rows(i)("生均用地面积") AndAlso tj1 <= Tables("小学校舍标准").Rows(i+1)("生均用地面积") Then
                    .datarows(0)("B4") =  Tables("小学校舍标准").Rows(i+1)("生均用地面积")
                    Exit For
                End If
            Next
        End If
    End If
End With

--  作者:lpxjw_zyl
--  发布时间:2014/5/23 3:03:00
--  

提示超出索引

 


--  作者:Bin
--  发布时间:2014/5/23 8:32:00
--  
多次用索引 引用行数,但是一律不判断.那当然会报错.

如果表中没行怎么办? 表中行数小于14行呢?


还有遍历里面的.datarows(0)("B4") =  Tables("小学校舍标准").Rows(i+1)("生均用地面积")
如果遍历到最后一行你再+1 这不是超标了吗?

所以要先判断 if DataTables("表Ⅰ").datarows.count > 0 then
再执行其他.
获取14行时要先判断 if DataTables("表Ⅰ").datarows.count >= 0 then

最重要的在遍历里面 

if Tables("小学校舍标准").Rows.count > (i-1) then
.datarows(0)("B4") =  Tables("小学校舍标准").Rows(i+1)("生均用地面积")