使用VBA创建自由形状时出现Shape类型不匹配错误,求解决
VBA创建自由形状时的类型不匹配错误解决方法
我尝试运行以下VBA代码创建自由形状:
Sub builder() Dim shpbld As FreeformBuilder Dim shp As Shape shpbld = ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 240.5, 60) With shpbld .AddNodes msoSegmentLine, msoEditingAuto, 202.25, 60 .AddNodes msoSegmentLine, msoEditingAuto, 185, 105 .AddNodes msoSegmentLine, msoEditingAuto, 239.75, 105 shp = .ConvertToShape.Select End With End Sub但代码中的shp变量触发了类型不匹配错误,请问我哪里操作出错了?
错误原因及修正方案
- 对象变量赋值缺少
Set关键字:VBA中为对象类型变量(如FreeformBuilder、Shape)赋值时,必须使用Set关键字,直接赋值会触发类型不匹配。 ConvertToShape.Select的返回值类型错误:ConvertToShape方法返回Shape对象,但追加.Select后,返回的是布尔值(表示选中操作是否成功),将布尔值赋值给Shape类型的shp变量,必然导致类型不匹配。
修正后的代码
Sub builder() Dim shpbld As FreeformBuilder Dim shp As Shape ' 对象变量赋值需使用Set Set shpbld = ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 240.5, 60) With shpbld .AddNodes msoSegmentLine, msoEditingAuto, 202.25, 60 .AddNodes msoSegmentLine, msoEditingAuto, 185, 105 .AddNodes msoSegmentLine, msoEditingAuto, 239.75, 105 ' 先获取Shape对象,再单独执行选中操作 Set shp = .ConvertToShape shp.Select End With End Sub
内容的提问来源于stack exchange,提问作者Barbarian
相关产品推荐
相关产品推荐

