分析及測試修改后的Excel宏代碼步驟

2021-12-08 13:54 更新

分析宏代碼

所有宏過程都以關(guān)鍵詞“Sub”開始,以關(guān)鍵詞“End Sub”結(jié)束。在關(guān)鍵詞“Sub”之后是宏的真正的名字,然后緊跟著是一對括號。在關(guān)鍵詞Sub 和End Sub之間是那些你每次運行宏代碼時VB執(zhí)行的語句。VB從上到下讀取語句,忽略那些句前帶單引號的語句(參見上節(jié)關(guān)于注釋的內(nèi)容),讀到EndSub時停止。請注意,錄制的宏代碼里包含許多停頓(譯者:英文模式下的句號)。每行代碼中都有停頓,用來連接VBA語言中不同的要素。如何閱讀這種語言的用法呢?要從最后一個停頓的右邊向左讀??纯碬hatsInACell里的一些語句:


Range("A1:A3").Select


選擇A1到A3單元格


Selection.EntireRow.Insert



往選中的區(qū)域中插入行。因為前面你選中的是三個單元格(譯者:應(yīng)該說是占據(jù)了三行的單元格),VB將插入三行。


ActiveCell.FormulaR1C1 = "Text"



往當前單元格里輸入“Text”。因為,之前的代碼是Range("B1").Select,選擇單元格B1,B1是當前激活的單元格,所有VB往B1單元格里面輸入文本。


With Selection.Interior


          .ColorIndex = 3


          

.Pattern = xlSolid


          

.PatternColorIndex = xlAutomatic


End With


這是一段特別的代碼塊,解釋如下:給當前選中的單元格設(shè)置單元格填充色為紅色(ColorIndex=3),設(shè)置填充模式為實心(xlSolid),并且給當前單元格明確為默認的填充模式(xlAutomatic)。



這個代碼塊以關(guān)鍵詞With開始,EndWith結(jié)束,它將加速宏代碼的執(zhí)行。宏代碼知道走捷徑,而不會每次都重復(fù)下面的說明:


Selection.Interior.ColorIndex = 3


Selection.Interior.Pattern = xlSolid


Selection.Interior.PatternColorIndex = xlAutomatic



在關(guān)鍵詞With后面緊跟重復(fù)的Selection.Interior,再以End With結(jié)尾。


 

清除宏代碼

你已經(jīng)逐行解析了你宏代碼,你會發(fā)現(xiàn)Excel錄制了許多你并不想要包含進去的信息。例如,在選中了文本單元格后,除了設(shè)置字體為粗體和顏色為紫色之外,Excel 還錄制了其它在字體頁的選項——字體名稱,字體大小,刪除線,上標,下標,陰影和下劃線。請看下列代碼片斷:


With Selection.Font


          .Name = "Arial"


          

.FontStyle = "Bold"


          

.Size = 10


          

.Strikethrough = False


          

.Superscript = False


          

.Subscript = False


          

.OutlineFont = False


          

.Shadow = False


          

.Underline = xlUnderlineStyleNone


          

.ColorIndex = 13


End With



如果你使用了對話框,Excel總會錄制所有的設(shè)定。這些多余的代碼使得你的宏代碼冗長而難以理解。因此,你完成錄制宏后,最好檢查一遍你錄制的代碼并刪除不必要的行。


1、在下面的代碼中,刪除帶刪除線的行:


With Selection.Font


          

.Name = "Arial"


          

.FontStyle = "Bold"


          

.Size = 10


          

.Strikethrough = False


          

.Superscript = False


          

.Subscript = False


          

.OutlineFont = False


          

.Shadow = False


          

.Underline = xlUnderlineStyleNone


          

.ColorIndex = 13


End With


清除后,在關(guān)鍵詞With和End With之間只剩下了兩句代碼,這些才是你在錄制宏的時候真正做的設(shè)置:



With Selection.Font

          

.FontStyle = "Bold"


          

.ColorIndex = 13


End With


2、找到設(shè)置數(shù)字單元格格式的代碼,依照下面的例子修改代碼:


' Find and format cells containing numbers


With Selection


          

.SpecialCells(xlCellTypeConstants, 1).Select


          

.Font.ColorIndex = 11 ' Sets the font color to Violet


End With


Range("C6").Select


3、找到設(shè)置公式單元格格式的代碼,依照下面的例子修改代碼:


' Find and format cells containing formulas


Selection.SpecialCells(xlCellTypeFormulas, 23).Select


With Selection.Font


          

.FontStyle = "Bold"


          

.ColorIndex = 3


End With


4、找到下述兩行代碼:


Range("A1:A3").Select


Selection.EntireRow.Insert


5、用下面的一句代碼取代上面的兩句代碼:


Range("A1:A3").EntireRow.Insert


注意,Excel使用了R1C1形式來設(shè)置選中單元格個公式:


ActiveCell.FormulaR1C1 = "Text"


ActiveCell.FormulaR1C1 = "Numbers"


ActiveCell.FormulaR1C1 = "Formulas"


宏錄制器使用了一次“ActiveCell”和一次“Selection”來選擇當前單元格。這兩個詞都稱為屬性。你將在第二章里學(xué)習(xí)屬性。當僅有一個單元格被選中時,你可以隨意使用“ActiveCell”或者“Selection”。




測試修改好的宏

當你修改宏的時候,很可能會帶入一些錯誤。例如,你可能會刪除一行重要的代碼,或者可能不注意清除或忽略了一個逗點(停頓)。為了確保你的宏在你修改之后還能正確地工作,你必須運行它。在VBE窗口,將光標放在宏代碼WhatsInACell的任意行,選擇“運行”-“運行模塊/窗體”



如果你在修改代碼的時候,沒有帶入任何問題,那么宏將順利運行,而不會有任何報錯。你需要切換到Excel界面取看你的宏運行的結(jié)果。你可以點擊任務(wù)欄,或者按Alt+F11回到Excel界面。


如果宏在運行的過程中遇到錯誤,你將會看到一個對話框顯示發(fā)現(xiàn)的錯誤類型。在你運行宏命令之前,你必須確保你的宏可以在當前激活的工作表里面運行。例如,你當前電腦上激活的時一個空的Excel工作表,你試圖運行WhatsInACell,這時你將看到一個錯誤信息:“運行時間錯誤‘1004’-找不到單元格”。點擊“結(jié)束”按鈕,在你重新運行宏之前,確保選擇了正確的工作表。


如果選擇的工作表只含有文本,你在運行WhatsInACell的時候,VB試圖選擇含有數(shù)字的單元格時會遇到同樣的“找不到單元格”的錯誤。


如果你忽略了WithSelection.Font中的逗點,VB會出現(xiàn)“運行時間錯誤‘424’-需要對象”的信息。點擊信息框上的“調(diào)試”按鈕,你將進到代碼窗口。同時,VB會進入“中斷”模式,并且將有問題的行用黃色突出出來。在你更正代碼后,VB可能會彈出信息:“這個操作將會重置你的工程,繼續(xù)?”點擊確定。盡管你可以在中斷模式修改代碼,但是,有些修改會終止宏的繼續(xù)執(zhí)行。更正宏代碼后,重新運行它,也許你會需要解決更多的錯誤,之后才能順利地運行它。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號