Excel VBA End With結構,專為對象而生
Excel VBA End With結構,專為對象而生
我們主要是和對象打交道,這包括各種各樣的對象以及由這些對象組成的集合對象。我們來看看并學習Excel內部是如何處理對象的。
我們先來錄制一個宏。
在Excel中,打開宏錄制器,錄制下面的操作:在工作表單元格A1中輸入“Excel”,設置其字體為紅色,單元格背景色為黃色。錄制的代碼如下:
Sub 宏3()
‘
‘ 宏3 宏
‘
‘
ActiveCell.FormulaR1C1 = “Excel”
Range(“A1”).Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
觀察代碼,我們發現,宏錄制器為設置字體和單元格背景的兩段代碼都使用了With … End With結構,這就是VBA為我們提供的處理對象的有效方法之一。
在這里,宏錄制器自動優化了代碼,在With … End With結構中對同一個對象執行多項操作。當需要對某個對象執行多項操作時(例如,為同一對象的多個屬性賦值),使用With … End With結構的代碼比在每個語句中都顯示地引用對象的代碼要更快。
在上一篇文章《Excel VBA解讀(17):談談對象變量》中,我們展示了一個示例:在單元格區域A1:B2中輸入文本“示例”,將字體加粗,字號大小調整為19號,并將單元格背景設置為黃色。
代碼1:不使用對象變量
Sub test()
Worksheets(“Sheet1”).Range(“A1:B2”).Value= “示例”
Worksheets(“Sheet1”).Range(“A1:B2”).Font.Bold = True
Worksheets(“Sheet1”).Range(“A1:B2”).Font.Size = 19
Worksheets(“Sheet1”).Range(“A1:B2”).Interior.Color =vbYellow
End Sub
代碼2:使用對象變量
Sub testUpdate()
Dim rng As Range
Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)
rng.Value = “示例”
rng.Font.Bold = True
rng.Font.Size = 19
rng.Interior.Color = vbYellow
End Sub
上述兩段代碼是我們已經學過的代碼。現在,我們學習了With … End With結構,又可以將代碼進行改寫而獲得相同的效果。
代碼3:使用With … End With結構(不使用對象變量)
Sub test1()
WithWorksheets(“Sheet1”).Range(“A1:B2”)
.Value = “示例”
.Font.Bold = True
.Font.Size = 19
.Interior.Color = vbYellow
End With
End Sub
代碼4:使用With … End With結構(使用對象變量)
Sub testUpdate1()
Dim rng As Range
Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)
With rng
.Value = “示例”
.Font.Bold = True
.Font.Size = 19
.Interior.Color = vbYellow
End With
End Sub
實際上,我們還可以進一步深入,將相同的對象全部歸于With … End With結構內,這樣就可以得到下面的代碼。
代碼5:完全使用With … End With結構
Sub testUpdate2()
Dim rng As Range
Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)
With rng
.Value = “示例”
With .Font
.Bold = True
.Size = 19
End With
.Interior.Color = vbYellow
End With
End Sub
With … End With結構為我們提供了更高效的處理重復引用對象的方式,雖然難以理解一點,也更難閱讀,但它確實能帶來運行速度上的提高。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。