2007年1月30日星期二

VBA小试牛刀

今天在看一本电子书《诸葛亮的十堂哲学课》时,突然想将其重新编辑成PDF格式。当我将书的第一章内容复制到Word中时才发现字符中混杂了太多的回车符。这时我想起前几天学习的VBA课程,在这里小试牛刀咯。
下面就是我写的一段VBA程序,可以将文本中的多余空行删除。其算法是逐行扫描文档,当发现该行只有一个符号(必为回车符)时就将其删除。
iCount = 0
Dim ps As Paragraph
Dim rngRange As Range
For Each ps In ActiveDocument.Paragraphs
iCount = iCount + 1
Set rngRange = ps.Range

If rngRange.Characters.Count = 1 Then
'MsgBox (rngRange.Characters(1))
rngRange.Delete
End If
Next

但我还没想出如何能删除段末尾的回车符,我不知道如何判断,虽然可以通过
If rngRange.Characters(rngRange.Characters.Count) = Chr(13) Then
来判断段落结尾处的字符是否是回车符,但如果简单删除,则会将原有的段落去除。且这样会引起循环的错误,在进行段落遍历的时候产生错误。
我想到可以用一个数组来存放单个回车符的位置,然后利用原文档中段落间有两个回车符的特点,将单回车符删除就可以了。
下面是代码,其可以在短文档中用,在长文档时还是会有数组溢出。要重新考虑算法咯。
Sub ClearBlankReturnChar()
Dim iCount, iIndex, iParagraphsNum
iCount = 0
iIndex = 0
Dim aLines(10000)

Dim ps As Paragraph
Dim rngRange As Range
For Each ps In ActiveDocument.Paragraphs
iCount = iCount + 1
Set rngRange = ps.Range
If rngRange.Characters.Count > iMaxRangeCount Then
iMaxRangeCount = rngRange.Characters.Count
End If

If rngRange.Characters.Count > 1 Then
iIndex = iIndex + 1
aLines(iIndex) = rngRange.End
End If
Next

For i = 1 To iIndex - 1
Selection.SetRange aLines(i) - i, aLines(i) - i + 1
'MsgBox (i)
Selection.Delete
Next
End Sub

夜已经很深了,早点睡咯!2006年8月13日

0 评论: