2015-10-19 131 views
-2

我在這裏要做的是給工作表中的所有形狀一個數字。 每個形狀的數字必須加1,因此它應該看起來像這樣。計數形狀

請記住,這些形狀是動態的(並不總是2列,3行)

Showcase

這是我試過的代碼,但似乎並沒有工作

Sub Nummer() 

Dim lngShapes As Long 
lngShapes = ActiveSheet.Shapes.Count 

For teller = 1 To lngShapes 
ActiveSheet.Shapes(teller).Value = teller 
Next 

End Sub 
+1

你的標題似乎沒有用*給工作表中的所有形狀一個數字*。 *似乎不起作用*在這裏意味着什麼? – pnuts

+0

圖片只是它應該看起來的一個例子,如果我運行代碼,它會給出錯誤「438」,指的是「ActiveSheet.Shapes(teller).Value = teller」行。 – Iluvpresident

回答

1

當試圖設置形狀內的值(文本)時,您會得到Error 438,因爲形狀集合沒有要設置的Value屬性。您需要使用.TextFrame.Characters.Text

如果更改線路

ActiveSheet.Shapes(teller).Value = teller 

ActiveSheet.Shapes(teller).TextFrame.Characters.Text = teller 

您的代碼將工作。

1

看起來這個問題實際上是「循環遍歷紙張中的所有形狀」。像下面應該使用:

Sub nameTheShapes() 
    Dim shp As Shape 
    For Each shp In Sheet1.Shapes 
     shp.TextFrame2.TextRange.Characters.Text = shp.ID 
    Next 
End Sub 

這裏我們聲明shape變量名shp。然後我們遍歷sheet1中的所有shapes。然後我們將形狀id寫入形狀的textframe2

如果你有一些圖表掛在同一個頁面上,那麼你可能不想包括他們,這樣你就可以測試shp.type屬性一看就知道這不是一個圖表:

Sub nameTheShapes() 
    Dim shp As Shape 
    For Each shp In Sheet1.Shapes 
     If shp.type = 1 Then 
      shp.TextFrame2.TextRange.Characters.Text = shp.ID 
     End If 
    Next 
End Sub 
+0

當我嘗試使用此代碼時,出現「運行時錯誤」-2147024809(80070057)'「。顯然,如果應用於不能包含文本的形狀,會出現此錯誤。我使用此代碼添加一個形狀,也許你知道如何解決這個問題? 「ActiveSheet.Shapes.AddShape(msoShapeRectangle,ActiveCell.Left,ActiveCell.Top,100,40)。選擇」 – Iluvpresident

+0

如果它始終總是一個矩形,那麼可以將'if'語句更改爲'if shp.AutoShapeType = msoShapeRectangle then' – JNevill