一段按钮代码,形成交叉表,用于汇总分析投工工效,现在碰到两个问题,请各位老师帮助指教,谢谢!!
一、代码运行四个月的数据时,运行正常,但是运行一年的数据时,出现错误提示如下,应该如何修改代码。
此主题相关图片如下:o.png
二,在运行对每个月的工效排名的代码时,出现错误提示如下,其中黄色标注的代码应该如何修改。
此主题相关图片如下:n.png
具体的按钮代码如下:
Dim ny As String = Forms("数据载入").Controls("ComboBox1").Text
Dim nf As String = Left(ny,4)
Dim sql,s As String
'根据年份生成临时表
sql = "Select 报表年月,单位,厂家,Sum(加工费) As 加工费, Sum(投工) As 投工,Sum(人均) As 工效,0.1-0.1 As 名次 FROM {日报源表} WHERE Left(报表年月,4) = "& nf &" Group By 报表年月,单位,厂家 "
'根据临时表生成分月厂家工效表
Dim b As New CrossTableBuilder("分月厂家工效",sql,"SCGL")
b.HGroups.AddDef("单位")
b.HGroups.AddDef("厂家")
b.VGroups.AddDef("报表年月")
b.Totals.AddDef("加工费")
b.Totals.AddDef("投工")
b.Totals.AddDef("工效")
b.Totals.AddDef("名次")
b.HorizontalTotal = True
b.VerticalTotal = True
b.Build()
MainTable = Tables("分月厂家工效") '打开生成的统计表
Dim t As Table = Tables("分月厂家工效")
Dim i As Integer =(Tables("分月厂家工效").Cols.Count-6)/4
For Each r As Row In t.Rows
For j As Byte = 1 To i
If r("投工_" & j) <> 0 Then
r("工效_" & j) = r("加工费_" & j)/r("投工_" & j)
End If
' If r("投工_" & j) <> 0 Then
' Dim drs As List(Of DataRow) = t.DataTable.Select("[单位] <> '合计'",""工效_" & j DESC")
' For n As Byte = 0 To drs.Count - 1 '遍历所有行
' If n > 0 AndAlso drs(n)("工效_" & j) = drs(n-1)("工效_" & j) Then '如果"工效_" & j和上一行相同
' drs(n)("名次" & j) = drs(n-1)("名次" & j) '则排名等于上一行
' Else
' drs(n)("名次" & j) = n + 1 '设置名次
' End If
' Next
' End If
Next
Next
For Each r As Row In t.Rows
r("合计_工效") = r("合计_加工费")/r("合计_投工")
Next
Dim drs As List(Of DataRow) = t.DataTable.Select("[单位] <> '合计'","合计_工效 DESC")
For n As Byte = 0 To drs.Count - 1 '遍历所有行
If n > 0 AndAlso drs(n)("合计_工效") = drs(n-1)("合计_工效") Then '如果"合计_工效"和上一行相同
drs(n)("合计_名次") = drs(n-1)("合计_名次") '则排名等于上一行
Else
drs(n)("合计_名次") = n + 1 '设置名次
End If
Next
t.Cols("单位").TextAlign = TextAlignEnum.Center
t.Cols("合计_名次").TextAlign = TextAlignEnum.Center
t.AutoSizeCols()
MainTable =t
CurrentTable.Cols("合计_加工费").Move(2)
CurrentTable.Cols("合计_投工").Move(3)
CurrentTable.Cols("合计_工效").Move(4)
CurrentTable.Cols("合计_名次").Move(5)