ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 合并同类报表工具分享

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-19 21:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
shaowu459 发表于 2011-2-27 14:45
已更新2003版,在1楼。合并时会提示输入一个密码,示例文件中请入123,自己合并自己的表格时可选择取消即 ...

1楼不能用,提示:
丢失了 Visual Basic 项目。
丢失了 ActiveX 控件。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-19 21:06 | 显示全部楼层
考试加油站 发表于 2012-5-19 21:03
1楼不能用,提示:
丢失了 Visual Basic 项目。
丢失了 ActiveX 控件。

不好意思,我的电脑是英文版的,可能会造成汉语系统打开时丢失项目问题。这个。。我也不知道咋解决,哎

TA的精华主题

TA的得分主题

发表于 2012-5-19 21:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shaowu459 发表于 2012-5-19 21:06
不好意思,我的电脑是英文版的,可能会造成汉语系统打开时丢失项目问题。这个。。我也不知道咋解决,哎

那您能将03版代码直接贴上来吗

点评

发到34楼了,不过太乱了。你哪里能看到userform和按钮吧  发表于 2012-5-19 21:12

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-19 21:11 | 显示全部楼层
模块中的代码:
  1. Sub actionModule()
  2.     Dim i, j As Integer
  3.     Dim num As Integer
  4.     Dim extention As String
  5.     Dim Sh As Worksheet, myName$, n%
  6.     Dim myDelimiter As String
  7.     Dim Password As String

  8.     Password = InputBox("要合并的工作表是否有保护?若无请点击取消,若有请输入密码。", "密码保护确认")

  9.     Application.DisplayAlerts = False
  10.     Application.ScreenUpdating = False

  11.     For Each Sh In Worksheets
  12.         If Sh.Name <> ActiveSheet.Name Then             '可修改参数
  13.             Sh.Delete
  14.         End If
  15.     Next

  16.     For i = 1 To shsSelect.ListView2.ListItems.Count
  17.         If shsSelect.ListView2.ListItems(i).Checked = True Then
  18.             num = num + 1
  19.         End If
  20.     Next i

  21.     If num = 0 Then
  22.         MsgBox "请注意,您没有选定任何工作表合并!请重新选择需要合并的工作表!"
  23.         Exit Sub
  24.     End If


  25.     n = 1
  26.     myName = Dir(ThisWorkbook.Path & "\*.xls*")
  27.     Range("a2:b65536").ClearContents
  28.     Range("a2:b65536").Hyperlinks.Delete

  29. PP:
  30.     myDelimiter = InputBox("请输入文件名的分割标识符,默认设置将以被合并Workbook的文件名为Worksheet名称。若输入被合并文件的统一后缀(或文件名中均有的相同文本),如“.20101231”,则被合并Workbook文件名在“.20101231”以前部分将作为合并后的Worksheet名称。", "请输入文件名分隔符", ".xl")

  31.     If myDelimiter = "" Then
  32.         MsgBox "分隔符不能为空!请重新输入分隔符!"
  33.         GoTo PP
  34.     End If

  35.     Do While myName <> ""

  36.         If myName <> ThisWorkbook.Name Then

  37.             If InStr(myName, myDelimiter) = 0 Then
  38.                 MsgBox "输入的分隔符有错误,文件名中并不包含此字符串,请重新输入分隔符。"
  39.                 GoTo PP
  40.             End If

  41.             Workbooks.Open ThisWorkbook.Path & "" & myName

  42.             If Password <> "" Then
  43.                 For j = 1 To ActiveWorkbook.Sheets.Count
  44.                     ActiveWorkbook.Sheets(j).Unprotect Password
  45.                 Next j
  46.             End If

  47.             Application.StatusBar = "正在处理工作薄" & ActiveWorkbook.Name & ",请稍候……"

  48.             For i = 1 To shsSelect.ListView2.ListItems.Count

  49.                 If shsSelect.ListView2.ListItems(i).Checked = True Then
  50.                     ActiveWorkbook.Sheets(shsSelect.ListView2.ListItems(i).Text).Activate

  51.                     ActiveWorkbook.Sheets(shsSelect.ListView2.ListItems(i).Text).Range("D217:J245").Select
  52.                     Selection.Copy
  53.                     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  54.                                                                                   :=False, Transpose:=False


  55.                     ActiveWindow.View = xlNormalView
  56.                     ActiveWindow.Zoom = 85
  57.                     ActiveWorkbook.Sheets(shsSelect.ListView2.ListItems(i).Text).Copy After:=ThisWorkbook.Sheets(n)
  58.                     n = n + 1

  59.                     If num > 1 Then
  60.                         extention = "-" & shsSelect.ListView2.ListItems(i).Text
  61.                     Else
  62.                         extention = ""
  63.                     End If




  64.                     ThisWorkbook.Sheets(n).Name = VBA.Left(myName, InStr(myName, myDelimiter) - 1) & extention
  65.                     ThisWorkbook.Worksheets("首页").Range("a" & n) = n - 1
  66.                     ThisWorkbook.Worksheets("首页").Hyperlinks.Add ThisWorkbook.Worksheets("首页").Range("b" & n), Address:="", SubAddress:="'" & ThisWorkbook.Sheets(n).Name & "'!A1", ScreenTip:=ThisWorkbook.Sheets(n).Name, TextToDisplay:=ThisWorkbook.Sheets(n).Name
  67.                     ActiveSheet.Hyperlinks.Add ActiveSheet.Range("p1"), Address:="", SubAddress:=Sheets(1).Name & "!A1", ScreenTip:="返回首页", TextToDisplay:="返回"

  68.                     Workbooks(myName).Activate
  69.                 End If
  70.             Next i

  71.             If Password <> "" Then
  72.                 For j = 1 To ActiveWorkbook.Sheets.Count
  73.                     ActiveWorkbook.Sheets(j).Protect Password
  74.                 Next j
  75.             End If

  76.             Workbooks(myName).Close
  77.         End If
  78.         myName = Dir
  79.     Loop

  80.     Application.StatusBar = False

  81.     ThisWorkbook.Sheets(1).Activate

  82.     Application.ScreenUpdating = True
  83.     Application.DisplayAlerts = True

  84.     Application.Calculation = xlCalculationAutomatic
  85. End Sub
