Word VBA學(xué)習(xí)交流資料之二.doc_第1頁
Word VBA學(xué)習(xí)交流資料之二.doc_第2頁
Word VBA學(xué)習(xí)交流資料之二.doc_第3頁
Word VBA學(xué)習(xí)交流資料之二.doc_第4頁
Word VBA學(xué)習(xí)交流資料之二.doc_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Word VBA 學(xué)習(xí)交流資料之二感想:有感于國人的Word水平比較低,尤其是VBA這一塊,本人想請大家一起學(xué)習(xí)VBA,在提高自身的能力同時幫助需要幫助的人。感謝:綠葉的建群之功,也感謝you兄的熱烈支持,更感謝大家的大力支持!學(xué)前必備:Word VBA幫助(2003或別的都行,大體相當(dāng))(沒有也沒有關(guān)系,在這里,大多看到的就是復(fù)制自“幫助”的。)可選工具:金山詞霸(對E文不太懂的人,尤其重要)語法工具:共享區(qū)的“VBA一串通”學(xué)習(xí)方法:“不求甚解”(一開始,不太懂,沒關(guān)系,堅持下去就懂了。)學(xué)習(xí)步驟:看到例子時,復(fù)制到VBE編輯器中運(yùn)行一次,看一下結(jié)果(最好按F8,一步一步地看)必要指出:是“互學(xué)”,錯誤或不妥之處難免!因我也是一邊看幫助,一邊寫。開始之前:高唱國歌(最好能喊:自強(qiáng)不息?。㏒tart:一、通過錄制宏生成代碼如果無法確定要使用的 Visual Basic 方法或?qū)傩裕纱蜷_宏錄制器并進(jìn)行手動操作。宏錄制器會將操作譯成 Visual Basic 代碼。錄制操作完成后,可根據(jù)需要修改代碼。例如,如果無法確定實(shí)現(xiàn)段落縮進(jìn)的屬性或方法,可執(zhí)行下列操作:1. 在“工具”菜單上,指向“宏”,然后單擊“錄制新宏”。 2. 如果需要,可更改默認(rèn)的宏名稱,然后單擊“確定”啟動錄制器。 3. 在“格式”菜單上,選定“段落”。 4. 更改段落左縮進(jìn)的值,然后單擊“確定”。 5. 單擊“停止錄制”工具欄上的“停止錄制”按鈕。 6. 在“工具”菜單上,指向“宏”,然后單擊“宏”。 7. 從步驟 2 中選擇宏的名稱,然后單擊“編輯”按鈕。 查看 Visual Basic 代碼來確定對應(yīng)于段落左縮進(jìn)的屬性(LeftIndent 屬性)。將插入點(diǎn)置于 LeftIndent 之中,并按 F1 或單擊“幫助”按鈕。在幫助主題中,可以查看示例以及支持 LeftIndent 屬性的對象(單擊“應(yīng)用于”)。(從上面可以看出,錄制宏是我們認(rèn)識未知對象的很好方法之一,同時,也知道我為什么要大家裝“金山詞霸”的原因!如果你這個單詞不認(rèn)識,你怎么知道他是“左縮進(jìn)”?當(dāng)然,也有方法:就是把這個值設(shè)為一個比較特殊的值,再打特殊值所對應(yīng)的屬性)說明錄制的宏使用 Selection 屬性返回 Selection 對象。例如,下列指令將所選段落縮進(jìn) 0.5 英寸。Sub IndentParagraph() Selection.ParagraphFormat.LeftIndent = InchesToPoints(0.5)End Sub您也可以修改錄制的宏并與 Range 對象一起使用。(我們在日常的使用中經(jīng)常注意到:在使用“本機(jī)上的模板”是的向?qū)Ь痛罅渴褂昧薙election對象,而不是Range對象!難道說微軟有更新層次的考慮?我想可能是Selection對象更穩(wěn)定,跨版本能力更強(qiáng)吧?。┒?、修改錄制的 Visual Basic 宏宏錄制器是查找所需的 Visual Basic 方法和屬性的非常方便的工具。如果不知道使用何種屬性或方法,可打開宏錄制器,手動執(zhí)行操作。宏錄制器會將操作譯為 Visual Basic 代碼。但錄制宏具有一些限制條件。您不能錄制下列內(nèi)容:條件分支 變量指定 循環(huán)結(jié)構(gòu) 自定義用戶窗體 出錯處理 用鼠標(biāo)選定的文字(必須使用組合鍵) 若要增強(qiáng)宏的功能,可能需要修改錄制到模塊中的代碼。刪除 Selection 屬性使用宏錄制器創(chuàng)建的宏取決于所選內(nèi)容。在大多數(shù)錄制的宏指令的開頭,可以看到“Selection”。錄制的宏使用 Selection 屬性返回 Selection 對象。例如,下列示例將所選內(nèi)容移動至 Temp 書簽,并在書簽之后插入文字。Sub Macro1() Selection.Goto What:=wdGotoBookmark, Name:=Temp Selection.MoveRight Unit:=wdCharacter, Count:=1 相當(dāng)于選中后按一個鍵盤的右方向鍵 Selection.TypeText Text:=New textEnd Sub這個宏雖然可以完成任務(wù),但是有一些缺點(diǎn)。首先,如果文檔中沒有一個名為 Temp 的書簽,該宏將導(dǎo)致出錯。其次,該宏可能不正確地移動所選內(nèi)容。修改這個宏,使其不再使用 Selection 對象,就可解決上述兩個問題。以下就是經(jīng)修改后的宏:Sub MyMacro()If ActiveDocument.Bookmarks.Exists(Temp) = True Then endloc = ActiveDocument.Bookmarks(Temp).End ActiveDocument.Range(Start:=endloc, _ End:=endloc).InsertAfter New text_就是續(xù)行的意思End IfEnd SubExists 方法用于檢查是否存在名為 Temp 的書簽。如果找到該書簽,則用 End 屬性返回該書簽結(jié)束字符的位置。最后使用 Range 方法返回一個引用書簽結(jié)束位置的 Range 對象,以使用 InsertAfter 方法插入文字。有關(guān)定義 Range 對象的詳細(xì)信息,請參閱處理 Range 對象。使用 WithEnd With可使用 WithEnd With 結(jié)構(gòu)簡化引用相同對象的宏指令。例如,在文檔頂部添加標(biāo)題時,將錄制下面的宏。Sub Macro1() Selection.HomeKey Unit:=wdStory Selection.TypeText Text:=Title Selection.ParagraphAlignment.Alignment = wdAlignParagraphCenterEnd Sub每個指令都使用 Selection 屬性返回一個 Selection 對象??梢院喕@個宏,這樣只需使用一次 Selection 屬性。Sub MyMacro() With Selection .HomeKey Unit:=wdStory .TypeText Text:=Title .ParagraphAlignment.Alignment = wdAlignParagraphCenter 上面那句是原幫助中的,但肯定是筆誤!微軟沒看出?! .ParagraphFormat.Alignment = wdAlignParagraphCenter End WithEnd Sub不使用 Selection 對象也可以完成相同的任務(wù)。下面的宏在活動文檔的開頭使用 Range 對象來完成相同的任務(wù)。Sub MyMacro() With ActiveDocument.Range(Start:=0, End:=0) .InsertAfter Title .ParagraphAlignment.Alignment = wdAlignParagraphCenter 上面那句是原幫助中的,但肯定是筆誤!微軟沒看出?! .ParagraphFormat.Alignment = wdAlignParagraphCenter End WithEnd Sub刪除不必要的屬性如果錄制了一個關(guān)于在對話框中選擇選項(xiàng)的宏,即使只更改一個或兩個選項(xiàng),宏錄制器也會記錄該對話框中的所有選項(xiàng)的設(shè)置。如果不希望更改所有的選項(xiàng),可從錄制的宏中刪除不必要的屬性。下面錄制的宏包含“段落”對話框的一些選項(xiàng)(單擊“格式”菜單可顯示該對話框的所有信息)。Sub Macro1() With Selection.ParagraphFormat .LeftIndent = InchesToPoints(0) 左縮進(jìn)0英寸 .RightIndent = InchesToPoints(0) 右縮進(jìn)0英寸 .SpaceBefore = 6 段前距6磅 .SpaceAfter = 6 段后距6磅,下面不寫了! .LineSpacingRule = 0 .Alignment = wdAlignParagraphLeft .WidowControl = True .KeepWithNext = False .KeepTogether = False .PageBreakBefore = False .NoLineNumber = False .Hyphenation = True .FirstLineIndent = InchesToPoints(0) .OutlineLevel = 10 End WithEnd Sub但是,如果只需更改段前和段后間距,可將宏更改為:Sub MyMacro() With Selection.ParagraphFormat .SpaceBefore = 6 .SpaceAfter = 6 End WithEnd Sub因?yàn)橹辉O(shè)置了較少的屬性,所以簡化后的宏運(yùn)行得更快。運(yùn)行結(jié)果只更改選定段落的段前和段后的間距,所有其他設(shè)置都沒有改變。(注意:如果你是一個喜歡亂動的人,還是要上面吧,但他的速度肯定沒有下面的快,但他的適合環(huán)境更大.更所謂忠孝難兩全啊-)刪除不必要的參數(shù)當(dāng)宏錄制器記錄一個方法時,會包含所有參數(shù)的值。打開名為 Test.doc 的文檔時,錄制了下面的宏。所得到的宏包含 Open 方法的所有參數(shù)。Sub Macro1() Documents.Open FileName:=C:My DocumentsTest.doc, _ ConfirmConversions:= False, ReadOnly:=False, _ AddToRecentFiles:=False, PasswordDocument:=, _ PasswordTemplate:=, Revert:=False, _ WritePasswordDocument:=, _ WritePasswordTemplate:=, Format:=wdOpenFormatAutoEnd Sub可以從錄制的宏中刪除不需要的參數(shù)。例如,可以刪除所有設(shè)置為空字符串的參數(shù)(如 WritePasswordDocument:=),如下所示。Sub MyMacro() Documents.Open FileName:=C:My DocumentsTest.doc, _ ConfirmConversions:= False, _ ReadOnly:=False, AddToRecentFiles:=False, _ Revert:=False, Format:=wdOpenFormatAutoEnd Sub三、自動運(yùn)行的宏通過為一個宏賦予某個特殊的名稱,就可在執(zhí)行某項(xiàng)操作(例如啟動 Word 或打開文檔)時自動運(yùn)行宏。Word 將下列名稱識別為自動宏,或稱“auto”宏。宏名運(yùn)行條件AutoExec啟動 Word 或加載全局模板時AutoNew每次新建文檔時AutoOpen每次打開已有文檔時AutoClose每次關(guān)閉文檔時AutoExit退出 Word 或卸載全局模板時當(dāng)以下條件之一為真時,將識別代碼模塊中的自動宏。 模塊在自動宏(如 AutoExec)之后命名,并且包含一個名為“Main”的過程。 任何模塊中的過程在自動宏之后命名。 與其他宏一樣,自動宏也可以保存于 Normal 模板、其他模板或文檔中。要讓自動宏運(yùn)行,它必須位于活動文檔的 Normal 模板中,或活動文檔選用的模板中。唯一例外的是 AutoExec 宏,它只有存儲于以下位置時才可自動運(yùn)行:Normal 模板、通過“模板和加載項(xiàng)”對話框全局加載的模板、或由“Startup”文件夾指定的文件夾中的全局模板。在命名沖突的情況下(多個自動宏名相同),Word 將運(yùn)行上下文中最近的自動宏。例如,如果同時在文檔及其附加的模板中創(chuàng)建了 AutoClose 宏,則僅執(zhí)行文檔中的自動宏。如果在 Normal 模板中創(chuàng)建了 AutoNew 宏,只有當(dāng)文檔或其附加模板中沒有名為 AutoNew 的宏時,該自動宏才能運(yùn)行。(筆者注:簡稱就近原則!)注釋按住 Shift 可以終止自動宏的運(yùn)行。例如,基于包含 AutoNew 宏的模板新建文檔時,按住 Shift 可終止 AutoNew 宏的運(yùn)行。方法是:按住 Shift,單擊(“文件”菜單)“新建”對話框中的“確定”按鈕,并在顯示新文檔前持續(xù)按住 Shift。如果運(yùn)行一個宏時有可能觸發(fā)自動宏,(這種情況,我沒遇過!)可用下列指令終止自動宏的運(yùn)行:WordBasic.DisableAutoMacros四、修改 Word 命令大多數(shù) Word 命令都可通過轉(zhuǎn)換為宏的方式對其進(jìn)行修改。例如,可修改“文件”菜單上的“打開”命令,使其不再顯示 Word 文檔文件列表(擴(kuò)展名為 .doc 的文件),而顯示當(dāng)前文件夾中的所有文件。若要在“宏”對話框中顯示內(nèi)置 Word 命令列表,可在“宏的位置”框中選定“Word 命令”。顯示的命令列表中包含所有的菜單命令、工具欄命令或快捷鍵命令。菜單命令名稱以相關(guān)的菜單名稱開頭。例如,“文件”菜單中的“保存”命令顯示為“FileSave”。方法是工具/宏/宏通過將一個宏命名為與 Word 命令相同的名稱,就可用宏替代 Word 命令。例如,如果創(chuàng)建一個名為“FileSave”的宏,當(dāng)選擇“文件”菜單上的“保存”命令、單擊“保存”工具欄按鈕,或按“保存文件”快捷鍵時,Word 將運(yùn)行該宏。本示例介紹了修改 FileSave 命令的步驟。1. 在“工具”菜單上,指向“宏”,然后單擊“宏”。 2. 在“宏的位置”框中,選擇“Word 命令”。 3. 在“宏名”框中,選擇“FileSave”。 4. 在“宏的位置”框中選擇一個模板或文檔以保存該宏。例如,選擇 Normal.dot(全局模板)可生成一個共用宏(即修改所有文檔的“FileSave”命令)。5. 單擊“創(chuàng)建”按鈕。 FileSave 宏顯示如下:Sub FileSave() FileSave Macro Saves the active document or template ActiveDocument.SaveEnd Sub可添加指令或刪除現(xiàn)有的 ActiveDocument.Save 指令。之后在運(yùn)行“FileSave”命令時,新的 FileSave 宏將取代 word 命令。若要恢復(fù)“FileSave”原有的功能,需重新命名新的 FileSave 宏或?qū)⒅畡h除。說明: 也可以創(chuàng)建與 Word 命令同名的代碼模塊(例如 FileSave)并包含名為 Main 的子程序,以此替換 Word 命令。五、將文本插入文檔使用 InsertAfter 或 InsertBefore 方法在 Selection 或 Range 對象之前或之后插入文字。下列示例在活動文檔的末尾插入文字。Sub InsertTextAtEndOfDocument() ActiveDocument.Content.InsertAfter Text:= The end.End Sub下列示例在所選內(nèi)容之前插入文字。Sub AddTextBeforeSelection() Selection.InsertBefore Text:=new text End SubRange 對象或 Selection 對象在使用了 InsertBefore 或 InsertAfter 方法之后,會擴(kuò)展并包含新的文本。使用 Collapse 方法可以將 Selection 或 Range 折疊到開始或結(jié)束位置。六、選定文檔中的文本可使用 Select 方法選定文檔中的對象。Select 方法可用于多種對象,例如 Bookmark、Field、Range 和 Table 對象。下列示例選定活動文檔中的第一個表格。Sub SelectTable() ActiveDocument.Tables(1).SelectEnd Sub下列示例選定活動文檔中的第一個域。Sub SelectField() ActiveDocument.Fields(1).SelectEnd Sub下列示例選定活動文檔中的前四個段落。Range 方法用于創(chuàng)建一個引用前四個段落的 Range 對象,然后將 Select 方法應(yīng)用于 Range 對象。Sub SelectRange() Dim rngParagraphs As Range Set rngParagraphs = ActiveDocument.Range( _ Start:=ActiveDocument.Paragraphs(1).Range.Start, _ End:=ActiveDocument.Paragraphs(4).Range.End) rngParagraphs.SelectEnd Sub選定文檔中的文本:我覺得用處不大,原因就是為什么要選中呢?能操作就直接操作,不能的話,就選中吧(他可以說是沒辦法的辦法).七、編輯文字本主題包含與下列任務(wù)相關(guān)的 Visual Basic 示例: 確定文本是否被選定 折疊選定內(nèi)容或區(qū)域 擴(kuò)展選定內(nèi)容或區(qū)域 重新定義 Range 對象 更改文本 有關(guān)其他編輯任務(wù)的信息和示例,請參閱下列主題:從文檔返回文本 選定文檔中的文本 將文本插入文檔 修改文檔的某一部分 確定文本是否被選定Selection 對象的 Type 屬性返回所選內(nèi)容類型的信息。如果所選內(nèi)容為插入點(diǎn),則下列示例顯示一條消息Nothing is Selected。沒選中任何問題Sub IsTextSelected() If Selection.Type = wdSelectionIP Then MsgBox Nothing is selectedEnd Sub折疊所選內(nèi)容或區(qū)域使用 Collapse 方法可將 Selection 或 Range 對象折疊到開始或結(jié)束點(diǎn)的位置。下列示例在所選內(nèi)容的開頭將所選內(nèi)容折疊為一個插入點(diǎn)。Sub CollapseToBeginning()Selection.Collapse Direction:=wdCollapseStartSelection.Collapse Direction:=wdCollapseEndEnd Sub這個是標(biāo)準(zhǔn)的折疊的程序,以后可能會用到的噢!下列示例將區(qū)域折疊至其結(jié)束點(diǎn)(在第一個單詞之后),并添加新文本。Sub CollapseToEnd() Dim rngWords As Range Set rngWords = ActiveDocument.Words(1) 設(shè)置第一個單詞為區(qū)域rngWords With rngWords .Collapse Direction:=wdCollapseEnd 折疊到最后,區(qū)域與可以折疊的噢! .Text = (This is a test.) 在折疊的最后加入這些文字 End WithEnd Sub擴(kuò)展所選內(nèi)容或區(qū)域下列示例使用 MoveEnd 方法擴(kuò)展所選內(nèi)容的結(jié)尾以包含三個附加的單詞(總共是4個?。?。MoveLeft、MoveRight、MoveUp 和 MoveDown 方法也可以用于擴(kuò)展 Selection 對象。Sub ExtendSelection() Selection.MoveEnd Unit:=wdWord, Count:=3End Sub下列示例使用 MoveEnd 方法擴(kuò)展區(qū)域,以包含活動文檔中的前三個段落。Sub ExtendRange() Dim rngParagraphs As Range Set rngParagraphs = ActiveDocument.Paragraphs(1).Range rngParagraphs.MoveEnd Unit:=wdParagraph, Count:=2End Sub重新定義 Range 對象使用 SetRange 方法可重新定義現(xiàn)有的 Range 對象。更改文字通過更改某一區(qū)域中的內(nèi)容可更改現(xiàn)有的文字。下列指令通過將 Text 屬性設(shè)為“The”來更改活動文檔中的第一個單詞。Sub ChangeText() ActiveDocument.Words(1).Text = The End Sub也可以使用 Delete 方法刪除現(xiàn)有文本,然后使用 InsertAfter 或 InsertBefore 方法插入新文本。下列示例刪除活動文檔的第一段,并插入新文本。Sub DeleteText() Dim rngFirstParagraph As Range Set rngFirstParagraph = ActiveDocument.Paragraphs(1).Range With rngFirstParagraph .Delete .InsertAfter Text:=New text .InsertParagraphAfter End WithEnd Sub上面的這個例子我們通常不用,我們更喜歡用下面Sub DeleteText1() Dim rngFirstParagraph As Range Set rngFirstParagraph = ActiveDocument.Paragraphs(1).Range rngFirstParagraph.Text = New text & Chr(13)End Sub八、將格式應(yīng)用于文本本主題包含與下列任務(wù)相關(guān)的 Visual Basic 示例: 將格式應(yīng)用于選定內(nèi)容 將格式應(yīng)用于某一區(qū)域 插入文本并應(yīng)用字符和段落格式 在 12 磅和無之間切換段前間距 切換加粗格式 將左邊距增加 0.5 英寸 將格式應(yīng)用于選定內(nèi)容下列示例使用 Selection 屬性將字符和段落格式應(yīng)用于選定文本。使用 Font 屬性獲得字體格式的屬性和方法,使用 ParagraphFormat 屬性獲得段落格式的屬性和方法。Sub FormatSelection() With Selection.Font .Name = Times New Roman .Size = 14 .AllCaps = True 全部大寫 End With With Selection.ParagraphFormat .LeftIndent = InchesToPoints(0.5) 左縮進(jìn)0.5英寸 .Space1 這是單倍行距的縮寫 End WithEnd Sub將格式應(yīng)用于某一區(qū)域下列示例定義了一個 Range 對象,它引用了活動文檔的前三個段落。通過應(yīng)用 Font 和 ParagraphFormat 對象的屬性來設(shè)置 Range 對象的格式。Sub FormatRange() Dim rngFormat As Range Set rngFormat = ActiveDocument.Range( _ Start:=ActiveDocument.Paragraphs(1).Range.Start, _ End:=ActiveDocument.Paragraphs(3).Range.End) With rngFormat .Font.Name = Arial .ParagraphFormat.Alignment = wdAlignParagraphJustify 兩端對齊 End WithEnd Sub插入文字并應(yīng)用字符和段落格式下列示例在當(dāng)前文檔的上部添加單詞 Title。第一段居中對齊,并在該段落之后添加半英寸的間距。將單詞 Title 的格式設(shè)為 24 磅 Arial 字體。Sub InsertFormatText() Dim rngFormat As Range Set rngFormat = ActiveDocument.Range(Start:=0, End:=0) With rngFormat .InsertAfter Text:=Title .InsertParagraphAfter 插入段落標(biāo)記 With .Font .Name = Tahoma .Size = 24 .Bold = True End With End With With ActiveDocument.Paragraphs(1) .Alignment = wdAlignParagraphCenter .SpaceAfter = InchesToPoints(0.5) End WithEnd Sub在 12 磅和無之間切換段前間距下列示例切換選定內(nèi)容中第一段的段前間距。宏將獲取當(dāng)前段前間距的值,如果該值為 12 磅,則刪除段前間距格式(將 SpaceBefore 屬性設(shè)為零)。如果段前間距的值為除 12 外的其他數(shù)值,則將 SpaceBefore 屬性設(shè)為 12 磅。Sub ToggleParagraphSpace() With Selection.Paragraphs(1) If .SpaceBefore 0 Then .SpaceBefore = 0 Else .SpaceBefore = 6 End If End WithEnd Sub切換加粗格式下列示例切換選定文本的加粗格式。Sub ToggleBold() Selection.Font.Bold = wdToggleEnd Sub將左邊距增加 0.5 英寸下列示例將左邊距和右邊距增加 0.5 英寸。PageSetup 對象包含文檔的所有的頁面設(shè)置屬性(左邊距、下邊距、紙張大小等)。LeftMargin 屬性用于返回和設(shè)置左邊距設(shè)置。RightMargin 屬性用于返回和設(shè)置右邊距設(shè)置。Sub FormatMargins() With ActiveDocument.PageSetup .LeftMargin = .LeftMargin + InchesToPoints(0.5) .RightMargin = .RightMargin + InchesToPoints(0.5) End WithEnd Sub九、查找并替換文字或格式通過 Find 和 Replacement 對象可實(shí)現(xiàn)查找和替換功能。Selection 和 Range 對象可以使用 Find 對象。從 Selection 或 Range 對象訪問 Find 對象時,查找操作會略有不同。查找并選定文字如果從 Selection 對象訪問 Find 對象,當(dāng)找到搜索條件時,就會更改所選內(nèi)容。下列示例選定下一個出現(xiàn)的“Hello”。如果到達(dá)文檔結(jié)尾時仍未找到“Hello”,則停止搜索。With Selection.Find .Forward = True .Wrap = wdFindStop .Text = Hello .ExecuteEnd WithFind 對象包含與“查找和替換”對話框中的選項(xiàng)相關(guān)的屬性(在“編輯”菜單上選擇“查找”可顯示該對話框)??梢栽O(shè)置 Find 對象單獨(dú)的屬性或使用 Execute 方法的參數(shù),如下例所示。Selection.Find.Execute FindText:=Hello, _ Forward:=True, Wrap:=wdFindStop查找文字,但不更改所選內(nèi)容如果從 Range 對象訪問 Find 對象,則找到搜索條件時,不更改所選內(nèi)容,但是會重新定義 Range 對象。下列示例在活動文檔中查找第一個出現(xiàn)的“blue”。如果找到該單詞,則重新定義該區(qū)域,并將加粗格式應(yīng)用于單詞“blue”。With ActiveDocument.Content.Find .Text = blue .Forward = True .Execute If .Found = True Then .Parent.Bold = TrueEnd With下列示例使用 Execute 方法的參數(shù),執(zhí)行結(jié)果與上例相同。Set myRange = ActiveDocument.ContentmyRange.Find.Execute FindText:=blue, Forward:=TrueIf myRange.Find.Found = True Then myRange.Bold = True使用 Replacement 對象Replacement 對象代表查找和替換操作的替換條件。Replacement 對象的屬性和方法對應(yīng)于“查找和替換”對話框中的選項(xiàng)(單擊“編輯”菜單中的“查找”或“替換”命令可顯示該對話框)??赏ㄟ^ Find 對象使用 Replacement 對象。下列示例將所有單詞“hi”替換為“hello”。由于 Find 對象是通過 Selection 對象訪問的,所以當(dāng)找到搜索條件時,會更改所選內(nèi)容。With Selection.Find .ClearFormatting .Text = hi .Replacement.ClearFormatting .Replacement.Text = hello .Execute Replace:=wdReplaceAll, Forward:=True, _ Wrap:=wdFindContinueEnd With下列示例取消活動文檔中的加粗格式。Find 對象的 Bold 屬性為 True,而 Replacement 對象的該屬性為 False。若要查找并替換格式,可將查找和替換文字設(shè)為空字符串 (),并將 Execute 方法的 Format 參數(shù)設(shè)為 True。由于從 Range 對象訪問 Find 對象,所選內(nèi)容將保持不變(Content 屬性返回一個 Range 對象)。With ActiveDocument.Content.Find .ClearFormatting .Font.Bold = True With .Replacement .ClearFormatting .Font.Bold = False End With .Execute FindText:=, ReplaceWith:=, _ Format:=True, Replace:=wdReplaceAllEnd With上面的查找與替換是重點(diǎn)!他能解決很多的替換問題。舉例:原地址是:/dispbbs.asp?boardID=23&ID=153805&page=1摘題目:怎樣用宏統(tǒng)計word文件中某一個漢字,例如“的”字出現(xiàn)的數(shù)量?(可以這樣:新建一個文檔,輸入“=rand(50,50)”,再按回車(不包括雙引號“”),則產(chǎn)生了虛擬文本,在此虛擬文本中試驗(yàn))方法有三:Sub getfoundcount1() Dim a As Range, i% Dim c, d c = Timer 設(shè)C為運(yùn)行前的時間 For Each a In ActiveDocument.Characters 在字符間循環(huán) If a Like 的 Then 如果是“的” i = i + 1 則加上,i的初始值是0,不用設(shè)的,默認(rèn) End If Next d = Timer c 用現(xiàn)在的時間減去運(yùn)行前的時間等于用時 MsgBox Word 找到 & i & 個與此條件相匹配的項(xiàng)!, vbInformation, dEnd Sub上面此法利用循環(huán)比較字符是否是的是“的”字,來判斷!用時下面的圖形的標(biāo)題欄 圖表 1Sub GetFoundCount2() Dim FoundCount As Integer, myFindText As String Dim a, b a = Timer myFindText = 的 With ActiveDocument.Content.Find .Text = myFindText 要查找的字符 .MatchWildcards = False 通配符為不勾選 .Wrap = wdFindStop 當(dāng)查找到后停止,就是每次縮小范圍 Do While .Execute 當(dāng)查找時則累加 FoundCount = FoundCount + 1 Loop End With b = Timer - a Debug.Print b Debug.Print FoundCount MsgBox Word 找到 & FoundCount & 個與此條件相匹配的項(xiàng)!, vbInformation, bEnd Sub上面是標(biāo)準(zhǔn)的用查找來判斷累加,(也是老大的代碼)圖表 2Sub getfoundcount3()Dim a, b, c, d, e, f d = Timer a = ActiveDocument.Range.Text f = VBA.Asc(的) 取得“的”的Ascii碼 b = Split(a, Chr(f) 用此Ascii碼來分裂 c = UBound(b) 取得上限 e = Timer d 取得時間 Debug.Print e 這個是輸出到調(diào)試區(qū)的 Debug.Print c 這個也是 MsgBox Word 找到 & c & 個與此條件相匹配的項(xiàng)!, vbInformation, eEnd Sub上面是利用數(shù)組,把“的”看成是用于split數(shù)組的字符,通過是判斷數(shù)組的上限來判斷是幾位數(shù)組,即是幾個“的”。圖表 3Sub GetFoundCount4() Dim strText As String, myText As String Dim lngOld As Long, lngNew As Long Dim Times As Single Times = VBA.Timer strText = ActiveDocument.Content.Text myText = 的 lngOld = Len(strText) 包括“的”的長度 lngNew = Len(Replace(strText, myText, ) 替換“的”后的長度 MsgBox Word 找到 & lngOld - lngNew & 個與此條件相匹配的項(xiàng)!, vbInformation, VBA.Timer - TimesEnd Sub圖表 4(上面是老大又寫了一個,老大隨后的代碼的運(yùn)行速度更是十分驚人)兩種方法運(yùn)行最高。一個是0.1秒與一個是6秒,效率是可想而知!大家試試!十、從文檔返回文本使用 Text 屬性可以返回 Range 或 Selection 對象中的文本。下列示例選定下一個格式設(shè)為“標(biāo)題 1”樣式的段落。然后通過 MsgBox 函數(shù)顯示 Text 屬性的內(nèi)容。Sub FindHeadingStyle() With Selection.Find .ClearFormatting .Style = wdStyleHeading1 .Execute FindText:=, Format:=True, _ Forward:=True, Wrap:=wdFindStop If .Found = True Then MsgBox Selection.Text End WithEnd Sub下列指令返回并顯示選定的文本。Sub ShowSelection() Dim strText As String strText = Selection.Text MsgBox strTextEnd Sub下列示例返回活動文檔中的第一個單詞。Words 集合中的每一項(xiàng)是代表一個單詞的 Range 對象。Sub ShowFirstWord() Dim strFirstWord As String strFirstWord = ActiveDocument.Words(1).Text MsgBox strFirstWordEnd Sub下列示例返回與活動文檔中第一個書簽相關(guān)聯(lián)的文本。Sub ShowFirstBookmark() Dim strBookmark As String If ActiveDocument.Bookmarks.Count 0 Then strBookmark = ActiveDocument.Bookmarks(1).Range.Text MsgBox strBookmark End IfEnd SubInputBox 函數(shù)在一對話框來中顯示提示,等待用戶輸入正文或按下按鈕,并返回包含文本框內(nèi)容的 String。語法InputBox(prompt, title , default , xpos , ypos , helpfile, context) InputBox 函數(shù)的語法具有以下幾個命名參數(shù):部分描述Prompt必需的。作為對話框消息出現(xiàn)的字符串表達(dá)式。prompt 的最大長度大約是 1024 個字符,由所用字符的寬度決定。如果 prompt 包含多個行,則可在各行之間用回車符 (Chr(13)、換行符 (Chr(10) 或回車

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論