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

问题描述 投票:1回答:1

我在使用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格式化一个形状的[[group而不是组中每个单独的形状。有谁知道该怎么做?同样,此问题不仅限于应用阴影效果。将任何效果应用于一组形状时,问题也相同。

excel excel-vba shapes vba
1个回答
0
投票
。RotateWithShape应该读为msoFalse,而不是mosFalse,因此注释掉后它起作用的原因。
© www.soinside.com 2019 - 2024. All rights reserved.