复制代码
按钮的代码:

  1. Private Sub CommandButton1_Click()

  2. Application.Calculation = xlCalculationManual
  3. If ThisWorkbook.Worksheets.Count > 1 Then
  4.     If MsgBox("重新导入报表将删除原来报表,继续吗?        ", 52, "警告") = 7 Then
  5.         Exit Sub
  6.     Else
  7.         shsSelect.Show
  8.     End If
  9. Else
  10.         shsSelect.Show
  11. End If
  12. End Sub
复制代码
  1. Private Sub CommandButton1_Click()
  2. Dim i, j As Integer
  3. ListView2.ListItems.Clear
  4. For i = 1 To ListView1.ListItems.Count
  5.    If ListView1.ListItems(i).Checked = True Then
  6.         j = j + 1
  7.         ListView2.ListItems.Add , , ListView1.ListItems(i).Text
  8.         ListView2.ListItems(j).Checked = True
  9.    End If
  10. Next i

  11. If j > 0 Then
  12.     CommandButton5.Enabled = True
  13.     CommandButton6.Enabled = True
  14. End If
  15. End Sub

  16. Private Sub CommandButton2_Click()
  17. Dim i As Integer
  18. For i = ListView2.ListItems.Count To 1 Step -1
  19.     If ListView2.ListItems(i).Checked = True Then
  20.         ListView2.ListItems.Remove i
  21.     End If
  22. Next i

  23. If ListView2.ListItems.Count = 0 Then
  24.     CommandButton5.Enabled = False
  25.     CommandButton6.Enabled = False
  26. End If

  27. End Sub

  28. Private Sub CommandButton3_Click()
  29. Dim i As Integer
  30. For i = 1 To ListView1.ListItems.Count
  31.     ListView1.ListItems(i).Checked = True
  32. Next i
  33. End Sub

  34. Private Sub CommandButton4_Click()
  35. Dim i As Integer
  36. For i = 1 To ListView1.ListItems.Count
  37.     ListView1.ListItems(i).Checked = False
  38. Next i
  39. End Sub
  40. Private Sub CommandButton6_Click()
  41. Dim i As Integer
  42. For i = 1 To ListView2.ListItems.Count
  43.     ListView2.ListItems(i).Checked = True
  44. Next i
  45. End Sub

  46. Private Sub CommandButton5_Click()
  47. Dim i As Integer
  48. For i = 1 To ListView2.ListItems.Count
  49.     ListView2.ListItems(i).Checked = False
  50. Next i
  51. End Sub

  52. Private Sub CommandButton7_Click()
  53. shsSelect.Hide
  54. Call actionModule
  55. End Sub

  56. Private Sub UserForm_Initialize()

  57. Dim myFileName As String
  58. Dim myName As String
  59. Dim i As Integer
  60. Dim wbName As String

  61. Application.DisplayAlerts = False
  62. Application.ScreenUpdating = False

  63. 'VBA.ChDir Application.DefaultFilePath                                           '改变打开的默认路径
  64. 'myName = ThisWorkbook.Path & ""

  65. 'SendKeys myName & "{TAB}", True

  66. PP:

  67. With Application.FileDialog(msoFileDialogFolderPicker)
  68.         .InitialFileName = ThisWorkbook.Path & ""
  69. End With
  70. myFileName = Application.GetOpenFilename("Excel工作薄 (*.xls*),*.xls*")

  71. If myFileName = "False" Then
  72.     MsgBox "没有选择文件!请重新选择一个被合并文件!", vbInformation, "取消"
  73.     GoTo PP
  74. Else
  75.     If myFileName = myName & ThisWorkbook.Name Then
  76.         MsgBox "您选择的是合并模板,请重新选择一个被合并文件!"
  77.         GoTo PP
  78.     Else
  79.             With ListView2
  80.             .ColumnHeaders.Clear
  81.             .ListItems.Clear
  82.             .ColumnHeaders.Add , , "选定的被合并工作表", ListView2.Width      '添加列标
  83.             .Gridlines = True
  84.             End With

  85.             With ListView1
  86.             .ColumnHeaders.Clear
  87.             .ListItems.Clear
  88.             .ColumnHeaders.Add , , "请选择被合并工作表,可以多选", ListView1.Width             '添加列标
  89.             .Gridlines = True
  90.             End With
  91.         

  92.    
  93.         Workbooks.Open Filename:=myFileName
  94.         wbName = ActiveWorkbook.Name
  95.         Windows(ActiveWorkbook.Name).Visible = False
  96.       
  97.         For i = 1 To Workbooks(wbName).Worksheets.Count                         '获得被合并工作薄各工作表名称
  98.            ListView1.ListItems.Add , , Workbooks(wbName).Worksheets(i).Name
  99.         Next i
  100.         
  101.         Workbooks(wbName).Close
  102.     End If

  103.    
  104. End If
  105.     CommandButton5.Enabled = False
  106.     CommandButton6.Enabled = False
  107.    

  108. End Sub

