修訂已錄製的Visual Basic 巨集

文章推薦指數: 80 %
投票人數:10人

為了強化巨集,您可能會想要修訂模組中錄製的程式碼。

移除Selection 屬性. 使用巨集錄製器建立的巨集會仰賴選取範圍。

在大部分錄製的巨集指令的開頭 ... 跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge 其他資訊 目錄 結束焦點模式 閱讀英文 儲存 目錄 閱讀英文 儲存 編輯 Twitter LinkedIn Facebook 電子郵件 目錄 修訂已錄製的VisualBasic巨集 發行項 04/11/2022 1位參與者 本文內容 宏錄製器是一個很好的工具,可用於探索您要使用的VisualBasic方法和屬性。

如果您不知道要使用的屬性或方法,請開啟宏錄製並手動執行動作。

巨集錄製器會將您的動作轉譯成VisualBasic程式碼。

不過,錄製巨集具有一些限制。

您無法錄製下列項目: 條件分支 變數指派 迴圈結構 自訂使用者表單 錯誤處理 使用滑鼠進行的文字選取範圍(您必須使用鍵盤組合) 為了強化巨集,您可能會想要修訂模組中錄製的程式碼。

移除Selection屬性 使用巨集錄製器建立的巨集會仰賴選取範圍。

在大部分錄製的巨集指令的開頭,您會看到Selection。

錄製的宏使用selection屬性來傳回selection物件。

例如,下列範例會將選取範圍移至Temp書籤,然後在此書籤後面插入文字。

SubMacro1() Selection.GotoWhat:=wdGotoBookmark,Name:="Temp" Selection.MoveRightUnit:=wdCharacter,Count:=1 Selection.TypeTextText:="Newtext" EndSub 雖然這個巨集會完成工作,不過仍有一些缺點。

首先,如果文件沒有名為Temp的書籤,此巨集就會張貼錯誤。

其次,此巨集會移動選取範圍,但這樣做可能不適當。

這兩個問題都可以透過修訂巨集來解決,讓巨集不會使用Selection物件。

下面是修訂的巨集。

SubMyMacro() IfActiveDocument.Bookmarks.Exists("Temp")=TrueThen endloc=ActiveDocument.Bookmarks("Temp").End ActiveDocument.Range(Start:=endloc,_ End:=endloc).InsertAfter"Newtext" EndIf EndSub Exists方法是用來檢查是否存在名為Temp的書簽。

如果找到書簽,則會使用End屬性傳回書簽的終止字元位置。

最後,Document物件的Range方法是用來傳回range物件,該物件參照書簽的結束位置,如此一來,就可以使用Range物件的InsertAfter方法插入文字。

如需定義Range物件的詳細資訊,請參閱使用Range物件。

使用With...EndWith 您可以使用With...EndWith結構來簡化參照同一個物件的巨集指令。

例如,下列巨集是在文件最上方加入標題時錄製的。

SubMacro1() Selection.HomeKeyUnit:=wdStory Selection.TypeTextText:="Title" Selection.ParagraphAlignment.Alignment=wdAlignParagraphCenter EndSub Selection屬性會搭配每一個指令使用,以便傳回Selection物件。

簡化此巨集後,就只會使用一次Selection屬性。

SubMyMacro() WithSelection .HomeKeyUnit:=wdStory .TypeTextText:="Title" .ParagraphAlignment.Alignment=wdAlignParagraphCenter EndWith EndSub 您也可以在不使用Selection物件的情況下,執行相同的工作。

下列巨集會在使用中文件的開頭使用Range物件來完成相同的工作。

SubMyMacro() WithActiveDocument.Range(Start:=0,End:=0) .InsertAfter"Title" .ParagraphFormat.Alignment=wdAlignParagraphCenter EndWith EndSub 移除不必要的屬性 如果您所錄製的巨集含有在對話方塊中選取選項的動作,巨集錄製器就會錄製該對話方塊中所有選項的設定,即使您只變更其中一兩個選項也一樣。

如果您不需要變更所有選項,可以從錄製的宏移除不必要的屬性。

下列已錄製的巨集含有一些來自[段落]對話方塊([格式]功能表)的選項。

SubMacro1() WithSelection.ParagraphFormat .LeftIndent=InchesToPoints(0) .RightIndent=InchesToPoints(0) .SpaceBefore=6 .SpaceAfter=6 .LineSpacingRule=0 .Alignment=wdAlignParagraphLeft .WidowControl=True .KeepWithNext=False .KeepTogether=False .PageBreakBefore=False .NoLineNumber=False .Hyphenation=True .FirstLineIndent=InchesToPoints(0) .OutlineLevel=10 EndWith EndSub 不過,如果您只想要變更與前段間距和與後段間距,就可以將此巨集變更為下列巨集。

SubMyMacro() WithSelection.ParagraphFormat .SpaceBefore=6 .SpaceAfter=6 EndWith EndSub 簡化的巨集執行速度會更快,因為它設定的屬性比較少。

只有與前段間距和與後段間距變更,而選取段落的所有其他設定都未變更。

移除不必要的引數 當巨集錄製器在錄製方法時,就會包含所有引數的值。

下列巨集是在開啟名為Test.doc的文件時錄製的。

產生的宏會包含Open方法的所有引數。

SubMacro1() Documents.OpenFileName:="C:\MyDocuments\Test.doc",_ ConfirmConversions:=False,ReadOnly:=False,_ AddToRecentFiles:=False,PasswordDocument:="",_ PasswordTemplate:="",Revert:=False,_ WritePasswordDocument:="",_ WritePasswordTemplate:="",Format:=wdOpenFormatAuto EndSub 您可以將不需要的引數從已錄製的巨集中移除。

例如,您可以移除所有設為空字串的引數(例如,WritePasswordDocument:="")(如圖所示)。

SubMyMacro() Documents.OpenFileName:="C:\MyDocuments\Test.doc",_ ConfirmConversions:=False,_ ReadOnly:=False,AddToRecentFiles:=False,_ Revert:=False,Format:=wdOpenFormatAuto EndSub 支援和意見反應 有關於OfficeVBA或這份文件的問題或意見反應嗎?如需取得支援服務並提供意見反應的相關指導,請參閱OfficeVBA支援與意見反應。

本文內容



請為這篇文章評分?