Excel也能做出如此炫的界面
“南山物流进销存”说明文档
近期利用空闲时间试着解决gtbb2002朋友在EH上提出的一个实用问题,主要是利用Excel解决物流进销存的方案,他给出了Excel界面和部分数据,并提出了要解决的问题。
看看下面的界面,是用Excel做的,很漂亮!

其问题如下:
1、窗口录入只有5行,可录入可能有10-30种,能不能增加一个下拉窗口。
2、在录入产品时,如果输入条形码或是批量复制品名规格各产品时,能自动导入后面几列的相关信息,如品名规格,产地、单价。注:添加到入库单是产品信息的进价,添加到出库单是批发价。如果可以的话,当添加到出库单时,数量不是整数时,即小数那么单价则是零售价。
3、按下保存时,如果单元格是选择入库单则保存在入库单,如果单元格是选择出库单则保存在出库单。
4、查找要求:
a、创建一个查找窗口。可以查找某一个时间段的入库、出库产品清单。
b、或是具体查找某一天的入库、出库产品清单。
c、根据生产单号查找入库或出库的产品清单。
最后一个比较难的要求:
能不能增加一个计算利润按钮:计算:每种产品进货渠道不同,进价不同,客户不同,卖出的价格也不同……
已解决并提供的功能
其实这个问题除了要求在有限的Excel工作表输入空间提供下拉窗口之外,其它的都不难。初步完成的作品已有下列功能:
1、当录入窗口中,超过6行时,会自动提供一个空白行,并显示滚动条,这样,不仅可以继续录入,而且还能够利用滚动条查看已录入的数据,甚至修改已录入的数据。
2、如果是入库单,当输入品名规格时会自动在相应的单元格中输入条形码、产地、单价;如果是出库单,当输入品名规格时会自动在相应的单元格中输入条形码、产地,输入数量后,会自动输入单价,改变数量时(主要是由整数变小数,或由小数变整数),会自动调整单价。
(注:由于条形码不是唯一的,因为没有做输入条形码后自动输入其它相关列信息的功能)
3、按下保存时,将根据单据名目保存。
4、按下新建时,可选择是否保存已在录入窗体中保存的数据。无论是否保存,都将清除输入区域,供输入新的数据。
5、按下查找时,将出现一个查找结果的工作表,上面有三个按钮,这些按钮的左侧均有用蓝色边框围着的输入单元格。输入相应的条件,按下按钮后将显示查找的结果。
6、最后一个要求,由于表述与提供的数据有矛盾,故没有做这个功能。其实,需求者您可以将数据好好设计一下,实现这个功能应该相当容易。
解决思路
将解决思路写下来,供以后参考。
1、针对窗口录入只有5行,可录入可能有10-30种,要求增加下拉窗口
在录入窗口工作表中,增加一个滚动条控件,在工作簿中增加一个临时数据工作表。仿ListView控件的功能,即当在最后一行中输入完成后,在其下自动增加一个空行,已输入完成的数据上移。在本例中,实际上没有增加行,只是将输入完的数据上移,使最后一行为空,而临时数据工作表就是起到存储输入区域的数据以及与输入区域交换数据的功能。这样,就出现了一个列表框的效果,实际上“临时数据”工作表是后台。
2、同步工作表
“录入窗口”工作表和“临时数据”工作表同步,即在录入窗口工作表中一行录入数据完成则存放在临时数据工作表中,以备后面获取数据。
3、一切利用临时数据工作表作为中介,当数据超过6行时,再启用滚动条,滚动条主要用于提供一个数字,与录入窗口工作表和临时数据工作表中的行数相关联,从而在录入窗口中反映前面录入的数据。并且可以随时更新各工作表,而使数据正确,不会出现重复数据而没有反映改变后的情况。
此时,应注意滚动条与工作表行相对应的最前面和最后面的数值。
4、利用这个工作簿时,在录入窗口工作表中到达第18行之前,C、D两列必须填完整;在第18行中,该行必须填完整才能出现空行。
小结:首先实现录入窗口工作表与临时数据工作表同步,即录入一行,在临时数据工作表中增加一行,若超过6行,则自动在录入窗口工作表中“增加”一行。
然后,利用滚动条实现对超过6条录入的数据,可以在录入窗口中看到之前录入的所有数据。
第三,考虑到可能有输入错误,因此当修改已录入的数据时,能同步更新临时数据工作表,从而使数据保持最新。
注:临时数据工作表是真正保存所录入数据的工作表,所以也是操作的中心。一切数据都保存于其中,一切数据也取之于其中,并能更新修改过的数据。
第四,当本次输入的数据完成后,能够及时清除临时数据工作表及录入窗口工作表中的数据。
5、在关闭工作簿前,清空数据
6、几项注意的地方:
(1)变量应该及时清零。
(2)注意循环变量的初始值有无变化。
(3)滚动条Change事件的触发情形。当为滚动条赋最小值和最大值时,不会触发其Change事件,而当为其赋Value属性值时,则会触发。
(4)注意,每次事件触发后的变量值
7、当事件很多,相互有干扰时,可使用语句Application.EnableEvents = False来禁用特定的事件。在大量利用对象事件编程的程序中,有时会出现程序没有反应的情况,这可能是禁用事件所造成,可运行语句Application.EnableEvents = True试试。
8、要取类中的属性值,则要引用类。特殊的,引用工作表对象模块中的属性值,则要加上工作表对象名。
9、查找方法找到的是一个对象,因而应该用Set关键字。通常,对象变量要使用Set关键字赋值。
时间所限,还存在的问题,一般不会妨碍操作,但需规范操作,否则可能有错误的数据存在。
只能输入品名规格并自动导入相关信息,而不能输入条形码后自动导入相关信息,主要是考虑到品名规格是唯一的而条形码不是,再加上工作表中限定的输入行仅6行,如果重复的条形码较多的话,实现起来有一定的难度,故而在这里从简。
还有很多可以改进的地方和需要改进的地方,这要看具体的使用情况了。
此外,输入窗口的界面可以进一步改进,例如仅限定在特定区域输入。
详细问题和解答参见:http://club.excelhome.net/dispbbs.asp?boardid=2&replyid=1248116&id=305023&page=1&skin=0&Star=2
示例文档参见:点击下载

发表评论