以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  列类型不同,绘制单元格计算占比  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85614)

--  作者:漂亮美眉vszh
--  发布时间:2016/5/30 12:23:00
--  列类型不同,绘制单元格计算占比


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20160530115759.png
图片点击可在新窗口打开查看

例要计算2016年的达成率,用2016年行的量产值/目标值,利用绘制单元格计算百分比,可下面自己写的代码不对,计算了每一行的达成率都有值了,需要按不同的年度分,请教各位老师代码要怎么改?

If e.Col.Name = "1月" Then \'如果正在绘制的是密码列
    Dim ia1 As Double
    Dim ia2 As Double
    Dim ia3 As  Double
    Dim dr1 As DataRow
Dim dr2 As DataRow


    dr1 = DataTables("开模总分析").find("项目 = \'量产模\' And 年份 = \'2016\'")
dr2 = DataTables("开模总分析").find("项目 = \'目标\' And 年份 = \'2016\'")
 ia3 = round2(dr1("1月")/dr2("1月"),4)


\'MessageBox.Show(dr("1月"))
    \'ia1 = DataTables("开模总分析").Compute("sum(1月)","项目 = \'量产模\' and 年份 = \'" & e.Row("年份") & "\'")
    \'ia2 = DataTables("开模总分析").Compute("sum(1月)","项目 = \'目标\' and 年份 = \'" & e.Row("年份") & "\'")
   
 
    If e.Row("项目") = "达成率"  Then

   If dr2("1月") < 0.0001 Then
            e.text = "0.00%"
        Else
            e.Text = ia3 * 100 & "%"
        End If

 

End If

End If


 下面是想要的效果


图片点击可在新窗口打开查看此主题相关图片如下:222.png
图片点击可在新窗口打开查看

--  作者:漂亮美眉vszh
--  发布时间:2016/5/30 12:24:00
--  
不仅仅是计算2016年的,当2017年/2018年下面有值时,依然计算其他年份的达成率~~
--  作者:大红袍
--  发布时间:2016/5/30 12:34:00
--  

Select Case e.Col.name
    Case "1月", "2月"
        If e.Row("项目") = "达成率" Then
            Dim ia1 As Double
            Dim ia2 As Double
            Dim ia3 As  Double
           
            ia1 = DataTables("开模总分析").Compute("sum(" & e.Col.name & ")","项目 = \'量产模\' and 年份 = \'" & e.Row("年份") & "\'")
            ia2 = DataTables("开模总分析").Compute("sum(" & e.Col.name & ")","项目 = \'目标\' and 年份 = \'" & e.Row("年份") & "\'")
            ia3 = round2(ia1/ia2,4)
           
            If ia2 < 0.0001 Then
                e.text = "0.00%"
            Else
                e.Text = ia3 * 100 & "%"
            End If
        End If
End Select

 


--  作者:漂亮美眉vszh
--  发布时间:2016/5/31 9:08:00
--  
红袍老师,试了,没成功;是不是与我开发的版本有关,目前使用版本是2015年12月的版本,之前我也用Compute都行的,这次也报错,后来我用FINDROW,
图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看

--  作者:大红袍
--  发布时间:2016/5/31 9:33:00
--  
 呃,2楼代码,不应该报错的。做个例子发上来看看。
--  作者:漂亮美眉vszh
--  发布时间:2016/5/31 10:19:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:总分析表属性绘制单元格.foxdb


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20160531101815.png
图片点击可在新窗口打开查看

--  作者:漂亮美眉vszh
--  发布时间:2016/5/31 10:19:00
--  
上传了附件,我也觉得好奇怪,怎么会报错~~
--  作者:漂亮美眉vszh
--  发布时间:2016/5/31 10:20:00
--  
代码写在表属性,绘制单元格内了~~
--  作者:大红袍
--  发布时间:2016/5/31 10:24:00
--  

哦,你列名有问题,列名尽量不要用数字开头。代码改一改

 

Select Case e.Col.name
    Case "1月", "2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月","TOTAL"
        If e.Row("项目") = "达成率" Then
            Dim ia1 As Double
            Dim ia2 As Double
            Dim ia3 As  Double
            ia1 = DataTables("总分析").Compute("sum([" & e.Col.name & "])","项目 = \'量产模\' and 年份 = \'" & e.Row("年份") & "\'")
            ia2 = DataTables("总分析").Compute("sum([" & e.Col.name & "])","项目 = \'目标\' and 年份 = \'" & e.Row("年份") & "\'")
            ia3 = round2(ia1/ia2,4)
           
            If ia2 < 0.0001 Then
                e.text = "0.00%"
            Else
                e.Text = ia3 * 100 & "%"
            End If
        End If
End Select