Excel中基于其他工作表单元格值改形状颜色遇运行时错误438
解决VBA运行时错误438:更改形状填充颜色的正确代码
错误原因
代码中Sheet2.Shapes.Range(Array("Shape_1")).ShapeRange是冗余写法:Shapes.Range(Array("Shape_1"))本身就返回包含目标形状的ShapeRange对象,额外添加的.ShapeRange属于无效调用,触发了「对象不支持该属性或方法」的438错误。
修正后的代码
写法一(更简洁,直接通过形状名称调用)
Sub Change_Shape_Color() If Sheet1.Range("A1").Value <> "" Then Sheet2.Shapes("Shape_1").Fill.ForeColor.RGB = RGB(0, 128, 0) Else Sheet2.Shapes("Shape_1").Fill.ForeColor.RGB = RGB(255, 0, 0) End If End Sub
写法二(修正原代码的冗余部分)
Sub Change_Shape_Color() If Sheet1.Range("A1") <> "" Then Sheet2.Shapes.Range(Array("Shape_1")).Fill.ForeColor.RGB = RGB(0, 128, 0) Else Sheet2.Shapes.Range(Array("Shape_1")).Fill.ForeColor.RGB = RGB(255, 0, 0) End If End Sub
验证注意事项
- 确认Sheet2中存在**名称为"Shape_1"**的形状(形状名称可通过「开发工具→形状名称」查看,注意区分形状名称和工作表标签名)
- 确保代码中
Sheet1是工作表的代码名称(VBA编辑器工程窗口中显示的名称,而非工作表标签上的名称;若需使用标签名,替换为Sheets("你的Sheet1标签名"))
内容的提问来源于stack exchange,提问作者Prabhat Vishwas
相关产品推荐
相关产品推荐

