|
楼主 |
发表于 2009-12-2 20:43
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
代码分析
Sub 汇总()
Dim myPath$, myFile$, sht As Worksheet
Dim wb As Workbook, th As Workbook '定义详细的变量类型,可以提高代码的速度
Dim arr, lr As Long, lr2 As Long '声明变量,数组arr
Dim x As Long
Dim tempS(100) As String '声明数组变量
Set th = ThisWorkbook
myPath = ThisWorkbook.Path & "\all_books\" '给路径变量赋值
myFile = Dir(myPath & "\*.xls") '用dir函数提取一个文件名
Application.ScreenUpdating = False '关闭屏幕刷新
Application.DisplayAlerts = False '禁用所有事件
Range("d1:da50").ClearContents '清除数据区内容,范围可以按需调整
With ThisWorkbook.Sheets("Sheet1") 'with语句,下列最左边只有“.”的语句有共同的对象ThisWorkbook.Sheets("Sheet1")
Do While myFile <> "" '当文件名不为空循环
Workbooks.Open myPath & myFile '打开all_books目录中的一个文件
For Each sht In Sheets '对这个文件的每个工作表(这里假设每个文件的工作表数不定)
lr2 = .Range("iv2").End(xlToLeft).Column + 1 '主工作表e列最后一个空单元格
x = 1
tempS(x) = sht.Range("e4").Value '将问卷中指定单元格的内容附值到数组中
x = x + 1
tempS(x) = sht.Range("e6").Value
x = x + 1
tempS(x) = sht.Range("c9").Value
x = x + 1
tempS(x) = sht.Range("g9").Value
'x = x + 1 '按调查表的格式,自己添加相应代码,最多100个内容,你也可以在Dim tempS(100) As String时多申请一点内存,比如temp(1000)
'tempS(x) = sht.Range("XX").Value
'下面进行写入汇总结果的操作
x = 1
For x = 1 To 4 '这里只用到了数组中的4个单元
th.Sheets(1).Cells(x, lr2) = tempS(x)
Next
Next '继续循环打开文件的每个工作表,这里不会循环了,因为每个文件只有一张表
ActiveWorkbook.Close '关闭打开的工作簿
myFile = Dir '再用dir函数提取一个文件名
Loop '继续循环,重复上述过程
End With
Application.DisplayAlerts = True ' 启用所有事件
Application.ScreenUpdating = True '打开屏幕刷新
End Sub
[ 本帖最后由 ljsandy 于 2009-12-2 22:14 编辑 ] |
|