プロが教えるわが家の防犯対策術!

VBAでワークシートにOLEObjectsのコマンドボタンを設置してるのですが
ボタンのオブジェクト名をVBAで指定するにはどうすればいいでしょうか?

Private Sub CommandButton1_Click()

With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False)
.Object.Name = "ボタン1"
.Object.Caption = "ボタン"
.Object.Font.Size = 9
.Width = ActiveCell.Width
.Height = ActiveCell.Height
End With

End Sub

を実行すると、
.Object.Name = "ボタン1"
の部分で
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」というエラーになります。

他のコードは大丈夫です。
オブジェクト名をVBAで指定する方法を教えてください。
当方エクセル2003です。

A 回答 (3件)

#2です。


もし、私の勘違いだったらすみません。後になって気がついたことです。
一体、この後、どうするのかなっていう疑問が沸きました。

>他のコードは大丈夫です。

という言葉に引っかかってしまいました。そのOLEボタンを取り付けるコードって、VBAでは難易度上級になります。OLEボタンを生成した後、マクロはどうなっているのでしょうか。OLEの場合は、インスタンスしか付けられないように思います。そもそも、オブジェクト名をカスタマイズするのは、インスタンスを生成する時に必要になるからで、それ以外は、使わないはずです。どこかのサイトでご覧になって、試しているのでしたら、問題ないとは思います。

質問のレベルと、コードの内容が一致していませんので、気になりました。

通常、私が覚えてきた方法は、例えば、以下のようなフォームコントロールにします。オブジェクト名は、それほど重要ではありません。

 Dim Lt As Double
 Dim Tp As Double
 Dim Wd As Double
 Dim Ht As Double
 With ActiveCell
  Lt = .Left: Tp = .Top: Wd = .Width: Ht = .Height
 End With
 With ActiveSheet '←本来はボタンには少し変です。Me キーワードのほうがよい
  With .Buttons.Add(Lt, Tp, Wd, Ht)
   .Caption = "ボタン"
   .OnAction = "MyMacro" '標準モジュールに登録したマクロ名
  End With
 End With
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2012/10/20 19:27

>オブジェクト名をVBAで指定する方法を教えてください。



 .Object.Name = "ボタン1"
  ↓
 .Name = "ボタン1"

にしたところで、その部分は、エラーが出ないだけで、一回きりしか生きていないはずです。
その後、どうするかによっても決まりますが、動的に名前を付けるか、もしも、オブジェクト名をシステム側の命名に任せてしまうなら、その行は不要だと思います。

「動的に名前を付ける」とは、
例:
.Name = "ボタン" & OLEObjects.Count 'ただし、ボタンだけなら、2から始まる
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2012/10/20 19:27

変更前:


.Object.Name = "ボタン1"

変更後:
.Name = "ボタン1"

です。
    • good
    • 0
この回答へのお礼

「Object」が不要だったようですね。ありがとうございました。

お礼日時:2012/10/10 07:19

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A