ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 根据分割线把文件拆分成不同的工作簿

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-14 13:27 | 显示全部楼层
》》》》》》》》》》》》》

03A 根据分割线拆分成不同工作薄.rar

47.17 KB, 下载次数: 10

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-14 13:42 | 显示全部楼层

非常感谢啊,如果代码有不懂的,请不吝赐教!!

TA的精华主题

TA的得分主题

发表于 2016-1-14 13:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 bajifeng 于 2016-1-14 14:46 编辑

恩,好的,不客气。
如有问题可以跟帖回复。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-1-14 15:15 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-14 16:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
bajifeng 发表于 2016-1-14 13:58
恩,好的,不客气。
如有问题可以跟帖回复。

你好,我刚才仔细注释了下你的代码,代码没有问题,还有一个小要求,能否在每个分表里面加上对应的LOGO图片呢,谢谢


'===========================================
Sub SplitIntoWorkbookByLines()
    Dim r(1 To 100, 1 To 2)
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set wbo = ActiveWorkbook
    s = Array("-------", "INVOICE #") '常量数组
    pth = ThisWorkbook.Path & "\"     '该文件路径
    For j = 0 To UBound(s)
        n = 0
        '-------用find 方法  循环找到虚线和invoice#的行号赋给二维数组r-------------------------------------------
        Set c = Cells.Find(what:=s(j), LookIn:=xlValues, lookat:=xlPart)
        If Not c Is Nothing Then
            addr = c.Address
            Do
                n = n + 1  '计数
                r(n, j + 1) = c.Row
                Set c = Cells.FindNext(c)
            Loop While addr <> c.Address
        End If
        '-----------------------------------------------------------
    Next
    cn = 38 '报表列数
    ReDim cw(1 To cn) '定义一维数组cw装各个列宽
    For i = 1 To cn
        cw(i) = Columns(i).ColumnWidth
    Next
   
    For i = 1 To n
        fnm = wbo.Sheets(1).Cells(r(i, 2), "w") & ".xlsx" 'Cells(r(i, 2), "w")对应invoice#,命名文件,赋给变量fnm
        If i = 1 Then
            sr = 1
        Else
            sr = r(i - 1, 1) + 1  '上一个虚线的行号+1 作为开始行号
        End If
        er = r(i, 1)       '结束行号,如果不要虚线设置为 r(i, 1) - 1
        wbo.Sheets(1).Range(Cells(sr, "a"), Cells(er, "al")).Copy '复制开始行到结束行的区域
        Set wbn = Workbooks.Add '添加工作簿,为活动工作簿
        ActiveSheet.[a1].PasteSpecial '粘贴到该工作簿
   
        For k = 1 To cn
            Columns(k).ColumnWidth = cw(k) '设置对应的列宽
        Next
        ActiveWindow.DisplayGridlines = False '网线不显示
        wbn.SaveAs pth & fnm '另存到 本工作簿的路径,命名为fnm
        wbn.Close False ' 关掉活动工作簿,不保存
    Next
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2016-1-14 16:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
传一下你的Logo原始图片吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-14 16:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
bajifeng 发表于 2016-1-14 16:20
传一下你的Logo原始图片吧。

请查看附件,感谢
logo.JPG

TA的精华主题

TA的得分主题

发表于 2016-1-14 16:51 | 显示全部楼层
  1. Sub 根据分割线拆分成不同工作薄()    'bajifeng
  2. 'http://club.excelhome.net/thread-1254084-1-1.html
  3. Dim r(1 To 100, 1 To 2)
  4. Set wbo = ActiveWorkbook
  5. s = Array("-------", "INVOICE #")
  6. pth = ThisWorkbook.Path & ""

  7. For j = 0 To UBound(s)
  8.     n = 0
  9.     Set c = Cells.Find(what:=s(j), LookIn:=xlValues, lookat:=xlPart)
  10.     If Not c Is Nothing Then
  11.         addr = c.Address
  12.         Do
  13.             n = n + 1
  14.             r(n, j + 1) = c.Row
  15.             Set c = Cells.FindNext(c)
  16.         Loop While addr <> c.Address
  17.     End If
  18. Next

  19. cn = 38
  20. ReDim cw(1 To cn)
  21. For i = 1 To cn
  22.     cw(i) = Columns(i).ColumnWidth
  23. Next

  24. For i = 1 To n
  25.     fnm = wbo.Sheets(1).Cells(r(i, 2), "w") & ".xlsx"
  26.     If i = 1 Then
  27.         sr = 1
  28.     Else
  29.         sr = r(i - 1, 1) + 1
  30.     End If
  31.     er = r(i, 1)       '如果不要虚线设置为 r(i, 1) - 1
  32.     wbo.Sheets(1).Range(Cells(sr, "a"), Cells(er, "al")).Copy
  33.     Set wbn = Workbooks.Add
  34.     ActiveSheet.[a1].PasteSpecial

  35.     For k = 1 To cn
  36.         Columns(k).ColumnWidth = cw(k)
  37.     Next
  38.     ba
  39.     ActiveWindow.DisplayGridlines = False
  40.     wbn.SaveAs pth & fnm
  41.     wbn.Close False
  42. Next
  43. End Sub
  44. Private Sub ba() 'bajifeng
  45. pth = ThisWorkbook.Path & ""
  46. With ActiveSheet
  47.     .Pictures.Insert pth & "logo.jpg"
  48.     .Pictures.Left = Range("ad2").Left
  49.     .Pictures.Top = Range("ad2").Top
  50. End With
  51. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-1-14 16:51 | 显示全部楼层
本帖最后由 bajifeng 于 2016-1-14 16:56 编辑

已经按照您的要求插入图片 并定位

03A 根据分割线拆分成不同工作薄v2.rar

45.85 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-14 17:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
bajifeng 发表于 2016-1-14 16:51
已经按照您的要求插入图片 并定位

感谢热心帮助啊!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 04:28 , Processed in 0.033835 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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