| 
    
     |  | ▼こまったちゃん さん: こんにちは。
 
 >同一シート内に同一オートシェイプ名が複数有った場合、
 >シートの1ページ目から該当のオートシェイプ名(例えばAS1)を指定し、
 >名前を変更したいのですが、
 >なぜか、最後のページのオートシェイプ名が変わります。
 >直前に1ページ目のあるセルをセレクトしても駄目でした。
 >
 >なぜ同一シート内に同一オートシェイプ名が複数有るかというと、
 >ある1ページ1シートをある個数分コピーして帳票を出すという処理を
 >やりたいためです。
 >セル指定だと、うまくレイアウトできないため、オートシェイプを使用しています。
 
 上記の現象は、新規ブック(Sheet1とSheet2 というシート名が存在する)
 の標準モジュールに以下のコード(main)を実行すると再現できます。
 
 '========================================================
 Sub main()
 Dim g0 As Long
 Dim shp As Shape
 With Worksheets("sheet1")
 .Select
 Set shp = txt(.Range("a1"))
 shp.Name = "shp1"
 End With
 With Worksheets("sheet2")
 .Select
 For g0 = 1 To 3
 Worksheets("sheet1").Rows("1:10").Copy
 .Rows("1:1").Insert Shift:=xlDown
 Next
 .Shapes("shp1").Select '行の下の図形が選択される
 End With
 End Sub
 '========================================================
 Function txt(ByVal rng As Range) As Shape
 With rng
 Set txt = .Parent.Shapes.AddTextbox(msoTextOrientationHorizontal, _
 .Left, .Top, .Width, .Height)
 End With
 End Function
 
 
 そもそも同一シートに同じ名前の図形が存在することは
 バグだと思いますけどねえ!!
 
 コピー時に図形の名前を一意に決まるものに変えるというのはいかがですか?
 
 再度、新規ブック(Sheet1とSheet2 というシート名が存在する)
 の標準モジュールに
 
 '===================================================================
 Sub main2()
 Dim g0 As Long
 Dim shp As Shape
 With Worksheets("sheet1")
 .Select
 Set shp = txt(.Range("a1"))
 shp.Name = "shp1"
 End With
 With Worksheets("sheet2")
 .Select
 For g0 = 1 To 3
 Worksheets("sheet1").Rows("1:10").Copy
 .Rows("1:1").Insert Shift:=xlDown
 .Shapes("shp1").Name = "shp" & 3 - g0 + 1
 Next
 .Shapes("shp1").Select '行の上の図形が選択される
 End With
 End Sub
 '=================================================================
 Function txt(ByVal rng As Range) As Shape
 With rng
 Set txt = .Parent.Shapes.AddTextbox(msoTextOrientationHorizontal, _
 .Left, .Top, .Width, .Height)
 End With
 End Function
 
 として、main2を実行してみてください。
 
 これで図形にユニークな名前が付けられました。
 
 検討してみてください。
 
 |  |