こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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です。

投稿日時 - 2012-10-09 20:16:09

QNo.7740448

困ってます

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

#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

投稿日時 - 2012-10-10 12:50:28

お礼

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

投稿日時 - 2012-10-20 19:27:19

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

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

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

「動的に名前を付ける」とは、
例:
.Name = "ボタン" & OLEObjects.Count 'ただし、ボタンだけなら、2から始まる

投稿日時 - 2012-10-10 08:12:19

お礼

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

投稿日時 - 2012-10-20 19:27:17

ANo.1

変更前:
.Object.Name = "ボタン1"

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

です。

投稿日時 - 2012-10-10 00:05:38

お礼

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

投稿日時 - 2012-10-10 07:19:40

あなたにオススメの質問