You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBA Excel中使用With语句同时设置多个对象属性?

VBA中用With同时操作多个对象的解决方案

VBA的With语句本身不支持同时绑定多个对象,你写的With BldOvImgDiv1 And BldOvImgDiv2是语法错误——And是逻辑判断运算符,不能用来连接两个对象作为With的目标。下面提供几种可行的替代方案:

方法1:封装重复操作为子过程(推荐)

把需要统一设置的属性逻辑封装成独立子过程,然后分别传入两个Shape对象执行,既保证代码简洁,又方便后续扩展:

Sub SetConnectorStyle(targetShape As Shape)
    With targetShape
        .Line.ForeColor.RGB = RGB(0, 0, 0)
        ' 这里可以添加更多需要统一设置的属性
    End With
End Sub

' 原代码修改后:
Dim bow As Worksheet
Set bow = Sheets("Building Overwiew")
Dim BldOvImgDiv1 As Shape, BldOvImgDiv2 As Shape
Set BldOvImgDiv1 = bow.Shapes.AddConnector(msoConnectorStraight, 260, 4, 260, 325)
Set BldOvImgDiv2 = bow.Shapes.AddConnector(msoConnectorStraight, 8, 325, 535, 325)
BldOvImgDiv1.Name = "BuildingOverviewConnector1"
BldOvImgDiv2.Name = "BuildingOverviewConnector2"

' 调用子过程设置样式
Call SetConnectorStyle(BldOvImgDiv1)
Call SetConnectorStyle(BldOvImgDiv2)

方法2:用集合+循环批量处理

把需要操作的对象存入集合,通过循环遍历统一设置属性:

Dim bow As Worksheet
Set bow = Sheets("Building Overwiew")
Dim BldOvImgDiv1 As Shape, BldOvImgDiv2 As Shape
Set BldOvImgDiv1 = bow.Shapes.AddConnector(msoConnectorStraight, 260, 4, 260, 325)
Set BldOvImgDiv2 = bow.Shapes.AddConnector(msoConnectorStraight, 8, 325, 535, 325)
BldOvImgDiv1.Name = "BuildingOverviewConnector1"
BldOvImgDiv2.Name = "BuildingOverviewConnector2"

' 创建集合并添加对象
Dim shapeColl As New Collection
shapeColl.Add BldOvImgDiv1
shapeColl.Add BldOvImgDiv2

' 循环设置属性
Dim shp As Shape
For Each shp In shapeColl
    shp.Line.ForeColor.RGB = RGB(0, 0, 0)
Next shp

方法3:连续使用With语句(简洁但复用性差)

如果只是两个对象,也可以连续写两个With语句,减少重复的属性路径:

Dim bow As Worksheet
Set bow = Sheets("Building Overwiew")
Dim BldOvImgDiv1 As Shape, BldOvImgDiv2 As Shape
Set BldOvImgDiv1 = bow.Shapes.AddConnector(msoConnectorStraight, 260, 4, 260, 325)
Set BldOvImgDiv2 = bow.Shapes.AddConnector(msoConnectorStraight, 8, 325, 535, 325)
BldOvImgDiv1.Name = "BuildingOverviewConnector1"
BldOvImgDiv2.Name = "BuildingOverviewConnector2"

With BldOvImgDiv1
    .Line.ForeColor.RGB = RGB(0, 0, 0)
End With
With BldOvImgDiv2
    .Line.ForeColor.RGB = RGB(0, 0, 0)
End With

内容的提问来源于stack exchange,提问作者Geographos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:43:24