Delphi對Word一些進階操做

  利用VBA 編程,可使許多平常的任務自動完成,使用戶的工做
更有效率。編程

 

一、在啓動時顯示打開對話框函數

   通常狀況下啓動Word,Word 會認爲是建立一個新文檔。若是隻
是想打開一箇舊文檔進行編輯,在Word 啓動時顯示【打開】對話框
能夠節省許多時間。爲此,能夠建立生成一個宏。工具

 

Public Sub openfile()字體

'創建一個宏,使在Word 啓動時運行該宏orm

Dialogs(wdDialogFileOpen).Show對象

End Sub索引

  

   將此代碼加入模板中。爲了使Word 每次啓動時自動執行該宏,
用鼠標右鍵單擊桌面上Word 的快捷方式圖標,顯示其快捷方式屬性,
將「/m OpenFile」加入到「開始」路徑中。這裏運用了一個小技巧:
用「/m」加入「開始」路徑以防止其餘宏在啓動時運行。當懷疑被
Word 宏病毒感染時,也能夠利用加「/m」的方法來進行。rem

 

二、爲文字設置格式文檔

   下面的代碼使用 Selection 屬性來爲選定的文字應用字符和段
落格式。使用 Font 屬性可得到字體格式屬性和方法,使用
Microsoft Word 對象屬性可訪問段落格式屬性和 方法。it

 

With Selection.Font

.Name = "Times New Roman"

.Size = 14

.AllCaps = True

End With

With Selection.ParagraphFormat

.LeftIndent = InchesToPoints(0.5)

.Space1

End With

 


三、將格式應用於某一範圍

   下面的代碼定義一個 Range 對象MyRange,該對象引用活動文檔
的前三個段落。經過使用 Font 屬性和 ParagraphFormat 對象能夠
編排Range(myRange)的格式。

 

Set myRange = ActiveDocument.Range

( Start:=ActiveDocument.Paragraphs ( 1 ) .Range.Start, _

End:=ActiveDocument.Paragraphs(3).Range.End)

With myRange

.Font.Name = "Arial"

.ParagraphFormat.Alignment = wdAlignParagraphJustify

End With

 

四、插入文字並應用字符和段落格式

   下面的代碼在當前文檔的頂部添加單詞【標題】。第一段居中對
齊,在該段落以後添加了半英寸的間距。【標題】設爲 24 磅的【宋
體】字體。

 


Set oRange = ActiveDocument.Range(Start:=0, End:=0)

With oRange

.InsertAfter Text:="標題"

.InsertParagraphAfter

.Font.Name = "宋體"

.Font.Size = 24

End With

With ActiveDocument.Paragraphs(1)

.Alignment = wdAlignParagraphCenter

.SpaceAfter = InchesToPoints(.5)

End With

 

   下面的代碼切換所選內容第一段的段前間距。該宏檢索當前的段
前間距值,若是該值是 12 磅,則刪除段前間距(將SpaceBefore
屬性設置爲0)。若是段前間距不是 12,則將 SpaceBefore 屬性設
置爲 12 磅。

 

Set oParagraph = Selection.Paragraphs(1)

If oParagraph.SpaceBefore = 12 Then

oParagraph.SpaceBefore = 0

Else

oParagraph.SpaceBefore = 12

End If

 

   下面的代碼切換選定文字的加粗格式。

   Selection.Font.Bold = wdToggle

   下面的代碼將左邊距增長 0.5 英寸。PageSetup 對象包含文檔
的全部頁面設置屬性(左邊距、下邊距、紙張大小,等等)。LeftMargin
屬性用來返回並設置左邊距。

 

iMargin = ActiveDocument.PageSetup.LeftMargin

iMargin = iMargin + InchesToPoints(0.5)

ActiveDocument.PageSetup.LeftMargin = iMargin

 


五、編輯文字

   平常工做中,處理文字是最常常用到的事情,本節介紹如何利用
VBA 編程實現編輯文字的自動化。固然,用戶最好是利用錄製宏的辦
法把代碼轉換爲VBA 代碼後再修改,這樣效率高,又不容易出錯。

 

六、從文檔返回文本

   使用Text 屬性能夠返回Range 或 Selection 對象中的文本。下
面的代碼選定下一個格式設爲【標題1】樣式的段落。而後經過
MsgBox 函數顯示 Text 屬性的內容。

 

With Selection.Find

.ClearFormatting

.Style = wdStyleHeading1

.Execute FindText:="", Format:=True, Forward:=True,

Wrap:=wdFindStop

If .Found = True Then MsgBox Selection.Text

