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结构为我们提供了更高效的处理重复引用对象的方式,虽然难以理解一点,也更难阅读,但它确实能带来运行速度上的提高。

赞(66)
office办公分享 » Excel VBA End With结构,专为对象而生

本文链接:Excel VBA End With结构,专为对象而生https://www.officeapi.cn/87435.html

OFFICE,天天学一点,进步多一点

联系我们