• ベストアンサー

オートシェイプの位置

エクセルですが。 セレクトされているオートシェイプを所定の位置に配置するマクロとして、以下は動作するのですが。 Selection.ShapeRange.Left = 250 Selection.ShapeRange.Top = 100 名前ボックスからオートシェイプの名前を aaa に変更し、以下のマクロを実行すると、いずれもエラーになってしまいます。 aaa.ShapeRange.Left = 250 aaa.ShapeRange.Top = 100 aaa.Left = 250 aaa.Top = 100 どこが間違っているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1でご回答のように、名前だけでは動きませんね。 コレクションの中の一員として、その名前を指定すると言うイメージでしょうか。 ○○のコレクション名(名前) か ○○のコレクション名(インデックス番号) ただし http://homepage2.nifty.com/kasayan/vba/excel95tip.htm にあるように、エクセルシートなどでは 「EXCEL2000では、上記の記述の仕方でもO.K.ですが、Sheet1のように固有のオブジェクト名(nameプロパティ)を直接記述していくことが可能です」 とか Sub test01() Worksheets("Sheet1").TextBox1.Font.Size = 13 End Sub のTextbox1 というのもあり、ややこしい。 その他参考 http://hp.vector.co.jp/authors/VA016119/excel/vbafaq02.html

dnf476
質問者

お礼

ありがとうございました。 解決いたしました。

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

詳しい知識はありませんけど、Sheet1のシート名を「aaa」に変えて aaa.Select が動かないのと同じで、ここでの名前は単なるプロパティであってオブジェクトでは無いからだと思います。   ActiveSheet.Shapes("aaa").Left = 0   ActiveSheet.Shapes("aaa").Top = 100 とか  Dim sh As Shape   Set sh = ActiveSheet.Shapes("aaa")   sh.Left = 40:   sh.Top = 40 とか

dnf476
質問者

お礼

ありがとうございました。 解決いたしました。

関連するQ&A

専門家に質問してみよう