End With

 


   下面的指令返回選定文本:

   strText = Selection.Text

   下面的代碼返回活動文檔的第一個單詞。Words 集合中的每一項
是一個 Range 對象,該對象表明一個單詞。

   aFirst = ActiveDocument.Words(1).Text
MsgBox aFirst

   下面的代碼返回活動文檔第一個書籤的相關文本。

 

If ActiveDocument.Bookmarks.Count >= 1 Then

bookText = ActiveDocument.Bookmarks(1).Range.Text

MsgBox bookText

End If

 


七、選定文檔中的文本

   使用 Select 方法能夠選定文檔中的一項。Select 方法對許多對象都是有效的,例如 Bookmark、Field、Range 和 Table 對象。
下面的代碼選定活動文檔中的第一張表格。

   ActiveDocument.Tables(1).Select

   下面的代碼選定活動文檔中的第一個域。

   ActiveDocument.Fields(1).Select


   下面的代碼選定活動文檔中的前四個段落。Range 方法用來建立
一個 Range 對象,該對象引用前四個段落。而後將 Select 方法應
用於 Range 對象。

 

Set myRange = ActiveDocument.Range

( Start:=ActiveDocument.Paragraphs ( 1 ) .Range.Start, _

End:=ActiveDocument.Paragraphs(4).Range.End)

myRange.Select

 

八、在文檔中插入文本

   使用InsertBefore 方法能夠在 Selection 或 Range 對象先後
插入文字。下面的代碼在活動文檔結尾處插入文字。

   ActiveDocument.Content.InsertAfter Text:= the end.
下面的代碼在所選內容前插入文字:

   Selection.InsertBefore Text:=new text

   在使用了InsertBefore 或 InsertAfter 方法以後,Range 或
Selection 會擴展幷包含新的文本。使用 Collapse 方法能夠將
Selection 或 Range 摺疊到開始或結束位置。

   利用InsertAfter 方法可將指定文本插入某一區域或所選內容的
後面。應用本方法能夠擴展原區域或所選內容,使其包含新文本。

   若是應用本方法的區域或所選內容是一個完整的段落,則在段落
結束標記以後插入文本,插入文本將出如今下一段開頭。如要在段
尾插入文本,可先肯定結束點,再從該位置減去 1(因段落標記是
一個字符),以下面的代碼所示:

 

Set Doc = ActiveDocument

Set myRange = Doc.Range ( Start:=Doc.Paragraphs

(1).Range.End - 1, _

End:=Doc.Paragraphs(1).Range.End - 1)

myRange.InsertAfter " the end."


九、修改文檔的某一部分

   Visual Basic 包含一些對象,可用這些對象修改下面的文檔元
素:字符、單詞、句子、段落和節。表11-4 包含了與這些文檔元素
對應的屬性和這些屬性返回的對象。


   使用這些屬性時不帶索引序號,會返回一個相同名稱的集合對
象。例如,Paragraphs 屬性返回 Paragraphs 集合對象。但若是通
過索引序號識別集合中的一項,就只會返回上表中第二列中的對象。
例如,Words(1) 返回一個 Range 對象。在有了一個 Range 對象
以後,可使用這個區域的任何屬性或方法修改該 Range 對象。例
如,下面的代碼將所選內容的第一個單詞複製到剪貼板上。

   Selection.Words(1).Copy

   Paragraphs 和 Sections 集合中的項是該集合的單個成員,而
Range 對象卻不是如此。但 Range 屬性(返回 Range 對象)對
Paragraph 和 Section 對象都是有效的。例如,下面的代碼將活動
文檔的第一個段落複製到剪貼板上。

   ActiveDocument.Paragraphs(1).Range.Copy

   在表11-4 中全部文檔元素屬性對 Document、Selection 和
Range 對象都是有效的。下面的代碼代表瞭如何按照順序引用
Document、Selection 和 Range 對象的這些屬性。

 

   下面的代碼設置活動文檔第一個單詞的大小寫。

   ActiveDocument.Words(1).Case = wdUpperCase

 

   下面的代碼將當前節的下邊距設置爲 0.5 英寸。

 

Selection.Sections ( 1 ) .PageSetup.BottomMargin =

InchesToPoints(0.5)

 

   下面的代碼將活動文檔的字符間距設爲兩倍(Content 屬性返回一個 Range 對象)。

 

Set Doc = ActiveDocument

Set myRange = Doc.Range(Start:=Doc.Words(1).Start,

_

End:=Doc.Words(3).End)

 

 

Set Doc = ActiveDocument

Set myRange = Doc.Range ( Start:=Doc.Paragraphs

(2).Range.Start, _

End:=Doc.Paragraphs(3).Range.End)       

 

   ActiveDocument.Content.ParagraphFormat.Space2

   修改一組文檔元素:

   要修改由一組文檔元素(字符、單詞、句子、段落或節)組成一
