PowerPoint点击切换形状颜色宏无效问题排查
问题分析与解决
不需要给形状指定特定名称,问题完全出在VB代码本身,具体问题和修复方案如下:
代码存在的核心问题
- 声明了变量
oSh但从未赋值,代码里一直操作的是未初始化的空对象,自然不会有任何反应 - 两个
If语句顺序执行,就算第一个If把红色改成绿色,第二个If会立刻检测到绿色并改回红色,等于没有完成切换动作
修正后的代码
Sub ChangeShapeColour(ByRef oShp As Shape) ' 直接使用传入的形状对象,无需额外声明空变量 If oShp.Fill.ForeColor.RGB = RGB(199, 70, 52) Then ' 红色切换为绿色 oShp.Fill.ForeColor.RGB = RGB(117, 156, 108) ElseIf oShp.Fill.ForeColor.RGB = RGB(117, 156, 108) Then ' 绿色切换为红色 oShp.Fill.ForeColor.RGB = RGB(199, 70, 52) End If End Sub
额外优化(可选)
如果形状初始颜色不是红/绿,点击后不会有变化,要是需要默认切换到其中一种颜色,可以再加一个Else分支:
Sub ChangeShapeColour(ByRef oShp As Shape) If oShp.Fill.ForeColor.RGB = RGB(199, 70, 52) Then oShp.Fill.ForeColor.RGB = RGB(117, 156, 108) ElseIf oShp.Fill.ForeColor.RGB = RGB(117, 156, 108) Then oShp.Fill.ForeColor.RGB = RGB(199, 70, 52) Else ' 初始颜色非红/绿时,默认设为红色 oShp.Fill.ForeColor.RGB = RGB(199, 70, 52) End If End Sub
内容的提问来源于stack exchange,提问作者Whitney Hamilton
相关产品推荐
相关产品推荐

