. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
Notrue
 
Notrue 的头像
终极会员
 
资 料:
注册日期: Oct 2001
帖子: 9,455 声望值: 3
精华: 3,解答: 12
#1 旧 2012-04-24, 15:50:59 默认 【新问题】如何批量读简历表(EXCEL),形成汇总表(字符串溢出)
Notrue 当前离线  

领导做了一个报名表(EXCEL)给各下属部门,现在纷纷报上来了。

1、每人一个EXCEL文件
2、每个文件的格式都一样,主要就是姓名、年龄、学历之类的
3、批量汇总成一张汇总表

用VBA脚本或者什么工具软件能搞定吗?


--------------------------

SPARK 的脚本非常好用,超级强大啊。学习了。

BUT,有一个问题,就是有些单元格内容比较多的时候(超过256个字)就会出现 ExecuteExcel4Macro _Global 错误,如何解决?

此帖于 2012-05-02 11:38:54 被 Notrue 编辑. .


周游列国,吃喝玩乐
DBDG
 
DBDG 的头像
热心会员
 
资 料:
注册日期: Jan 2001
帖子: 4,104 声望值: 14
精华: 0,解答: 1
#2 旧 2012-04-24, 20:32:11 默认
DBDG 当前离线  

试试:Excel汇总专家5.0

这个版不好给下载,GG下好了
Spark
 
Spark 的头像
热心会员
 
资 料:
注册日期: Mar 2000
帖子: 7,211 声望值: 6
精华: 0,解答: 14
#3 旧 2012-04-24, 21:48:19 默认
Spark 当前离线  

VBA,你發一張上來,指出 你要匯總那幾個字段,我給你看看


The World is built on C and C++
samson88
 
samson88 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 2,314 声望值: 2
精华: 2,解答: 37
#4 旧 2012-04-24, 21:48:27 默认
samson88 当前离线  

这里有个视频教程很详细

http://fpbd032.blog.163.com/blog/sta...0761935141177/


在中国,有什么事情解释不了的,一想到“”字就迎刃而解了。
Notrue
 
Notrue 的头像
终极会员
 
资 料:
注册日期: Oct 2001
帖子: 9,455 声望值: 3
精华: 3,解答: 12
#5 旧 2012-04-25, 08:35:59 默认
Notrue 当前离线  

引用:
作者: Spark 查看帖子
VBA,你發一張上來,指出 你要匯總那幾個字段,我給你看看
大侠帮搞定啊!


PS,那个汇总专家试了,好像不是我要的功能啊.......他只能把多个EXCEL文件的内容叠加而已。比如n张表里面都有张三的成绩,它可以根据模版把张三的总成绩加出来而已。
上传的附件
文件类型: zip 兼职培训师报名表.zip (8.0 KB, 19 次查看)
Notrue
 
Notrue 的头像
终极会员
 
资 料:
注册日期: Oct 2001
帖子: 9,455 声望值: 3
精华: 3,解答: 12
#6 旧 2012-04-25, 08:50:14 默认
Notrue 当前离线  

引用:
作者: samson88 查看帖子
这里有个视频教程很详细

http://fpbd032.blog.163.com/blog/sta...0761935141177/
这个视频里面的功能也是数据总加.....而且视频里面没有VBA的具体写法...只是演示而已...
Spark
 
Spark 的头像
热心会员
 
资 料:
注册日期: Mar 2000
帖子: 7,211 声望值: 6
精华: 0,解答: 14
#7 旧 2012-04-25, 12:13:13 默认
Spark 当前离线  

Excel 2003,打开宏设置-可运行
把你的报名表复制到一个文件夹,比如“2012报名表”
打开附件里的Excel文件,点第一个 Show按钮,弹出对话框,选择"2012报名表"这个文件夹。获取2012报名表下所有文件的FileName
点击第二个按钮-Get,自动获取你需要的内容

忘了改列宽,按钮在屏幕偏右的位置F列处

你没有说要哪几个字段,我只是把你贴上来红色的部分统计了
上传的附件
文件类型: rar GetData.rar (14.4 KB, 28 次查看)

此帖于 2012-04-25 14:32:07 被 Spark 编辑. .
Notrue
 
Notrue 的头像
终极会员
 
资 料:
注册日期: Oct 2001
帖子: 9,455 声望值: 3
精华: 3,解答: 12
#8 旧 2012-05-02, 11:39:52 默认
Notrue 当前离线  

不好意思,上周出差了,一直没空试这个脚本。今天早上用上了,非常好用,超级强大啊。学习了。

BUT,有一个问题,就是有些单元格内容比较多的时候(超过256个字)就会出现 ExecuteExcel4Macro _Global 错误,如何解决?

感谢Spark!!!
Spark
 
Spark 的头像
热心会员
 
资 料:
注册日期: Mar 2000
帖子: 7,211 声望值: 6
精华: 0,解答: 14
#9 旧 2012-05-02, 13:49:31 默认
Spark 当前离线  

用Ado连接也是有超过256字符被截断的问题
http://support.microsoft.com/kb/189897/EN-US/
Notrue
 
Notrue 的头像
终极会员
 
资 料:
注册日期: Oct 2001
帖子: 9,455 声望值: 3
精华: 3,解答: 12
#10 旧 2012-05-02, 17:45:07 默认
Notrue 当前离线  

谢谢,那只能认为是MS VBA的缺陷了....

如果能分两次读就好了,呵呵。
Spark
 
Spark 的头像
热心会员
 
资 料:
注册日期: Mar 2000
帖子: 7,211 声望值: 6
精华: 0,解答: 14
#11 旧 2012-05-02, 23:12:12 默认
Spark 当前离线  

楼主修改一下注册表试试。我没有用Ado引擎读取数据,不知道是否有效

原来,ODBC在读取Excel时,会有个值设置TypeGuessRows=8, 意思是ODBC会先在前8行的数据中去比较,如果所有的数据都在255或以下,那这个字段长度就是varchar(255),否则,这个字段将是text类型。

于是,我们加上TypeGuessRow=100,再试,结果错误依然存在。

原来,虽然可以设置这个属性,但ODBC是不会去用它的,要使这个属性有效,必须修改注册表。对于注册表键是

• Excel 97
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel
• Excel 2000 and later versions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

修改了里面的TypeGuessRow后,这个问题暂时解决了。

但是,如果大的数据在表的后面位置的话,这个问题还是有可能发生的。所以要彻底的解决的话,在打开一个recordset前,就要先定义好它的字段长度了。
tbiyt
 
tbiyt 的头像
热心会员
 
资 料:
注册日期: Sep 2010
帖子: 569 声望值: 5
精华: 0,解答: 4
#12 旧 2012-05-03, 23:04:39 默认
tbiyt 当前离线  

试试excel百宝箱9.0吧 功能很强大
还有教程
http://excelbbx.net/Excel/index.htm
左边找到 工作簿汇总 记得不要选同名工作表的数据合并到同表中
lee1892
 
lee1892 的头像
荣誉版主
 
资 料:
注册日期: Sep 2001
帖子: 1,572 声望值: 14
精华: 4,解答: 10
#13 旧 2012-05-07, 10:46:06 默认
lee1892 当前离线  

引用:
作者: Spark 查看帖子
Excel 2003,打开宏设置-可运行
把你的报名表复制到一个文件夹,比如“2012报名表”
打开附件里的Excel文件,点第一个 Show按钮,弹出对话框,选择"2012报名表"这个文件夹。获取2012报名表下所有文件的FileName
点击第二个按钮-Get,自动获取你需要的内容

忘了改列宽......
看了一下代码
1、取得目录下文件列表的循环 For i = 2 To .FoundFiles.Count,为什么是从第2个文件开始?估计写代码的时候,GetData.xls这个文件在同一目录下。那么你上面这个运行方法的描述有问题,即便是也放到一个目录里,代码还利用了文件名造成的顺序。楼主要注意这个。
2、比较奇怪为什么要用Excel4.0的宏调用这个函数,在我的理解Excel4.0宏函数是完全可以淘汰的东西。仅仅是把单元格内容复制出来而已啊...

不用那么麻烦,还要改什么注册表吧

============================
闲得蛋疼,写了一个,放到简历表同一目录下打开执行。

代码如下:
PHP 代码:
Sub GetData()
    
Dim iFile As IntegeriItem As IntegerintRowNow As Integer
    Dim arrData
()
    
Dim arrItem()
    
    
'清空原有数据提示'
    
If MsgBox("此操作将清除原有数据,是否继续?"vbYesNo"提示") = vbNo Then Exit Sub
    
If [B65536].End(xlUp).Row 3 Then
        Rows
("4:" & [B65536].End(xlUp).Row).Delete
    End 
If
    
ReDim arrData(1 To 11 To [IV2].End(xlToLeft).Column)
    
arrItem Range("B3").Resize(1UBound(arrData2) - 1)
    
intRowNow 4
    
'查找同目录下Excel文件,并逐个读取数据并写入合并文件'
    
With Application.FileSearch
        
.NewSearch
        
.LookIn ThisWorkbook.Path
        
.FileType msoFileTypeExcelWorkbooks
        
.SearchSubFolders True
        
.Execute
        
For iFile 1 To .FoundFiles.Count
            
If .FoundFiles(iFile) = ThisWorkbook.FullName Then GoTo NEXT_I
            Application
.Workbooks.Open .FoundFiles(iFile)
            
arrData(11) = Right(.FoundFiles(iFile), Len(.FoundFiles(iFile)) - Len(ThisWorkbook.Path) - 1)
            For 
iItem 1 To UBound(arrItem2)
                
arrData(1iItem 1) = Workbooks(arrData(11)).Sheets(1).Range(arrItem(1iItem))
            
Next
            Workbooks
(arrData(11)).Close
            Range
("A" intRowNow).Resize(1UBound(arrData2)) = arrData
            intRowNow 
intRowNow 1
NEXT_I
:
        
Next
    End With
End Sub 
上传的附件
文件类型: rar 合并报名表.rar (9.7 KB, 6 次查看)

此帖于 2012-05-07 12:22:14 被 lee1892 编辑. .


行行复行行...人生路漫长...
Spark
 
Spark 的头像
热心会员
 
资 料:
注册日期: Mar 2000
帖子: 7,211 声望值: 6
精华: 0,解答: 14
#14 旧 2012-05-07, 14:12:19 默认
Spark 当前离线  

复楼上
因为我用多年前写的脚本改了一下
Notrue
 
Notrue 的头像
终极会员
 
资 料:
注册日期: Oct 2001
帖子: 9,455 声望值: 3
精华: 3,解答: 12
#15 旧 2012-05-07, 16:35:15 默认
Notrue 当前离线  

lee1892、SPARK等各位热心坛友,太感谢了!
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 17:37:13.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号