在使用VBA将影子效果应用于Excel中的一组形状时,我发现了一个相当奇怪的问题。
假设我有两个形状,如下图所示,一个正方形和一个三角形相邻,我将其分组到名为 MyGroup 的组中。我现在想要做的是对这组形状应用阴影效果。我可以通过选择组然后调整我想要的阴影设置来完成此操作。
现在,最后我想要将此例程作为我正在处理的VBA代码项目的一部分。因此,我试图通过VBA将完全相同的效果应用于形状组。我可以为此任务提出的代码是
Sub AddShadowToGroup()
With ActiveSheet.Shapes.Range("MyGroup").Shadow
.Type = msoShadow21
.RotateWithShape = mosfalse
End With
End Sub
运行此代码的最终结果是它将阴影效果应用于组中的每个单独形状,这具有看起来像这样的不幸副作用。
另请注意,在第二张图片中,没有为所选组设置阴影效果。
即。对于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形状的方法。有谁知道如何做到这一点?此外,此问题不仅限于应用阴影效果。将任何效果应用于一组形状时,问题是相同的。
答案 0 :(得分:0)
.RotateWithShape应该读为msoFalse,而不是mosFalse,因此注释后它起作用的原因。