在Excel中使用VBA将阴影效果添加到形状组

时间:2017-05-07 21:58:28

标签: excel excel-vba shapes vba

在使用VBA将影子效果应用于Excel中的一组形状时,我发现了一个相当奇怪的问题。

假设我有两个形状,如下图所示,一个正方形和一个三角形相邻,我将其分组到名为 MyGroup 的组中。我现在想要做的是对这组形状应用阴影效果。我可以通过选择组然后调整我想要的阴影设置来完成此操作。

enter image description here

现在,最后我想要将此例程作为我正在处理的VBA代码项目的一部分。因此,我试图通过VBA将完全相同的效果应用于形状组。我可以为此任务提出的代码是

Sub AddShadowToGroup()
    With ActiveSheet.Shapes.Range("MyGroup").Shadow
        .Type = msoShadow21
        .RotateWithShape = mosfalse
    End With
End Sub

运行此代码的最终结果是它将阴影效果应用于组中的每个单独形状,这具有看起来像这样的不幸副作用。 enter image description here

另请注意,在第二张图片中,没有为所选组设置阴影效果。

即。对于VBA,上面的代码相当于格式化每个形状,如

Sub AddShadowToGroup()
    With ActiveSheet.Shapes.Range("Triangle").Shadow
        .Type = msoShadow21
        .RotateWithShape = mosfalse
    End With
    With ActiveSheet.Shapes.Range("Square").Shadow
        .Type = msoShadow21
        .RotateWithShape = mosfalse
    End With
End Sub

在这个简单的例子中,解决方案可以是将方块相对于三角形移动到前面。这样,来自三角形的阴影将以几乎可接受的方式隐藏在正方形之外。然而,在我正在研究的项目中,我需要一个更复杂的多种形状结构,在这种情况下,战略性地排序不同形状的想法并没有完全削减它。

我似乎无法想出一种让VBA格式化形状而不是组中每个sperate形状的方法。有谁知道如何做到这一点?此外,此问题不仅限于应用阴影效果。将任何效果应用于一组形状时,问题是相同的。

1 个答案:

答案 0 :(得分:0)

.RotateWithShape应该读为msoFalse,而不是mosFalse,因此注释后它起作用的原因。