复制代码
上面的是useform的代码。这样看着太乱了吧。。。

TA的精华主题

TA的得分主题

发表于 2012-5-19 21:14 | 显示全部楼层
shaowu459 发表于 2012-5-19 21:11
模块中的代码:按钮的代码:上面的是useform的代码。这样看着太乱了吧。。。

哈,这么多代码啊,不会用,等高人附件传上来再说吧

点评

一是我做的比较麻烦,二是有一大块是userform里的代码,合并代码只是第一个其实。  发表于 2012-5-19 21:20

TA的精华主题

TA的得分主题

发表于 2012-5-19 21:34 | 显示全部楼层
shaowu459 发表于 2012-5-19 21:11
模块中的代码:按钮的代码:上面的是useform的代码。这样看着太乱了吧。。。

我看一下好多网友和我的一样,显示
丢失了 Visual Basic 项目。
丢失了 ActiveX 控件。
您看一下1楼是不是你上传时就有错误

点评

我这里都是运行正常的。出现这个错误就是因为我是英文版做的,且有一些控件可能是版本不一样。2003版的我应该在我家里中文电脑上运行过,应该是可以的  发表于 2012-5-19 21:35

TA的精华主题

TA的得分主题

发表于 2012-5-19 21:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shaowu459 发表于 2012-5-19 21:11
模块中的代码:按钮的代码:上面的是useform的代码。这样看着太乱了吧。。。

哈,那期待上传一个03中文版的

点评

恩,有空了再看看。。。呵呵  发表于 2012-5-19 21:45

TA的精华主题

TA的得分主题

发表于 2012-5-20 10:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-6-16 21:53 | 显示全部楼层
更新2003版的出现了下列情况:
丢失了 Visual Basic 项目。
丢失了 ActiveX 控件。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-6-16 22:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yangang730105 发表于 2012-6-16 21:53
更新2003版的出现了下列情况:
丢失了 Visual Basic 项目。
丢失了 ActiveX 控件。

我也没辙了。英文系统做的别人打不开。。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 09:23 , Processed in 0.035199 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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