|
楼主 |
发表于 2012-5-29 23:40
|
显示全部楼层
或者这样:- Sub 合并格式报表()
- '循环当前文件夹中所有工作簿的所有工作表并按定位模版抄录到“合并格式报表.xls”的数据库表
- On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息
- Application.Calculation = xlCalculationManual '手动重算
-
- KK = ThisWorkbook.Name '当前工作簿名称
-
- ff = Dir(ThisWorkbook.Path & "\*.xls") '搜索当前文件夹
- Do While ff > " " '只要指定的条件为 True,则会重复执行
- If ff <> ThisWorkbook.Name Then '如果不是当前工作簿
- Set wb = Workbooks.Open(ThisWorkbook.Path & "" & ff) '打开工作簿
- For i = 1 To wb.Sheets.Count '循环工作表
- With wb.Sheets(i)
- '===============================================================================
- If Workbooks(KK).Sheets("定位模版").Range("a2") < 1 Then Exit Sub '否则就退出程序
- a = Workbooks(KK).Sheets("定位模版").Range("A2").Value '使用在A2单元返回的数据行数
- b = Workbooks(KK).Sheets("数据库").Columns(1).Find("*", , xlValues, , , 2).Row '数据库第1列最后可见非空单元行号
- For Each r In Workbooks(KK).Sheets("定位模版").UsedRange '数组方式——将定位模版工作表所有单元纳入数组
- '酸橙色单元为1对多行
- If r.Interior.ColorIndex = 43 Then '如果单元颜色为酸橙色则
- cc = r.Address '单元地址
- c = .Range(cc) '返回报表相应单元内容
- d = Workbooks(KK).Sheets("数据库").Range("1:1").Find(What:=r, After:=Workbooks(KK).Sheets("数据库").Range("A1"), LookAt:=xlWhole, SearchOrder:=xlByRows).Column '匹配查找数据库表首行返回列号
- If d > 0 Then
- e = Split(Cells(1, d).Address, "$")(1) '转为列标
- Workbooks(KK).Sheets("数据库").Range(e & b + 1 & ":" & e & b + a).Value = c '记录到数据库多行
- End If
- End If
- '茶色单元为分别记录多行
- If r.Interior.ColorIndex = 40 Then '如果单元颜色为茶色则
- For f = 1 To a '循环行
- cc = r.Address '单元地址
- c = .Range(cc).Offset(f, 0).Value '返回报表相应单元内容
- d = Workbooks(KK).Sheets("数据库").Range("1:1").Find(What:=r, After:=Workbooks(KK).Sheets("数据库").Range("A1"), LookAt:=xlWhole, SearchOrder:=xlByRows).Column '匹配查找数据库表首行返回列号
- If d > 0 Then
- e = Split(Cells(1, d).Address, "$")(1) '转为列标
- Workbooks(KK).Sheets("数据库").Range(e & b + f) = c '记录一个单元
- End If
- Next
- End If
- '向数据库表A列写入行号
- Workbooks(KK).Sheets("数据库").Range("A" & b + 1 & ":A" & b + a) = "=row()" '写入行号公式
-
- '向数据库表指定列写入表格文件名称和工作表名称
- Workbooks(KK).Sheets("数据库").Range("ba" & b + 1 & ":ba" & b + a) = ff '将工作簿名称写入AB列
- Workbooks(KK).Sheets("数据库").Range("bb" & b + 1 & ":bb" & b + a) = Sheets(i).Name '将工作表名称写入BB列
- Next
- '==============================================================================
- End With
- Next
- wb.Close 1 '关闭 Open 语句所打开的输入/输出 (I/O) 文件。
- End If
- ff = Dir
- Loop
- Application.Calculation = xlCalculationAutomatic '自动重算
- On Error GoTo 0 '恢复正常的错误提示
- End Sub
复制代码 |
|