培训与教程


培训信息

输入明细表时,自动复制上一行内容,到末尾自动加新行

需求描述

在输入表单上明细数据的时候,很多情况下,明细数据有不少项目是重复的,只有个别项目的值有不同,这种情况下,对操作员最方便的做法,是能自动复制已经输入的数据到新的一行上。另外,当明细表的空白行都填满了之后,希望能够自动增加一个新的空行出来,而不需要点击工具栏上的插行按钮。

设计方法

这里通过在模板上使用VBA来实现上述需求。样例模板如下:

Excel服务器模板设计实例:自动复制明细表的行

写VBA的时候,要思考这样几个问题:

  1. 什么时候执行VBA代码?在这个问题中,我们希望在每一行输入重量之后自动把本行内容复制到下一行,因此,执行VBA代码的时机,是“输入重量后”,“输入xxx之后”,是Excel的 worksheet_change 事件,因此,我们的代码要写在 worksheet_change 事件处理程序中,还要判断当前单元格是否落在字段“重量”的行列范围内。
  2. 如何复制?这个很简单,取当前行的C列和D列单元格的值,分别复制到下一行的C列和D列中。什么是当前行?当前行的行号是 worksheet_change 事件的参数 target 的 row 属性,取单元格的值和对单元格赋值,就是对 range 对象的操作,这个是Excel写VBA的基本知识了。
  3. 如何判断到了最后一行?本例的做法是,在模板上,对重量所在的单元区域做了命名,实际填报的时候,取该命名区域的末行行号---range(xx).row+range(xx).rows.count-1,如果当前行行号等于此行号,则说明当前已经到了最后一行。
  4. 如何加新行,这个要用到Excel服务器的VBA接口函数 insertRow。

样例下载

此模板样例请从此处下载,导入即可。所有的vba代码都加了注释,以方便阅读。