2017-07-25 74 views
0

我在For-loop中創建形狀,並且我想讓每個形狀具有不同的名稱。因此,每個迭代中的ShapeSet 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

在你的問題'Cells()'應該是一個形狀數組?如果是這樣,那麼這是一個在VBA編程中覆蓋'Cells()'的標準含義的名稱的奇怪選擇。如果沒有,我不知道你在做什麼,因爲你不能設置一個單元格等於一個形狀。你是否試圖將新添加的形狀的名稱放入單元格中? –

回答

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 
+0

謝謝你的評論。我嘗試過'Shape.Name = Cells(GanttStartRow + i,1)&Cells(GanttStartRow + i,2)'。然而,後來當我想連接我的形狀時,我不能引用他們的名字,但我可以參考'形狀' – Jonas