1、合并多个Excel工作簿

  1. Sub MergeWorkbooks()
  2. Dim FileSet
  3. Dim i As Integer
  4.  
  5. On Error GoTo
  6. Application.ScreenUpdating = False
  7.  
  8. FileSet = Application.GetOpenFilename(FileFilter:="Excel 2003(*.xls),*.xls,Excel 2007(*.xlsx),*.xlsx", _
  9. MultiSelect:=True, Title:="选择要合并的文件")
  10.  
  11. If TypeName(FileSet) = "Boolean" Then
  12. GoTo ExitSub
  13. End If
  14.  
  15. For Each Filename In FileSet
  16. Workbooks.Open Filename
  17. Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
  18. Next
  19.  
  20. ExitSub:
  21. Application.ScreenUpdating = True
  22.  
  23. End Sub

2、合并一个工作簿下多个一致性SHEET

  1. Function LastRow(sh As Worksheet)
  2. On Error Resume Next
  3. LastRow = sh.Cells.Find(what:="*", _
  4. After:=sh.Range("A1"), _
  5. Lookat:=xlPart, _
  6. LookIn:=xlFormulas, _
  7. SearchOrder:=xlByRows, _
  8. SearchDirection:=xlPrevious, _
  9. MatchCase:=False).Row
  10. On Error GoTo
  11. End Function
  12.  
  13. Sub MergeSheets()
  14. Dim sh As Worksheet
  15. Dim DestSh As Worksheet
  16. Dim Last As Long
  17. Dim shLast As Long
  18. Dim CopyRng As Range
  19. Dim StartRow As Long
  20.  
  21. Application.ScreenUpdating = False
  22. Application.EnableEvents = False
  23.  
  24. '新建“汇总”Sheet
  25. Application.DisplayAlerts = False
  26. On Error Resume Next
  27. ActiveWorkbook.Worksheets("汇总").Delete
  28. On Error GoTo
  29. Application.DisplayAlerts = True
  30. Set DestSh = ActiveWorkbook.Worksheets.Add
  31. DestSh.Name = "汇总"
  32.  
  33. '开始复制的行号,无表头设置为1
  34. StartRow =
  35.  
  36. For Each sh In ActiveWorkbook.Worksheets
  37.  
  38. If sh.Name <> DestSh.Name Then
  39. Last = LastRow(DestSh)
  40. shLast = LastRow(sh)
  41.  
  42. If shLast > And shLast >= StartRow Then
  43.  
  44. Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))
  45.  
  46. If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
  47. MsgBox "超过最大容量!"
  48. GoTo ExitSub
  49. End If
  50.  
  51. CopyRng.Copy
  52. With DestSh.Cells(Last + , "A")
  53. .PasteSpecial xlPasteValues
  54. .PasteSpecial xlPasteFormats
  55. Application.CutCopyMode = False
  56. End With
  57. End If
  58. End If
  59. Next
  60.  
  61. ExitSub:
  62. Application.GoTo DestSh.Cells()
  63. DestSh.Columns.AutoFit
  64. Application.ScreenUpdating = True
  65. Application.EnableEvents = True
  66.  
  67. End Sub

VBA宏 合并EXCEL的更多相关文章

  1. 利用VBA宏解除Excel保护

    复制以下代码并录制宏,运行一次即可. Option Explicit Public Sub AllInternalPasswords() ' Breaks worksheet and workbook ...

  2. C#调用Excel VBA宏

    近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...

  3. [转]C#调用Excel VBA宏

    [转载自]http://www.shangxueba.com/jingyan/95031.html 附上一段原创常用代码 计算列标题字符串 Function CalcColumn(ByVal c As ...

  4. Excel 导出指定行为txt文件(VBA,宏)

    要从Excel 多个sheet内导出指定行为txt文件,懒得用C#了,写个VBA宏 Sub Export() Dim FileName As Variant Dim Sep As String Dim ...

  5. C#调用Excel VBA宏[转载]

    原文地址:https://www.cnblogs.com/heekui/archive/2008/03/30/1129355.html 近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有E ...

  6. 功能区按钮调用Excel、PowerPoint、Word中的VBA宏:RunMacro

    功能区按钮调用Excel.PowerPoint.Word中的VBA宏:RunMacro 众所周知,Excel.PPT.Word文档或加载宏文件中可以写很多过程和函数,调试的过程中当然可以按F8或F5直 ...

  7. 使用VBA批量转换Excel格式,由.xls转换成.xlsx

    问题分析: Excel2007以前的格式是.xls,之后的格式是.xlsx.打开单独的一个Excel文档,使用“另存为”功能,可以很轻松的转换格式.但是面对几百个Excel表这样就太累了,搜索很久,也 ...

  8. 在VBA中调用excel函数

    以前不太会用VBA时,都是在excel中使用函数来计算一些数据.毕竟函数不如代码,效率比较低.所以,就学着怎么在VBA中引用Excel函数.平时我用得比较多的函数就是countif和sumif函数.1 ...

  9. 合并Excel文件

    //合并Excel文件 private void MargeExcelFile(string destFile, string dirPath) { DirectoryInfo dir = new D ...

随机推荐

  1. 阿里巴巴开源技术 WebX

    0. WebX项目目前已开源, 项目开源地址:https://github.com/webx/citrus-sample.git 项目参考文档:http://www.openwebx.org/docs ...

  2. php中的常用数组函数(五)(数组中获取键名集合)

    array_keys($arr, $search_value, $strict); --数组中获取键名的集合. //参数1 要检索的数组:参数2 要检索的键值 默认NULL: 参数3 是否严格比较(= ...

  3. python-ldap实现登录案例

    ldap_config = { 'ldap_path': 'ldap://xx.xx.xx.xx:389', 'base_dn': 'ou=users,dc=ledo,dc=com', 'ldap_u ...

  4. 七个结构模式之代理模式(Proxy Pattern)

    定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...

  5. JAVA多线程之间共享数据BlockingQueue介绍

    在JAVA的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利. ...

  6. struts工程建立配置细节

    ActionForm ActionForm是用于存放表单提交的数据. 1.一个action是否必须配置一个actionForm,可以没有2.一个action是否可以配置多个表单?不可以,最多一个 在j ...

  7. T3 - 构建大型 Web 应用的 JavaScript 框架

    T3 是一个用于构建大型 Web 应用程序的客户端 JavaScript 框架.T3 和大多数的 JavaScript 框架不同.它的意思是一小部分的整体架构,它允许你建立可扩展的客户端代码.T3 应 ...

  8. io.js - 兼容 NPM 平台的 Node.js 新分支

    io.js(JavaScript I/O)是兼容 NPM 平台的 Node.js 新分支,由 Node.js 的核心开发者在 Node.js 的基础上,引入更多的 ES6 特性,它的目的是提供更快的和 ...

  9. 你真的知道setTimeout是如何运行的吗

    大家看下如下代码,猜猜执行结果: var start = new Date; setTimeout(function(){ console.log('时间流逝了:'+(new Date - start ...

  10. Delphi 获取系统时间后格式化输出

    问题:客户现场程序运行提示时间格式不对导致的错误,原因是与开发环境及公司内部测试环境的日期格式不一致: 解决:统一强制转换: //引用单元:SysUtils //目的:实现跨环境兼容不同日期格式,如果 ...