以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]有条件的跨表引用  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=59342)

--  作者:huangfanzi
--  发布时间:2014/11/2 17:18:00
--  [求助]有条件的跨表引用
假定表A有字段 销售日期 产品名称 销售单价 成本单价 单位毛利
假定表B有字段 月份 产品名称 成本单价
我希望在表A中 输入销售日期、产品名称与销售单价后,成本单价自动从表B中引用过来,再通过表达式算出毛利
不带条件的引用我根据帮助文件已经会用,但带条件的就用不来了,我希望达到的效果是1月份的产品销售对应此产品1月份的成本,一一对应。
求老师帮助!!!

--  作者:有点甜
--  发布时间:2014/11/2 17:22:00
--  

 方法一:表A加入月份列,A、B表用月份和产品名称关联,表A直接引用父表数据;

 

 方法二:用find函数查找 http://www.foxtable.com/help/topics/1451.htm

 


--  作者:huangfanzi
--  发布时间:2014/11/2 18:54:00
--  
问题解决了,说下之前失败原因供有需要的朋友参考
在EXCEL中,遇到这个问题我常用的办法就是把表A中日期先转换成年月的字符串,然后把这个年月字符串与产品名连起来作为一个查找匹配码,在表B中同样的方法生成年月产品名的匹配码,然后用Vlookup函数引用。
在FOXTABLE中,我一开始也是用这思路进行操作,但失败了,原因在于我通过了表达式的方式生成了匹配码,然后用这匹配码进行跨表引用的自动更新,设置的条件就是表A与表B的匹配码一致,这个表达式就是问题所在,因为不能用表达式进行匹配引用的,要在表事件中生成表A与表B的匹配码数据列,用数据列中的匹配码就能正常进行跨表引用了,
这是跨表引用的网址:http://www.foxtable.com/help/index.html?n=1451.htm 
我参考的代码就是:
上一节提到,如果在订单表的DataColChanged事件中加入如下代码:

If e.DataCol.Name = "品名" Then \'如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then \'如果新值是空白,也就是品名列的内容为空
        e.
DataRow("单价") = Nothing \'那么清空此行单价列的内容
    
Else
        Dim
 dr As DataRow
        
\'否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr = 
DataTables("产品").Find("[品名] = \'" & e.NewValue & "\'")
        If
 dr IsNot Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing
            e.
DataRow("单价") = dr("单价"
        End
 If
    End
 If
End
 If