VBA With 结构

VBA 中,With 结构用于组合同一个对象的多个属性和方法,避免重复写同一个对象名,提高编程和运行效率。

With 结构语法

With 结构由 WithEnd With 两个语句构成,对象的属性和方法都写在两者之间。基本语法如下:

With [对象]
    .[属性] = [数据]
    .[方法]
    '其他属性和方法
End With

With 结构里,对象的属性和方法均由点 (.)符号开始,后接对象的属性名和方法名。

With 结构实例

现在看一个实际的例子,需要将工作簿中 Sheet1 工作表设置新名称,然后设置标签颜色为黑色,最后隐藏工作表。

如果不用 With 结构,代码如下:

Sub MyCode()

    Worksheets("Sheet1").Name = "新名称"
    Worksheets("新名称").Tab.ThemeColor = xlThemeColorLight1
    Worksheets("新名称").Visible = xlSheetHidden
    
End Sub

可以看到,每个语句都重复写 Worksheets("工作表名称") 部分。

使用 With 结构,可以避免重复写同一个对象名,代码如下:

Sub MyCode()

    With Worksheets("Sheet1")
        .Name = "新名称"
        .Tab.ThemeColor = xlThemeColorLight1
        .Visible = xlSheetHidden
    End With
    
End Sub

嵌套 With 结构

With 结构还能嵌套编写,即一个 With 结构中,如果父对象的属性是另一个对象,则针对这个子对象,继续使用 With 结构。

在之前的例子中,如果需要将 Sheet1 工作表中,A1:A10 单元格区域设置背景颜色,调整字体和字体大小,可以使用如下代码:

Sub MyCode()

    With Worksheets("Sheet1")
        .Name = "新名称"
        .Tab.ThemeColor = xlThemeColorLight1
        .Visible = xlSheetHidden
        
        With .Range("A1:A10")
            .Interior.ThemeColor = xlThemeColorAccent1
            .Font.Size = 12
            .Font.Name = "等线"
        End With
        
    End With
    
End Sub

总结

本篇我们学习了 VBA 程序结构中的 With 结构。With 结构可以将同一个对象的多个属性和方法组合起来,避免重复写对象名。此外,With 结构还能嵌套使用,进一步提高编程效率和程序运行效率。

转载注明:文章转载自「懒人Excel - www.lanrenexcel.com
本文链接:VBA With 结构
订阅评论
提醒
16 评论
最新
最旧 最多投票
内联反馈
查看所有评论
kepler
2 年 前

非常感谢老师的教程,我学到很多。
有个问题想请教一下,我想把一个很长的文本内容的单元格,这个单元格中部分文字,以及所有数字标红,老师有什么方法能实现吗?
以下的代码只能修改完成一个文字或一个数字的修改,我试着加上with结构多写几个,但直接就整个单元格标红了。
Sub 修改部分文字颜色()
  Set myRange = Range(“A1”) ‘设置单元格范围’
  substr = “1” ‘待修改颜色的文字’
  txtColor = 3  ‘修改后的颜色,3代表红色’
  ‘第一层循环遍历所有单元格’
  For Each myString In myRange ‘myString是单元格中的字符串’
    lenstr = Len(myString)
    lensubstr = Len(substr)
    ‘第二层循环遍历单元格内的字符串’
    For i = 1 To lenstr
      tempString = Mid(myString, i, lensubstr)
      If tempString = substr Then
        myString.Characters(Start:=i, Length:=lensubstr).Font.ColorIndex = txtColor
      End If
    Next i
  Next myString
  
End Sub

川流不息
2 年 前

在这些已发布的内容之外,能推荐一本合适的相关书籍吗?,最好是像这本书一样简明扼要的。

川流不息
2 年 前
回复给  懒人Excel

OK

Stena
2 年 前

运行时错误1004:不能设置类worksheet的visible属性

请问这个是什么问题呀?求解答~

路过的人
2 年 前
回复给  Stena

set .Visible = -1,0或2,(-1 xlSheetVisible;0 xlSheetHidden;2 xlSheetVeryHidden ),选0或2的时候至少有2个工作表,就是至少有一个工作表要是可见的
ture 或 false类似

江上清风
2 年 前
回复给  路过的人

大佬,您能描述的再详细些嘛,我也是同样的问题,运行时错误1004,还请指教!

ldk
3 年 前

对象的属性和方法均有点 (.)符号开始,后接对象的属性名和方法名。 这句话因该是由点 (.)符号开始

紫皇*
3 年 前

Sub MyCode()

Worksheets(“Sheet1”).Name = “新名称”
Worksheets(“Sheet1”).Tab.ThemeColor = xlThemeColorLight1
Worksheets(“Sheet1”).Visible = xlSheetHidden

End Sub

这一段会提示下标越界
由于先改变标签名,后续执行不了

神秘的12138
2 年 前
回复给  紫皇*

不好意思,说同上的时候已执行第一句语句,工作表“Sheet1”名称已经变更为“新名称”了,所以超出引用范围,导致同上的报警“下标超出范围(错误 9)”

最后由神秘的12138编辑于2 年 前
16
0
希望看到您的想法,请您发表评论x