定區域的文字,就須要建立一個 Range 對象。Range 方法根據開始
和結束位置可建立 Range 對象。例如,下面的指令建立一個 Range
對象,該對象引用活動文檔的前十個字符。

   Set myRange = ActiveDocument.Range(Start:=0, End:=10)
使用 Range 對象的 Start 和 End 屬性,能夠建立一個新的Range 對象,該對象引用一組文檔元素。例如,下面的指令建立一
個 Range 對象(myRange),該對象引用活動文檔的前三個單詞。


   下面的代碼建立一個 Range 對象(aRange),該對象從第二段
的開頭開始,到第三段以後結束。

 

Set Doc = ActiveDocument

Set myRange = Doc.Range ( Start:=Doc.Paragraphs

(2).Range.Start, _

End:=Doc.Paragraphs(3).Range.End)

 

十、斷定是否選定某一文本

   Selection 對象的 Type 屬性返回有關所選內容的信息。若是所
選內容是插入點,則下面的代碼顯示一條信息。

   If Selection.Type = wdSelectionIP Then MsgBox Nothing
is selected

 

十一、折迭所選內容或範圍

   使用 Collapse 方法能夠將 Selection 或 Range 對象折迭到開
始或結束位置。下面的代碼在所選內容的開頭將所選內容摺疊爲一
個插入點。

   Selection.Collapse Direction:=wdCollapseStart

   下面的代碼將 myRange 對象摺疊到結束位置(在第一個單詞之
後)。

   Set myRange = ActiveDocument.Words(1)

   myRange.Collapse Direction:=wdCollapseEnd

 

十二、擴展所選內容或範圍

   下面的代碼使用 MoveEnd 方法將所選內容的結尾向前擴展以多
包含三個單詞。MoveLeft、MoveRight、MoveUp 和 MoveDown 方法
也能夠用來擴展 Selection 對象。

   Selection.MoveEnd Unit:=wdWord, Count:=3

   下面的代碼使用 MoveEnd 方法擴展 oRange,以包含活動文檔的
前三個段落。 


   Set oRange = ActiveDocument.Paragraphs(1).Range

   oRange.MoveEnd Unit:=wdParagraph, Count:=2

 

1三、修改文字

   經過更改某一範圍中的內容可更改現有的文字。下面的指令經過
將 Text 屬性設置爲good ,修改活動文檔的第一個單詞。

   ActiveDocument.Words(1).Text = good

   也可使用 Delete 方法刪除現有文字,而後使用 InsertAfter
或 InsertBefore 方法插入新文字。下面的代碼刪除活動文檔的第
一段,並插入新文字。

 

Set myRange = ActiveDocument.Paragraphs(1).Range

With myRange

.Delete

.InsertAfter Text:="New text"

.InsertParagraphAfter

End With

 


1四、查找並替換文字或格式

   Find 和 Replacement 對象具備查找和替換功能。Find 對象對
Selection 和 Range 對象有效。是否從 Selection 或 Range 對象
訪問 Find 對象,會使查找操做略有不一樣。

   1.查找並選定文字

   若是是從Selection 對象訪問Find 對象,當找到搜索條件時,
就會更改所選內容。下面的代碼選定下一次出現的「你好」。若是
到達文檔結尾尚未找到「你好」,則中止搜索。

 

With Selection.Find

.Forward = True

.Wrap = wdFindStop

.Text = "你好"

.Execute

End With

 

   Find 對象包含各類屬性,這些屬性對應於【編輯】菜單【查找命令的【查找並替換】對話框中的選項。能夠設置 Find 對象的單個屬性,或者使用 Execute 方法及參數,以下例所示。       

   Selection.Find.Execute FindText:= 你好,
Forward:=True, Wrap:=wdFindStop

   '查找文字,但並不更改所選內容


   若是是從 Range 對象訪問 Find 對象,則當找到搜索條件時,
不更改所選內容,可是會從新定義 Range。下面的代碼在活動文檔中定位第一次出現的【粗體】。若是找到了,則從新定義該範圍,
並將加粗格式應用於【粗體】。

 

With ActiveDocument.Content.Find

.Text = "粗體"

.Forward = True

.Execute

If .Found = True Then .Parent.Bold = True

End With


   下面的代碼使用帶有參數的 Execute 方法,進行的操做與上例
相同。

 

Set myRange = ActiveDocument.Content

myRange.Find.Execute FindText:="粗體", Forward:=True

If myRange.Find.Found = True Then myRange.Bold = True


