|
|

楼主 |
发表于 2011-12-10 02:18
|
显示全部楼层
谢谢各位!3Q!—— 11楼代码不太懂,对于删除空行、段首空格、段尾空格(这里所谓的空格包括:半角空格、全角空格‘、制表符及那个圆圈空格,也许叫不间断空格吧,不太清楚),我目前的四个宏:删除段首空格、删除段尾空格、删除空行及删除段首空格(特例)已经较完美地解决了,但对于前几天那个伪段落标记(我叫它 假回车符,诡异回车符,真回车符以 Word 中的段落标记为准),我是头一次遇到,也不知它叫什么,也不知是怎么来的,我处理过很多文档,却从来没遇到过它!现在我把我的 Word 2003 通用模板 中,“一键排版”宏的代码部分地呈现上来,并且把前面提到的四个宏综合了一下(并不想用它,只是作为演示及回应各位的回答),参见下面:
Sub 删除空行及段首段尾空格()
' 删除段首空格、删除段尾空格、删除空行及删除段首空格(特例)综合版——仅作演示及回应,并不想付诸应用,仍然用各自单个过程
Dim i As Paragraph, n As Long
For Each i In ActiveDocument.Paragraphs
For n = 1 To i.Range.Characters.Count
' 删除段首空格
If i.Range Like " *" Or i.Range Like " *" Or i.Range Like Chr(9) & "*" Then
i.Range.Characters(1).Delete
' 删除段尾空格
ElseIf i.Range Like "* " & Chr(13) Or i.Range Like "* " & Chr(13) Or i.Range Like "*" & Chr(9) & Chr(13) Then
Do
i.Range.Select
Selection.EndKey Unit:=wdLine
Selection.TypeBackspace
Loop Until Asc(i.Range.Characters(i.Range.Characters.Count - 1)) <> 32 Or Asc(i.Range.Characters(i.Range.Characters.Count - 1)) <> 9
' 删除空行(空段落)
ElseIf Len(i.Range) = 1 Then
i.Range.Delete
Else
Exit For
End If
Next n
' 删除段首空格(特例)
If Left(i.Range.Text, 2) = " “" Or Left(i.Range.Text, 2) = " (" Then
i.Range.Select
Selection.HomeKey Unit:=wdLine
Selection.Delete Unit:=wdCharacter, Count:=1
End If
Next
End Sub
Sub 一键排版()
ActiveDocument.Content.Find.Execute findtext:="^l", replacewith:="^p", Replace:=wdReplaceAll ' 换行符全部替换为段落标记
ActiveDocument.Content.Find.Execute findtext:="^13", replacewith:="^p", Replace:=wdReplaceAll ' 真假回车符全部替换为真回车符
ActiveDocument.Content.Find.Execute findtext:=" ", replacewith:=" ", Replace:=wdReplaceAll ' 圆圈空格全部替换为半角空格
删除段首空格
删除段尾空格
删除空行
删除段首空格_特例
A4纵向_页面设置
Selection.WholeStory
清除格式
正文样式
标题2自动设置
标题3自动设置
标题1自动判断
换行和分页
称呼
自动调整1
落款预处理
落款自动设置
自动调整
End Sub
*** 删除空行 这个宏,经试验,只能删除纯回车符或有附带有半角空格的回车符,对于全角空格和制表符及那个伪段落标记(假回车符)均不奏效,但无妨,配合 删除段首段尾空格宏 已经能解决问题,达到目的了。但这个宏的 4 句代码,却教会了我“循环遍历段落法”这个法宝,我可以用这个方法解决一些与段落和字符有关的问题,比如:标题2、3、4自动设置,还有[第一节]加粗 的处理,均是如此,意义太重大了!所以,我称这个过程为“循环遍历法”经典代码!——此时,TRIM函数已经没用了,因为它对付不了全角空格和制表符,所以,这个第3句核心代码可以写作:If Len(i.Range) = 1 Then i.Range.Delete,但为了保持原貌,我并不想对这个宏做任何改变了。——此宏与 守柔版主 所写的一段代码类似,因为这段宏是我摘自网络,并且稍加精简,形成了简洁的 4 句代码。所以,是不是 守版 编写的不太清楚,但我是特别喜欢 i 这个一个字母的变量。
Sub 删除空行()
Dim i As Paragraph
For Each i In ActiveDocument.Paragraphs
If Len(Trim(i.Range)) = 1 Then i.Range.Delete
Next
End Sub |
评分
-
1
查看全部评分
-
|