Foxtable(狐表)用户栏目专家坐堂 → Eval(Expr)


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

主题:Eval(Expr)

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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
Eval(Expr)  发帖心情 Post By:2017/6/28 0:56:00 [只看该作者]

Eval(Expr,DataRow)计算表达式的字段可以在不同表中取数吗

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/28 8:40:00 [只看该作者]

 不可以,如果要不同表取数,需要跨表查找

 

http://www.foxtable.com/webhelp/scr/1451.htm

 


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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2017/6/28 10:10: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

由于财务指标表计算内容较多,公式也不一致,且取自不同表格,如果能够按上述例子计算就好的,


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/28 11:01:00 [只看该作者]

 不同的表取数的规则是什么?肯定是需要根据条件查找的。

 

 你可以定义一种输入公式的方式,根据输入的公式,分割截取出信息,跨表查询,然后计算。

 

 最简单的,你可以让用户在单元格直接写代码啊,如

 

下载信息  [文件大小:300.0 KB  下载次数:14]
图片点击可在新窗口打开查看点击浏览该文件:动态编译.table


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


加好友 发短信
等级:九尾狐 帖子:2234 积分:15278 威望:0 精华:0 注册:2015/7/18 10:10:00
  发帖心情 Post By:2017/6/28 14:59:00 [只看该作者]

表B中的公式

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:动态编译.table


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/28 15:15:00 [只看该作者]

参考代码

 

Dim str As String = "本期实际收入总额/本期预算收入总额×100%"
Dim ary() = str.split(new Char(){"/", "×"})
For Each s As String In ary
    Dim fdr As DataRow = DataTables("表C").find("第一列 = '" & s & "'")
    If fdr IsNot Nothing Then
        str = str.Replace(s, fdr("第二列"))
    Else
        msgbox("没找到" & s)
    End If
Next
msgbox(str)
msgbox(Eval2(str))


 回到顶部