我在For-loop中创建形状,我希望每个形状都有不同的名称。因此,每次迭代中Shape
中的Set Shape = ...
都应将Shape替换为动态变量。
如果我通过Set Shape = w.Shapes.AddShape(msoShapeRectangle, 10,10,10,10)
放置形状,我怎么能Shape
(形状的名称)是动态的,例如Set Cells(1 + i, 1) = w.Shapes.AddShape(msoShapeRectangle, 10,10,10,10)
...以便每个形状都有不同的名称。我也试过了Shape.Name =
,这似乎与创建形状时设置名称没有相同的效果。
我为循环中创建的每个形状指定一个名称:
Shape.Name = Cells(GanttStartRow + i, 1) & Cells(GanttStartRow + i, 2)
我通过连接器设置
Set conn = w.Shapes.AddConnector(msoConnectorElbow, 1, 1, 1, 1)
conn.ConnectorFormat.BeginConnect D, 1
conn.ConnectorFormat.EndConnect WP, 1
...但收到"类型不匹配"错误。
答案 0 :(得分:2)
假设ws是您正在使用的工作表:
Dim s As Shape, i as integer
for i = 1 to 5
Set s = ws.Shapes.AddShape(msoShapeRectangle, 50 + i * 120, 200, 100, 100)
s.Name = "MyShapeName" & i
next i
您可以稍后按名称访问形状:
For i = 1 To 5
Set s = ws.Shapes("MyShapeName" & i)
s.Fill.BackColor.RGB = RGB(0, 255 - i * 50, i * 50)
s.BackgroundStyle = i
Next i
然而,另一种方法是遍历所有形状:
For Each s In ws.Shapes
Dim i As Integer
if left(s.Name, 1, 11) = "MyShapeName" then
i = Val(Mid(s.Name, 12))
s.Top = s.Top + i * 4
end if
Next s