Foxtable(狐表)用户栏目专家坐堂 → [讨论] 这个简单的计算代码如何写?


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

主题:[讨论] 这个简单的计算代码如何写?

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


加好友 发短信
等级:五尾狐 帖子:1039 积分:7450 威望:0 精华:0 注册:2008/8/31 22:52:00
[讨论] 这个简单的计算代码如何写?  发帖心情 Post By:2008/10/17 11:23:00 [只看该作者]

A表有“科目”列,如下:

固定资产清理
固定资产清理
劳务成本\辅助生产\汽车队
劳务成本\辅助生产\汽车队\办公费
劳务成本\辅助生产\汽车队\办公费

我希望“一级科目”列为:
如果“科目”列中包含“\”,则返回第一个“\”左边的汉字;
如果“科目”列中不包含“\”,则返回“科目”列的对应记录;

帮助中这类似的例子少了啊!


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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2008/10/17 11:47:00 [只看该作者]

if  e.DataRow("科目") is Nothing  Then 
    e.DataRow("一级科目") = Nothing
Else
    e.DataRow("一级科目") =(e.DataRow("科目") & "\").split("分隔符")(0)
End If


论坛有BUG,把代码中"分隔符"换为右斜杠显示不正常,记得要替换.
[此贴子已经被作者于2008-10-17 11:54:40编辑过]

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


加好友 发短信
等级:超级版主 帖子:315 积分:3217 威望:0 精华:6 注册:2008/8/31 19:42:00
  发帖心情 Post By:2008/10/17 11:54:00 [只看该作者]

将下面代码复制到命令窗口,修改V(0)  为不同数字,如V(1),测试一下,你就明白如何做了。

Dim s as String= "劳务成本\辅助生产\汽车队\办公费"
Dim V as String()
 v =s.split("\")  
Output.Show(v(0) )

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


加好友 发短信
等级:五尾狐 帖子:1039 积分:7450 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2008/10/17 12:00:00 [只看该作者]

这个我看得懂啊,

现在我是要计算像这样的一整列:

固定资产清理
固定资产清理
劳务成本\辅助生产\汽车队
劳务成本\辅助生产\汽车队\办公费
劳务成本\辅助生产\汽车队\办公费
.......

我希望得到
固定资产清理
固定资产清理
劳务成本
劳务成本
劳务成本
......


说实话,我主要是对象搞混淆了,不明白“字符”和“一列字符”在写代码时有何不同!如何计算“一列字符”啊?

我没有任何VB编程基础的,确实不易理解不同的对象。

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


加好友 发短信
等级:超级版主 帖子:315 积分:3217 威望:0 精华:6 注册:2008/8/31 19:42:00
  发帖心情 Post By:2008/10/17 12:45:00 [只看该作者]

将e.DataRow("一级科目") =(e.DataRow("科目") & "\").split(" \ ")(0)写入计算代码,在菜单中重算一级科目列,不行吗?
[此贴子已经被作者于2008-10-17 12:45:51编辑过]

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


加好友 发短信
等级:超级版主 帖子:315 积分:3217 威望:0 精华:6 注册:2008/8/31 19:42:00
  发帖心情 Post By:2008/10/17 13:52:00 [只看该作者]

如果你想让公式自动计算,在DataColChanged事件中:

If e.DataCol.Name ="科目" Then
e.DataTable.DataCols("一级科目").Recalc(e.DataRow)
End If


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


加好友 发短信
等级:五尾狐 帖子:1039 积分:7450 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2008/10/17 14:59:00 [只看该作者]

我试了半天,正解如下:

 

Dim aa as String = e.datarow("科目名称") '将科目名称赋值给aa
Dim bb as String()                       ’建立一字符数组
bb = aa.split("\")            ‘将bb定义为一个以\分隔的数组
e.datarow("一级科目名称")=bb.(0) '将一级科目名称的值设置为数组bb的第一个值

Next


其实关键是要灵活运用,初学者是经验太不足了。 

 
明白了一样东西:数据行、数据列作为对象,可以赋值给一个变量,再运用各种计算代码得出需要的东西,最后再赋值给另一变量。狐表自己会一行一行地计算的。

[此贴子已经被作者于2008-10-17 15:01:55编辑过]

 回到顶部