2015-10-19 128 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