Foxtable(狐表)用户栏目专家坐堂 → 想实现前列中内容能自动计算,汇总到后一列中


  共有2510人关注过本帖树形打印复制链接

主题:想实现前列中内容能自动计算,汇总到后一列中

帅哥哟,离线,有人找我吗?
szizu
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:8 积分:115 威望:0 精华:0 注册:2016/7/9 8:47:00
想实现前列中内容能自动计算,汇总到后一列中  发帖心情 Post By:2016/7/9 8:56:00 [显示全部帖子]



具体的问题:
我想建一个这样的表:  其中列三名称为表达示列;为字符型(或者备注型);列四为数据列,为单精度

然后在列三中增加行,输入如:‘1+2+3+4+5*20+(15+6)’

想实现列四对应行,直接能计算列三中的内容,得出结果为‘131’的方法

 回到顶部
帅哥哟,离线,有人找我吗?
szizu
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:8 积分:115 威望:0 精华:0 注册:2016/7/9 8:47:00
  发帖心情 Post By:2016/7/9 9:17:00 [显示全部帖子]

求各位专家指点呀
[此贴子已经被作者于2016/7/12 11:44:24编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
szizu
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:8 积分:115 威望:0 精华:0 注册:2016/7/9 8:47:00
  发帖心情 Post By:2016/7/9 10:48:00 [显示全部帖子]


假定希望根据第一列 名称为(计算式)输入的计算公式,在第二列 名称为(结果) 得出计算结果,可以将DataColChanged事件代码设为:

If e.DataCol.Name = "计算式" Then
    If e.DataRow.IsNull("计算式"Then
        e.DataRow("结果") = Nothing
    Else
        e.DataRow("结果") = Eval(e.DataRow("计算式"),e.DataRow)
    End 
If

End
 If

Eval采用VBScript语法,没有方法和属性的概念,所有的计算都是通过函数完成的。



通过测试,完美解决。


非常感谢!!!



但我还想进一步实现以下功能;   就是在计算式列中可以加入标注,标注内容不计算。

如: ‘计算式’列内容为:  1+2+3+4+5【连续相加】    ‘结果’列中为15,而不是出现出错提示





 回到顶部
帅哥哟,离线,有人找我吗?
szizu
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:8 积分:115 威望:0 精华:0 注册:2016/7/9 8:47:00
  发帖心情 Post By:2016/7/9 11:22:00 [显示全部帖子]

上面的明白了,但如果出现多个标注的情况
如: ‘计算式’列内容为:  1+2+3+4+5【连续相加】+2+4+6+8【偶数相加】    ‘结果’列中为35,而不是出现出错提示

 回到顶部
帅哥哟,离线,有人找我吗?
szizu
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:8 积分:115 威望:0 精华:0 注册:2016/7/9 8:47:00
  发帖心情 Post By:2016/7/11 10:14:00 [显示全部帖子]

研究了您给的代码,进行测试,成功
以下为我改的代码,相当好用(有不好的地方,望指点)
If e.DataCol.Name = "计算式" Then
    If e.DataRow.IsNull("计算式") Then
        e.DataRow("结果") = Nothing
    Else
       Dim s  As String = e.DataRow("计算式")
       Dim idx1 =s.Indexof("【")
       Dim idx2 =s.Indexof("】")
       Dim X = idx2 - idx1 + 1
       Do  While idx1 > -1
       s = s.remove(idx1,X)
       idx1 =s.Indexof("【")
       idx2 =s.Indexof("】")
       X = idx2 - idx1 + 1
       Loop
       e.DataRow("结果") = Eval(s,e.DataRow)
    End If
End If

 回到顶部