ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 海哥2011

求助:报表自动拆分功能

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-30 17:40 | 显示全部楼层
Hehex
您好!
非常感谢您的耐心回复。
我又来劳烦你一下了。
附件中,各个分表我添加了好几个sheet,比如应收和库存。
但我执行拆分命令后,这些sheet会删除掉。
你帮忙看一下该怎么调整一下呢。
还有日期部分,以本附件为例,我该怎么调整才能在分表中显示XX年XX月XX日格式呢。
你人在上海或者深圳么,要请你吃顿饭。
感谢。

日期
41282
41283
41283
41283
41285
41285
报表事例.zip (39.09 KB, 下载次数: 9)

TA的精华主题

TA的得分主题

发表于 2013-7-31 10:41 | 显示全部楼层
海哥2011 发表于 2013-7-30 17:40
Hehex
您好!
非常感谢您的耐心回复。

基本上明白你为什么出现错误了。
你运行程序的时候打开了departments 目录下的文件,造成分割生成的工作薄无法覆写。
程序运行中途中断,就可能出现任何问题。
请在程序运行前确认下面2点:
1. departments 目录下的文件最少是没有打开,最好当然是清空。
2. 你所要运行程序所在的工作薄列表是正确的,即没有已经生成的"某某部"的工作表,如果已经存在请删除
否则可能造成程序错误。

因为在公司,只有2003版本的excel 所以做了一个2003 版的演示版本
解决了以下问题:
1.日期格式显示问题,已经用代码给你彻底重写过。
2. 在工作薄中添加了2张空工作表,"库存" 和"应收",经测试没有被误删除过。
3.添加了一个测试效率的功能,每次程序运行结束后会自动弹出本次执行的时间(秒)数。

具体请参考附件。

报表.zip

38.17 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2013-7-31 11:40 | 显示全部楼层
海哥2011 发表于 2013-7-30 17:40
Hehex
您好!
非常感谢您的耐心回复。

做了一个添加自动判断错误的程序,在俺公司的电脑上,可以判断是否是你已经打开了目标文件造成无法覆写错误,会自动关闭分割生成的工作薄,并提示你错误原因。
如果是工作薄中已经存在待生成的分割工作表,则删除该工作表并继续执行程序。
话说vb 的错误陷阱和错误捕获好像不是非常好,特别是vba 中,俺写的代码也不是非常稳定,所以最好不要挑战错误处理功能。最好按照上贴叙述的两条来避免错误。

已经在错误处理代码中写了详细注释
这里重述一下这个程序俺的思路:

首先从你的配置表中读取,需要分割出的记录表名字(部门字段下)进一个字典
然后在将总表中所有记录导入一个数组,和字典循环进行判断,如果该部门记录在字典中
则将该记录写入另外一个目标数组,直到内循环结束。
将目标数组写入以字典中的key 命名的工作表(就是XX 部门)
继续循环,直到外循环结束。
将生成的部门工作表对外覆写成为工作薄文件,另存到当前目录\departments\目录下
以该工作表的名称+扩展名xlsx 保存(目前我的是+xls, 没办法只有2003版本)。
删除该生成的工作表。

这种使用字典对象,数组配合的写法优点是效率会比较高,比如你前面拿的那个罗老师的例子,那个是使用工作表对象和range 对象进行循环的,优点是对初学者好理解。缺点是效率非常差,如果2万条记录的话,他的那个程序要比俺的慢10倍以上,可见那个仅仅是用于教学的,而不是实际应用的。

不说废话了,参考附件吧(目前错误处理程序模块可能仅在英文版excel 下能工作无误,中文版要做相应修改,俺在注释里已经写了)

报表含错误处理.zip

40.7 KB, 下载次数: 19

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-31 11:43 | 显示全部楼层
代码运行过程.zip (14.6 KB, 下载次数: 12)
Hehex
您好!
收到你回复的代码我初步运行了一下。大概的几点总结如附件。
你帮忙抽点时间再看一下。
我现在每日根据你提供的代码进行拆分,然后用CDOMAIL 将分拆好的报表发送给对应负责人了,效率比以前大大提升了
感谢。

TA的精华主题

TA的得分主题

发表于 2013-7-31 12:32 | 显示全部楼层
海哥2011 发表于 2013-7-31 11:43
Hehex
您好!
收到你回复的代码我初步运行了一下。大概的几点总结如附件。

是简单将应收,逾期等表复制到生成的分表中?
俺换成.xls 是没办法的事情,因为俺这里只有2003,公司的电脑规矩多,俺又不能改。
作成.xlsx 就没法读了,调试都困难。你可以在代码中改回.xlsx 就好了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-31 12:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Hehex
你中午不休息啊,我一会要休息一下。
这个我自己调整一下就行。
不需要将总表中的复制到各分表中,各分表中的应收和逾期我会提前写好内容。
在进行清空分表内容的时候别把分表中的应收和逾期清掉就行。
感谢

TA的精华主题

TA的得分主题

发表于 2013-7-31 15:19 | 显示全部楼层
海哥2011 发表于 2013-7-31 12:46
Hehex
你中午不休息啊,我一会要休息一下。
这个我自己调整一下就行。

因为现在的算法对各个分表是覆盖更新的,所以你最好把相对于各个分表需要引用的,逾期什么的数据在总表什么地方写好,这样
拆分录入的时候可以一次生成。否则的话,程序改动会很大,根本性的,几乎要完全重写。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-31 16:31 | 显示全部楼层
好的,我再重新规划一下思路。
你的代码比EH那个别怕VBA很简单里面的要复杂多了,涉及数组和字典,所以五月份你刚给我写出来的时候,我基本看不懂。运行速度超快。我刚才用EH那个方法运行了一下1.2万行数据,只是拆分工作簿,没有另存为报表都用了一分钟。

TA的精华主题

TA的得分主题

发表于 2013-7-31 16:41 | 显示全部楼层
海哥2011 发表于 2013-7-31 16:31
好的,我再重新规划一下思路。
你的代码比EH那个别怕VBA很简单里面的要复杂多了,涉及数组和字典,所以五月 ...

那个是叶枫老师为了初学者好理解故意那么写的。
话说我也是从那个程序入手的,为了能跟随叶枫老师的脚步,当时俺对着那个表整整憋了三天。
大约一年前了,那时候别怕那本书还没有出版,是跟着“菜鸟学VBA系列”开始学习的。
只要入门之后,数组啊,字典啊,很快就能上手了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-31 17:03 | 显示全部楼层
根据你这个程序,我逐步体会到了字典和数组的威力了。
要好好学习这两部分了。
感谢你帮我把这个表格完善了这么多。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 10:21 , Processed in 0.043428 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表