ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 排版

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-9-14 10:36 | 显示全部楼层 |阅读模式
排版能实现,还有一些问题,见“文夹”中“排版汇编”文档,请大神相助

文夹.zip

56.97 KB, 下载次数: 19

TA的精华主题

TA的得分主题

发表于 2016-9-14 12:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主,内容不能居左,应该“两端对齐”!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-14 12:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2016-9-14 12:17
楼主,内容不能居左,应该“两端对齐”!

谢谢,内容就是按正常排版格式,主要是排版之后出现几个问题。

TA的精华主题

TA的得分主题

发表于 2016-9-14 13:34 | 显示全部楼层
楼主:
* 请首先备份好要处理的文档/文件夹。
* 再请删除要处理的文件夹中的“排版汇总”文档。
* 试试我的宏吧(也可以不用我的宏,而参考一下),双击选定要处理的文件夹。
  1. Sub test()
  2.     On Error Resume Next
  3.     Dim fd As FileDialog, i As Long, doc As Document, p As String, t As Long, s As Long
  4.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  5.     If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub
  6.     Set fd = Nothing
  7.     If MsgBox("是否处理文件夹 " & p & " ?", vbYesNo + vbExclamation, "循环遍历文件夹_通用") = vbNo Then Exit Sub
  8.     Kill p & "排版汇总.doc"
  9.     With Application.FileSearch
  10.         .NewSearch
  11.         .LookIn = p
  12.         .SearchSubFolders = True
  13.         .FileName = "*.doc"
  14.         If .Execute > 0 Then
  15.             For i = 1 To .FoundFiles.Count
  16.                 Set doc = Documents.Open(FileName:=.FoundFiles(i))
  17. '                doc.Content.Font.Color = wdColorRed '处理单个文档(通用)
  18. '''
  19.                 '删除手动换行符和假段落标记
  20.                 doc.Content.Find.Execute findtext:="^l", replacewith:="^p", Replace:=wdReplaceAll
  21.                 doc.Content.Find.Execute findtext:="^13", replacewith:="^p", Replace:=wdReplaceAll

  22.                 '删除段落首尾空格
  23.                 '全选/居中/两端对齐
  24.                 '[方法1]
  25.                 '    SendKeys "^(aej)", True
  26.                 '[方法2]
  27.                 '    Selection.WholeStory
  28.                 '    Application.Run "CenterPara"
  29.                 '    Application.Run "LeftPara"
  30.                 '[方法3]
  31.                 Selection.WholeStory
  32.                 CommandBars.FindControl(ID:=122).Execute
  33.                 CommandBars.FindControl(ID:=123).Execute

  34.                 '删除空行
  35.                 Dim j As Paragraph
  36.                 For Each j In ActiveDocument.Paragraphs
  37.                     If Len(j.Range) = 1 Then j.Range.Delete
  38.                 Next

  39.                 '自动编号转文本
  40.                 doc.Content.ListFormat.ConvertNumbersToText
  41.                 doc.Content.Find.Execute findtext:="^t", replacewith:="", Replace:=wdReplaceAll

  42.                 '正文排版
  43.                 Selection.WholeStory
  44.                 Selection.ClearFormatting
  45.                 Selection.ClearFormatting
  46.                 With Selection.Font
  47.                     .Size = 12
  48.                     .Kerning = 0
  49.                     .DisableCharacterSpaceGrid = True
  50.                 End With
  51.                 With Selection.ParagraphFormat
  52.                     .LineSpacing = LinesToPoints(1.25)
  53.                     .CharacterUnitFirstLineIndent = 2
  54.                     .AutoAdjustRightIndent = False
  55.                     .DisableLineHeightGrid = True
  56.                 End With
  57.             
  58.                 doc.Paragraphs(1).Range.Style = wdStyleHeading2
  59.                 If doc.Paragraphs(2).Range Like "[!作者:]*" Then doc.Paragraphs(2).Range.InsertBefore Text:="作者:"
  60.                 doc.Paragraphs(2).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
  61.                 doc.Paragraphs(2).Range.InsertAfter Text:=vbCr
  62. '''
  63.                 doc.Close savechanges:=wdSaveChanges
  64.             Next i
  65. '            MsgBox "处理完毕!共处理 " & .FoundFiles.Count & " 个文件!", vbOKOnly + vbExclamation, "循环遍历文件夹_通用"
  66.         Else
  67.             MsgBox "未发现文件!", vbOKOnly + vbCritical, "循环遍历文件夹_通用"
  68.         End If
  69.     End With

  70. '循环遍历文件夹_批量合并
  71.     t = 0
  72.     s = 1
  73.     Documents.Add
  74.     With Application.FileSearch
  75.         .NewSearch
  76.         .LookIn = p
  77.         .SearchSubFolders = True
  78.         If t = 0 Then .FileName = "*.doc" Else .FileName = "*.txt"
  79.         If .Execute > 0 Then
  80.             For i = 1 To .FoundFiles.Count
  81.                 If t = 0 Then Set doc = Documents.Open(FileName:=.FoundFiles(i)) Else Set doc = Documents.Open(FileName:=.FoundFiles(i), Encoding:=936)
  82.                 doc.Content.Copy
  83.                 doc.Close
  84.                 Selection.EndKey Unit:=wdStory
  85.                 Selection.Paste
  86.                 ActiveDocument.Characters(1).Copy
  87.                 If s = 1 Then Selection.InsertBreak Type:=wdPageBreak
  88.             Next i
  89.             If s = 1 Then Selection.TypeBackspace: Selection.TypeBackspace Else Selection.TypeBackspace
  90.             MsgBox "文档已经保存!退出即可!(保存路径:" & p & ")" & "共合并 " & .FoundFiles.Count & " 个文件!", vbOKOnly + vbExclamation, "循环遍历文件夹_批量合并"
  91.         Else
  92.             MsgBox "未发现文件!", vbOKOnly + vbCritical, "循环遍历文件夹_批量合并"
  93.         End If
  94.     End With
  95.     ActiveDocument.SaveAs FileName:=p & "\排版汇总(最新)" & ".doc"
  96.     Selection.HomeKey Unit:=wdStory
  97.    
  98. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-14 14:09 | 显示全部楼层
413191246se 发表于 2016-9-14 13:34
楼主:
* 请首先备份好要处理的文档/文件夹。
* 再请删除要处理的文件夹中的“排版汇总”文档。

辛苦了,中午这么快写得简洁。问题:1、第二段不一定有“作者”字眼,如果正文也有这二字呢,能否按段落来排;2、通过打开文件夹来选定要排版汇总文档,不一定全部文档。

TA的精华主题

TA的得分主题

发表于 2016-9-14 18:02 | 显示全部楼层
楼主好!代码都是拼凑的;第二段如果是一个大段而不是人名,当然会出错;有选择地选定文档,且应用窗体,我不太会;另外,我觉得你的问题也不必应用窗体,也许你认为应用窗体好。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-15 09:41 | 显示全部楼层
413191246se 发表于 2016-9-14 18:02
楼主好!代码都是拼凑的;第二段如果是一个大段而不是人名,当然会出错;有选择地选定文档,且应用窗体,我 ...

多谢了,能否根据我发的文档代码进行修改,主要问题是文档批量排版后会打开每个文档,怎么直接保存或另存后退出不需打开窗口,试了几回,提示重启office回复文档出错。

TA的精华主题

TA的得分主题

发表于 2016-9-15 23:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主,抛弃你的代码吧!用我的代码,按我 4 楼的回答去做,就 OK 了!(请把代码放到 Normal.dot 中,不要放在 This Document 中。)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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