以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  Eval(Expr)  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=102937)

--  作者:kaituozhe
--  发布时间:2017/6/28 0:56:00
--  Eval(Expr)
Eval(Expr,DataRow)计算表达式的字段可以在不同表中取数吗
--  作者:有点色
--  发布时间:2017/6/28 8:40:00
--  

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

 

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

 


--  作者:kaituozhe
--  发布时间: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

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


--  作者:有点色
--  发布时间:2017/6/28 11:01:00
--  

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

 

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

 

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

 

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


--  作者:kaituozhe
--  发布时间:2017/6/28 14:59:00
--  

表B中的公式

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


--  作者:有点色
--  发布时间: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))