修訂已錄製的Visual Basic 巨集
文章推薦指數: 80 %
為了強化巨集,您可能會想要修訂模組中錄製的程式碼。
移除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支援與意見反應。
本文內容
延伸文章資訊
- 1Word 巨集錄製
巨集是一組電腦指令,您可以錄製巨集,並將巨集與快速鍵組合或巨集名稱結合,然後,當您按快速鍵組合或按一下巨集名稱時,電腦程式就會執行巨集的指令。這麼做可以用較簡短 ...
- 2修訂已錄製的Visual Basic 巨集
為了強化巨集,您可能會想要修訂模組中錄製的程式碼。 移除Selection 屬性. 使用巨集錄製器建立的巨集會仰賴選取範圍。 在大部分錄製的巨集指令的開頭 ...
- 3建立或執行巨集
- 4word巨集、巨集程式設計以及VBA - 程式人生
巨集是一系列Word 命令和指令,這些命令和指令組合在一起,形成了一個單獨的命令,以實現任務執行的自動化。 所以, 如果在Microsoft Word 中反覆執行某項 ...
- 5W0205Word 2016中錄製巨集的方法 - 錦子老師
1. 啟動Word 2016並打開文件。 · 2. 在文件中輸入需要進行處理的文字,本例為:「一個人靜靜的聽超好聽的純音樂欣賞」,如下圖所示。 · 3. 點取「檢視> 巨集 ...