重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Excelでシートにコマンドボタンを作成し、そのボタンにクリックイベントを追加したく、No.321427「Excelで動的にイベントを作成する方法」にあるようにやってみたのですが、実行時エラーが出ます。
ご存知の方がいらっしゃいましたら、ご回答お願いいたします。

'ボタン生成
Dim mn As OLEObject
Dim nw_sht As Worksheet
Dim cdMoj As CodeModule
Dim Ln As Long
Set mn = nw_sht.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=510, Top:=10, Height:=20, Width:=100)
mn.Name = "メニューへ"
mn.Object.Caption = "メニューへ"
mn.Object.TakeFocusOnClick = False

'イベント追加
Set cdMoj = ThisWorkbook.VBProject.VBComponents(nw_sht.CodeName).CodeModule
Ln = cdMoj.CreateEventProc("Click", mn.Name)
cdMoj.InsertLines Ln + 1, " Load メニュー"
cdMoj.InsertLines Ln + 2, " メニュー.Show"
'ここまで

エラー:実行時エラー424 オブジェクトが必要です
環境:Excel2000
*えらー終了するとボタンは作成できていて、クリックイベントも機能しています。

A 回答 (2件)

このコーディリングのエラーの原因をお尋ねのところ


別のことを申し上げて済みません。
コマンドボタンコントロールは、ツールボックスから手動で貼りつけするのが、VB(A)ひいては、最近のソフト界の推奨のようですが、どうですか。それなら簡単だし、ダブルクリックして出てくる
Private Sub CommandButton1_Click()
End Sub
にコードを書けばエラーは起こらないのでは。
コーディング例を真似たためか、こうするべきものなのか、随分難しい高等な?組み方構成になっているように見えますが、私のように学習不十分なものには、良く判らないのですが。
    • good
    • 0
この回答へのお礼

シートにコマンドボタンを置いておければ、
もちろんおっしゃる方法をとりますが、
今回は都度新しいシートが対象のため、
ボタンの生成とイベントの追加を動的に行いたかったのです。
説明が分かりにくくてすみません。
ただ、いろいろ調べましたが一般的によく使われる方法でないのは確かなようですので、
シートに貼り付ける以外の方法を考え中です。
また何かアドバイスがありましたらよろしくお願いします。
ありがとうございました。

お礼日時:2004/01/22 10:50

かなり前に考えたことがあります。


だいぶ忘れてしまいましたが、下のようにすれば動きませんか。

『Name』プロパティになにか意味があったと思いますが、忘れてしまいました。


Sub AddButton()

  'ボタン生成
  Dim mn As OLEObject
  Dim nw_sht As Worksheet
  Dim cdMoj As CodeModule
  Dim Ln As Long

  '//== 追加 ====================
  Set nw_sht = ActiveSheet
  '==============================

  Set mn = nw_sht.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
                   Link:=False, DisplayAsIcon:=False, _
                   Left:=510, Top:=10, Height:=20, Width:=100)
  '//== コメント行に変更 =========
  'mn.Name = "メニューへ"
  '==============================

  mn.Object.Caption = "メニューへ"
  mn.Object.TakeFocusOnClick = False

  'イベント追加
  Set cdMoj = ThisWorkbook.VBProject.VBComponents(nw_sht.CodeName).CodeModule
  Ln = cdMoj.CreateEventProc("Click", mn.Name)
  cdMoj.InsertLines Ln + 1, " Load メニュー"
  cdMoj.InsertLines Ln + 2, " メニュー.Show"
  'ここまで

End Sub

この回答への補足

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

やってみましたが同じ状況でした。
『Name』のところだけ『.Object』がいらないのはなんでかなと思っていたんですが、私もよく分かりません。。

あとコードの部分、見やすく整形していただいてありがとうございます。

補足日時:2004/01/21 20:33
    • good
    • 0
この回答へのお礼

今回はフォームを使うことでこの問題を回避することにしました。
ありがとうございました。

お礼日時:2004/01/27 17:22

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