1五、使用 Replacement 對象

   Replacement 對象表明查找和替換操做的替換條件。Replacement
對象的屬性和方法對應於【編輯】菜單【查找和替換】對話框中的
選項。

   Replacement 對象對 Find 對象是有效的。下面的代碼將全部的hi替換爲【你好】。因爲 Find 對象是經過 Selection 對象訪問
的,因此當找到搜索條件時,會更改所選內容。

 

With Selection.Find

.ClearFormatting

.Text = "hi"

.Replacement.ClearFormatting

.Replacement.Text = "你好"

.Execute Replace:=wdReplaceAll, Forward:=True,

Wrap:=wdFindContinue

End With

   下面的代碼從活動文檔中刪除加粗格式。Find 對象的 Bold 屬
性爲 True,而Replacement 對象的 Bold 屬性爲 False。爲了查找
並替換格式,需將查找並替換的文字替換爲空字符(),並將
Execute 方法的 Format 參數設置爲 True。因爲 Find 對象是經過
Range 對象訪問的,因此不更改所選內容(Content 屬性返回 Range
對象)。

 

With ActiveDocument.Content.Find

.ClearFormatting

.Font.Bold = True

With .Replacement

.ClearFormatting

.Font.Bold = False

End With

.Execute FindText:="", ReplaceWith:="",

Format:=True, Replace:=wdReplaceAll

End With


1六、處理其餘各類雜務

   1.更改視圖

   View 對象包含窗口或窗格的視圖特性的屬性和方法(所有顯示、
顯示域底紋、顯示錶格虛框等)。下面的代碼將視圖更改成頁面視
圖。

   ActiveWindow.View.Type = wdPageView

   2.設置頁眉或頁腳中的文字

   HeaderFooter 對象是由 Headers、Footers 和 HeaderFooter 屬
性返回的。下面的代碼更改當前頁面的頁腳的文字。

 

ActiveWindow.View.SeekView = wdSeekCurrentPageHeader

Selection.HeaderFooter.Range.Text = "頁眉文字"

 

   本代碼建立一個 Range 對象(oRange),該對象引用活動文檔
第一節的基本頁腳。設置了 Range 對象以後,刪除現有的頁腳文字。
向該頁腳添加 FILENAME 域,後接兩個製表位和 AUTHOR 域。

Set oRange = ActiveDocument.Sections ( 1 ) .Footers

(wdHeaderFooterPrimary).Range

With oRange

.Delete

.Fields.Add Range:=oRange, Type:=wdFieldFileName,

Text:="\p"

.InsertAfter Text:=vbTab & vbTab

.Collapse Direction:=wdCollapseStart

.Fields.Add Range:=oRange, Type:=wdFieldAuthor

End With

 

1七、設置選項 

   Options 對象包含的屬性對應於【工具】菜單【選項】對話框中
各項。下面的代碼設置 Word 應用程序的三個選項。

 

With Options

.AllowDragAndDrop = True

.ConfirmConversions = False

.MeasurementUnit = wdPoints

End With

 

1八、更改文檔版面

   PageSetup 包含文檔的全部頁面設置屬性(左邊距、下邊距、紙
張大小等等)。下面的代碼設置活動文檔的頁邊距。

 

With ActiveDocument.PageSetup

.LeftMargin = InchesToPoints(0.75)

.RightMargin = InchesToPoints(0.75)

.TopMargin = InchesToPoints(1.5)

.BottomMargin = InchesToPoints(1)

End With


1九、循環遍歷文檔各段

   本代碼循環遍歷活動文檔的全部段落。若是某個段落的段前間距
爲 12 磅,則本代碼將段前間距改成 24 磅。

 

   For Each aPara In ActiveDocument.Paragraphs

   If aPara.SpaceBefore = 12 Then oPara.SpaceBefore =       

24

Next aPara

 

20、自定義菜單和工具欄

   CommandBar 對象同時表明菜單和工具欄。使用一個菜單或工具
欄名稱的 CommandBars 屬性能夠返回單個的 CommandBar 對象。
Controls 屬性返回一個 CommandBarControls 對象,該對象引用指
定工具欄上的項。下面的代碼向【工具】菜單添加【字數統計】命
令。

 

CustomizationContext = NormalTemplate

CommandBars ( "Tools" ) .Controls.Add

Type:=msoControlButton, ID:=792, _

Before:=6

下面的代碼向【格式】工具添加【雙下劃線】命令。

CustomizationContext = NormalTemplate

CommandBars ( "Formatting" ) .Controls.Add

Type:=msoControlButton, ID:=60, _

Before:=7         

相關文章
相關標籤/搜索