ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7130|回复: 24

[求助]不打开EXCEL的汇总和操作

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-7-16 15:49 | 显示全部楼层 |阅读模式

由于经常要汇总一些固定格式的报表,编了个VBA来自动完成, 但一直没有解决不打开EXCEL文件来完成的问题.

可由于工作簿很多,而且越来越多,有时将近200个工作簿要汇总在一起,而且这些工作簿有多个含固定格式的表,表内又有让我头晕的N多公式,打开文件多后运行会非常慢,目前只能一不部分地一不部分汇总(及其他操作),然后再将汇总再汇总. 整个过程需要很长时间.

目前我能想到的方法是程序只打开当前需要用到的工作簿,在不用时关掉,再打开要用的工作簿,但这样反复打开文件也影响速度,加上那些工作簿多使用了公式,每次打开要重新计算好一会儿.所以一直没采取行动. 另外我不熟悉二进制,更不了解EXCEL的数据结构,所以二进制的方法也不适用.

由于程序较长有2M多,所以我把要解决的问题总结成了三个小问题在summary.xls文件中.
summary是程序要生成的文件, book1,book2是数据报表.

只要这三个问题能解决,其他的问题都可以解决了,大家看看能否帮我拔了这个针.

  C1WIhsjc.zip (16.44 KB, 下载次数: 111)

三个问题的关键就是:

1.如何生成对含特定字符的工作表引用.

2.如何汇总数据,(这个在1解决后,好象可以用dictionary来解决).

3.如何给不打开的工作表使用"方法",比如改工作表名.

[此贴子已经被作者于2007-7-16 16:52:43编辑过]

TA的精华主题

TA的得分主题

发表于 2007-7-16 16:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

好帖!

建议willin2000版主将三个问题的简述直接写在1楼。

TA的精华主题

TA的得分主题

发表于 2007-7-16 19:49 | 显示全部楼层

理论上来说,ADO改EXCEL工作表名应该可以,不过没实现.

其他问题不难解决:

'引用Microsoft ADO Ext. 2.8 for DDL and Security
Sub macro1()
Dim con As String, mycat  As New ADOX.Catalog, mytbl  As ADOX.Table, N As Long, TEMP As String, r As Range
con = "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;HDR=NO;';data source=" & ThisWorkbook.Path & "\book1.xls"
mycat.ActiveConnection = con
With CreateObject("ADODB.Connection")
N = 0
.Open con
For Each mytbl In mycat.Tables
On Error Resume Next
TEMP = .Execute("SELECT F1 FROM [" & mytbl.Name & "a1:A1]").FIELDS(0) & .Execute("SELECT F1 FROM [" & mytbl.Name & "d4:D4]").FIELDS(0)
If TEMP = "特征1特征2" Then
Set r = [h65536].End(xlUp)
r.CopyFromRecordset .Execute("SELECT f1,f2 FROM [" & mytbl.Name & "H2:i65536]")
r.Offset(, 2).CopyFromRecordset .Execute("SELECT * FROM [" & mytbl.Name & "e2:e2]")
N = N + 1
.Execute "rename table " & Replace(mytbl.Name, "$", "") & " to 数据表" & N
End If
Next
Set mycat = Nothing
End With
With [j1].Resize([h65536].End(xlUp).Row, 1)
.SpecialCells(4) = "=r[-1]c"
.Value = .Value
End With
End Sub

改成循环所有文件即可

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-7-16 20:38 | 显示全部楼层

谢谢呀,狼兄!

程序的目的和我的要求有些出入,不过我知道该怎么弄找表和去表里的单元格了,其实附件的要求-求不重复和汇总求和也是个例子,实际是更复杂的运算.

现在操作程序的时间可以大大降低了.

只很网线太细,不然我一定从那钻过来,先长时间拥抱一下狼兄,然后出去腐败一下,喝上几口.

那个改表名的事,我也再看看在狼兄的启发下是否能解决.因为毕竟手动改许多文件很慢的.

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-7-16 20:46 | 显示全部楼层
浪兄,再问一个问题,ADO如何获得/设置工作表可见或隐藏.

TA的精华主题

TA的得分主题

发表于 2007-7-16 20:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

ADO没这功能吧,咨询一下爱歌版主.

TA的精华主题

TA的得分主题

发表于 2007-7-16 21:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

我曾经修改很多文件名称,办法是:

在Excel中用3列,分别录入或运算出这3列的内容: REN   原文件名  新文件名,然后复制到TXT文件后将后缀改为BAT执行。

[此贴子已经被作者于2007-7-16 21:02:30编辑过]

TA的精华主题

TA的得分主题

发表于 2007-7-16 21:02 | 显示全部楼层

那个改表名的事,我也再看看在狼兄的启发下是否能解决.因为毕竟手动改许多文件很慢的.

--------

关闭自动计算,让程序逐个打开改名关闭,自己上EH浏览帖子,呵呵

TA的精华主题

TA的得分主题

发表于 2007-7-16 21:03 | 显示全部楼层
QUOTE:
以下是引用LangQueS在2007-7-16 21:01:41的发言:

我曾经修改很多文件名称,办法是:

在Excel中用3列,分别录入或运算出这3列的内容: REN   原文件名  新文件名,然后复制到TXT文件后将后缀改为BAT执行。


这样只能改工作薄名吧?

TA的精华主题

TA的得分主题

发表于 2007-7-16 21:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-5 12:11 , Processed in 0.043601 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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