ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助大神帮我拆分工资表按每个部门拆分成一个文档,谢谢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-1-15 17:03 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 cycyaya 于 2017-1-15 17:17 编辑


    大家好,最近工作上有个难题,想请教一下大家。我手上有一个word工资表,里面有100多个部门的数据。现在想实现按部门导出数据生成单独的word文件。就是每个部门一个word文件,100多个,每个文档都以第一行部门名字命名,例如:“某某部门 在 职 人 员 工 资 发 放 明 细 表.doc"。可以实现吗?请教群里的大神!谢谢了!如能解决,感激不尽。附件是样版,为了方便,只保留了一些举例的数据。

我在论坛里找到一个使用标题分离成一个个文档的方法。按理应该可以实现

http://club.excelhome.net/thread-635894-1-1.html   就是参考的这个方法

确实是可以分离了,但是分享后的数据表格格式却是乱的,而且代码运行到最后会出差,不知道为什么。

有没有大神帮我看看,泪奔!~

以下是我用的代码:

Sub 按标题拆分文档()
Dim myDoc As Document, mytitle As String, a As String, i As Byte
Dim lngStart As Long, lngEnd As Long, myStart As Long, n As Integer
Application.ScreenUpdating = False
Set myDoc = ActiveDocument
myDoc.ActiveWindow.WindowState = wdWindowStateMinimize
a = "\/:*?""<>|"
With myDoc.Content.Find
    .ClearFormatting
    .Font.Name = "宋体"   '各独立小文档标题字体
    .Font.Size = 16 '各独立小文档标题字号,16号即三号字体
    .Format = True
    Do While .Execute
        n = n + 1
        With .Parent
            lngStart = .Start
            lngEnd = .Paragraphs(1).Range.End
            .MoveUntil Chr(13), wdBackward
            If n > 1 Then
                Documents.Add.Content.FormattedText = myDoc.Range(IIf(n = 2, 0, myStart), .Start).FormattedText
                ActiveDocument.PageSetup.Orientation = wdOrientLandscape '横向页面
                ActiveDocument.SaveAs myDoc.Path & "\" & mytitle & ".doc"
                'ActiveDocument.SaveAs Replace(myDoc.FullName, ".doc", "") & "_" & n - 1 & ".doc"
                ActiveDocument.Close
            End If
            mytitle = Trim(myDoc.Range(lngStart, lngEnd - 1).Text)
            For i = 1 To Len(a)
                mytitle = Replace(mytitle, Mid(a, i, 1), "")
            Next
            myStart = .Start
            .SetRange lngEnd, lngEnd
        End With
    Loop
    If n > 1 Then
        Documents.Add.Content.FormattedText = myDoc.Range(myStart, myDoc.Content.End).FormattedText
        ActiveDocument.PageSetup.Orientation = wdOrientLandscape '横向页面
        ActiveDocument.SaveAs myDoc.Path & "\" & mytitle & ".doc"
        'ActiveDocument.SaveAs Replace(myDoc.FullName, ".doc", "") & "_" & n & ".doc"
        ActiveDocument.Close
    End If
End With
Application.ScreenUpdating = True
myDoc.ActiveWindow.WindowState = wdWindowStateNormal
MsgBox IIf(n > 1, "已将活动文档拆分并另存为" & n & "个小文档。", "活动文档不具备指定的拆分条件。")

End Sub





2016年10月工资表(样版)word格式.zip (23.44 KB, 下载次数: 0)




TA的精华主题

TA的得分主题

发表于 2017-1-15 19:47 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可以实现,你的想法完全没问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-15 22:08 | 显示全部楼层
duquancai 发表于 2017-1-15 19:47
可以实现,你的想法完全没问题。

大神,能不能帮我测试一下我的代码哪里出错的。为什么生成的文档表格乱了。没有原来的格式。谢谢了!

TA的精华主题

TA的得分主题

发表于 2017-1-15 22:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 duquancai 于 2017-1-15 22:56 编辑
cycyaya 发表于 2017-1-15 22:08
大神,能不能帮我测试一下我的代码哪里出错的。为什么生成的文档表格乱了。没有原来的格式。谢谢了!


那得具体干活写代码啊!很累的!!!修改代码比写代码还累,话说,这代码针对你的问题并不是最佳方案。

TA的精华主题

TA的得分主题

发表于 2017-1-16 14:48 | 显示全部楼层
duquancai 发表于 2017-1-15 22:37
那得具体干活写代码啊!很累的!!!修改代码比写代码还累,话说,这代码针对你的问题并不是最佳方案。

写代码的确容易点,完全按自己思路操作,但修改代码的确很困难,首先要把别人的代码看完,还得理解思路,累死人不填命

TA的精华主题

TA的得分主题

发表于 2017-1-16 15:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cycyaya 发表于 2017-1-15 22:08
大神,能不能帮我测试一下我的代码哪里出错的。为什么生成的文档表格乱了。没有原来的格式。谢谢了!

提供思路及模板!如图所示:
(@LJTMR(@P$TH[4ZP0)WKDT.png

TA的精华主题

TA的得分主题

发表于 2017-1-16 20:17 | 显示全部楼层
  1. Sub 查找配合通配符()
  2. Dim i As Integer, n As Integer, doxt, Document, dox As Document
  3. Dim arr, Brr(1 To 100, 1 To 3)
  4. arr = Array("部门*表", "第[0-9]页,共[0-9]页")
  5. For i = 0 To UBound(arr)
  6.   With ThisDocument.Content.Find
  7.     .Text = arr(i)
  8.     .MatchWildcards = True
  9.     n = 0
  10.     Do While .Execute
  11.       n = n + 1
  12.       If i Mod 2 Then
  13.         Brr(n, 2) = .Parent.End
  14.       Else
  15.         Brr(n, 1) = .Parent.Start
  16.         Brr(n, 3) = .Parent.Text
  17.       End If
  18.     Loop
  19.   End With
  20. Next
  21.   For i = 1 To n
  22.     Set doxt = ThisDocument.Range(Brr(i, 1) - 1, Brr(i, 2))
  23.     doxt.Select
  24.     doxt.Copy
  25.     Set dox = Documents.Add(ThisDocument.FullName)
  26.     With dox
  27.       .Content.Delete
  28.       .Content.Paste
  29.       .SaveAs ThisDocument.Path & "" & Brr(i, 3) & ".docx"
  30.       .Close True
  31.     End With
  32.   Next i
  33.   MsgBox "拆分了 " & n & " 文档"
  34. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-16 21:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-1-16 21:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cycyaya 发表于 2017-1-16 21:07
5555~~

我太笨了,理解不了这些代码。。

你楼上的大神不是给你写了代码了吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-1-16 23:18 | 显示全部楼层

感谢您的回复,试了不知道为何拆分不了。能不能再帮我看看,万分感谢了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 10:56 , Processed in 0.026666 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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