幼稚園時代「何組」でしたか?

エクセル2000を使用してます
オートシェイプをクリックしたときはわかるのですが・・・
Sub オートシェイプ14_Click()
Dim objShape As Shape
Dim ShapeName As String
Set objShape = ActiveSheet.Shapes(Application.Caller)
ShapeName = objShape.Name
End Sub

新規でオートシェイプ作成されたとき、その名前を取得するにはどうしたらいいのでしょう。
作成された順番にセルに表示したいのです

A 回答 (2件)

>新規でオートシェイプ作成されたときは可能でしょうか



既に作成されているか、新たに作成されたかを判断するためには
そのブックを開いたときに、既に作成されているShapeの数をとっておき、それと比較して多ければ、新規Shapeありということになりますね。
で、それを利用する方法。

'-----------------------------------------------
' ●標準モジュールへ貼り付け
'---------------------------------------------

 Public OldShapesCnt

Sub test333()
 Dim R As Integer
 Dim N As Integer

'既存のシェイプ(A列へ表示)

 For N = 1 To OldShapesCnt
  R = R + 1
  Range("A1").Offset(R).Value = Sheets("Sheet1").Shapes(N).Name
 Next N

 R = 0

'新規のシェイプ(B列へ表示)

 For N = OldShapesCnt + 1 To Sheets("Sheet1").Shapes.Count
  R = R + 1
  Range("B1").Offset(R).Value = Sheets("Sheet1").Shapes(N).Name
 Next N

End Sub
'-----------------------------------------------------

●ここからは、ThisWorkbookモジュールへ貼り付け
'-----------------------------------------------

Private Sub Workbook_Open()
  OldShapesCnt = Sheets("Sheet1").Shapes.Count
End Sub

'------------------------------------------------

(1)先ず、Sheet1 にシェイプをいつくか配置
(2)ブックを保存、終了

ここまではテストの前処理

(3)ブックを開く
(4)Sheet1 にシェイプを追加
(5)マクロを実行

これで、ブックを開いたときからSheet1に新規作成されたシェイプ名が以下のように表示されます。

A列に、既存のシェイプ名
B列に、新規のシェイプ名

以上。
    • good
    • 0
この回答へのお礼

おぉ~~!!
出来ました!助かりました!\(^o^)/

有難うございます!!

お礼日時:2008/02/21 20:44

>作成された順番にセルに表示したいのです



であればShpapesコレクションを順番に見ていけばいいです。
A列に名前を表示する場合
'--------------------------------------------
Sub test()
  Dim R As Integer
  Dim myShape As Shape

  For Each myShape In ActiveSheet.Shapes
    R = R + 1
    Range("A1").Offset(R).Value = myShape.Name
  Next myShape
End Sub
'---------------------------------------------

以上。
    • good
    • 0
この回答へのお礼

早速の回答有難うございます
既に作成済のシェイプでは出来ました!

>新規でオートシェイプ作成されたとき
は可能でしょうか

お礼日時:2008/02/21 17:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!