[[20221103103931]] 『フォームコントロールのNameプロパティ』(匿名) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『フォームコントロールのNameプロパティ』(匿名)

 コントロールのNameプロパティはユニークな名前にしないとダメと思い込んでいたのですが
 フォームコントロールでは、以下のように、同じ名前を設定できてしまいます。
 削除すると、1つしか削除されないので、内部的には区別されてる(作成順?)みたいです。
 実行時エラーだと、納得するのですが、仕様なので仕方ない話ですが、とても気持ち悪いです。
 当方Excel2021ですが、他のバージョンでも同様でしょうか?

 Sub フォームコントロールの実験()
    Dim btn1 As Button, btn2 As Button
    Set btn1 = ActiveSheet.Buttons.Add(0, 0, 100, 50)
    Set btn2 = ActiveSheet.Buttons.Add(100, 100, 100, 50)
    btn1.Name = "btn1"
    btn2.Name = "btn1"
    MsgBox "Nameプロパティは同じでも削除されるのは1つです。"
    ActiveSheet.Shapes("btn1").Delete
 End Sub

< 使用 アプリ:Excel2021、使用 OS:Windows10 >


 Excel2010、Excel2013、Micrsoft365

 いずれも、同様の振る舞いでした。 

(半平太) 2022/11/03(木) 11:17:37


 了解です。
 半平太様、検証、感謝します。

(匿名) 2022/11/03(木) 11:38:40


 2013です。こちらも同様です。

 >内部的には区別されてる(作成順?)みたいです。
 >仕様なので仕方ない話ですが、とても気持ち悪いです。
 Set でオブシェクト変数に格納していますよね。
 btn1 というオブシェクト、btn2 というオブシェクトになります。
 それぞれ別物です。
 オブシェクトが違うからです。
「区別されてる」はこういうことだったんです。
 >同じ名前を設定できてしまいます。
 ですからオブシェクトが違うので同じ名前でも構わないということです。

 同じ名前を消す必要があるならそれぞれオブシェクト名を指定しましょう。

(???) 2022/11/03(木) 12:10:37


 え、Nameプロパティが「オブシェクト名」じゃないんですか?
 Captionプロパティなら同じ名前でも納得なんですけど...

(匿名) 2022/11/03(木) 12:15:56


 ShapesのAddFormControlメソッドではちゃんとエラーになってくれました。
 Buttonクラス等はレガシーな型でMSとしてはShapeを使えという事なのかな....

https://learn.microsoft.com/ja-jp/office/vba/api/excel.shapes.addformcontrol

 Sub ShapesのAddFormControlメソッドを使ってみる()
    Dim btn1 As Shape, btn2 As Shape
    Set btn1 = ActiveSheet.Shapes.AddFormControl(xlButtonControl, 0, 0, 100, 50)
    Set btn2 = ActiveSheet.Shapes.AddFormControl(xlButtonControl, 100, 100, 100, 50)
    btn1.Name = "btn1"
    btn2.Name = "btn1"
 End Sub

(匿名) 2022/11/03(木) 13:48:30


 >え、Nameプロパティが「オブシェクト名」じゃないんですか?
 オブシェクトとプロパティについて調べてください。
 全て勘違いされているようです。
 >ShapesのAddFormControlメソッドではちゃんとエラーになってくれました。
 何が違うかは自分で考察してください。

 ここで退散します。
(???) 2022/11/03(木) 15:09:34

  質問は何なのですか?

  >仕様なので仕方ない話ですが、とても気持ち悪いです。

  気持ち悪いのは同感ですが、仕様ですからねぇ。
   エラーにさせなかったミスなのか、
   エラーにしないように配慮してくれたのか
  ユーザーレベルでは判断つかないです。

  いずれにしても、何らかの形で区別できるように工夫しなければならない事情は
  一緒なので、そんなに目くじら立てることでもないと思うのですが・・

  逆にお聞きしますが、このコードを書いて、あとでどう区別するお積りだったのですか? 
  > btn1.Name = "btn1"
  > btn2.Name = "btn1"

 区別する必要がなければ、何も問題視するものもない様な気がしますけども。

(半平太) 2022/11/03(木) 16:09:26


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.