可以使用 excel 中的免费工具(“Freeform:Shape”或“Freeform:Scribble”)创建具有开放或封闭轮廓的形状。“打开”或“关闭”,它们的类型是“msoFreefrom”,我找不到任何属性来通过读取值来区分它们。
Excel以某种方式区分它们。当我单击其中一个形状“格式”选项卡时,它的内容会根据形状的轮廓而变化。(开放轮廓形状如线,闭合轮廓形状如正方形)。
我想在vba中区分它们。我通过在 vba 中引起错误来管理它。对于闭合轮廓形状,如果您尝试设置线箭头,则会引发错误。(请参见下面的代码)有更好的方法吗?
Sub Try01()
ActiveWindow.DisplayGridlines = False
Dim ws As Worksheet
Set ws = ActiveSheet
Dim ds As Shape
For Each ds In ws.Shapes
ds.Delete
Next ds
Dim myShape As Shape, myShape2 As Shape
' Open contour shape
With ws.Shapes.BuildFreeform(msoEditingAuto, 100, 100)
.AddNodes msoSegmentLine, msoEditingAuto, 200, 100
.AddNodes msoSegmentLine, msoEditingAuto, 200, 200
.AddNodes msoSegmentLine, msoEditingAuto, 100, 200
'.AddNodes msoSegmentLine, msoEditingAuto, 100, 100
Set myShape = .ConvertToShape
End With
myShape.Name = "MyL"
'Closed contoru shape
With ws.Shapes.BuildFreeform(msoEditingAuto, 300, 100)
.AddNodes msoSegmentLine, msoEditingAuto, 400, 100
.AddNodes msoSegmentLine, msoEditingAuto, 400, 200
.AddNodes msoSegmentLine, msoEditingAuto, 300, 200
.AddNodes msoSegmentLine, msoEditingAuto, 300, 100
Set myShape2 = .ConvertToShape
End With
myShape2.Name = "MyS"
'You can set styles no error
myShape.ShapeStyle = myShape2.ShapeStyle
Debug.Print myShape.Line.BeginArrowheadStyle
'Open contour you can change line arrow type
myShape.Line.BeginArrowheadStyle = msoArrowheadDiamond
Debug.Print myShape2.Line.BeginArrowheadStyle
'But for closed contour you can not
myShape2.Line.BeginArrowheadStyle = msoArrowheadDiamond
End Sub
谢谢您的帮助 :)