• ベストアンサー

Excelで動的にイベントを作成する方法

Excelのシート上へコントロールを動的に生成,配置するVBAを作っています。とりあえず生成,配置は出来たのですが、そのコントロールに対し、イベントプロシージャを動的に作成するところが上手く出来ません。 Access VBAだと、「CreateEventProc」のキーワードでヘルプを調べると出てくるサンプルコードで動くのですが、同じものをExcel VBAで動かそうとするとエラーが出ます。 Excelでは動的にイベントプロシージャを作成できないのでしょうか?もし作成する方法をご存知の方いらっしゃいましたら、ご教授下さい。宜しくお願い致します。

  • Elvin
  • お礼率91% (33/36)

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

Access97のCreateEventProcの参考例には、フォームにコマンドボタンを貼り付け、Clickイベントを割り当てています。 同じようにExcelで作ってみました。こういう意味でした? Sheet1に、ボタンをVBAで作って、VBAで定義したマクロをVBEに書き込んでいます。若干、画面が切り替わるかもしれません。 VBEのツール→参照設定で、 Microsoft Visual Basic Editor for Application Extensibility にチェックします。 既にあるマクロをフォームのボタンに割り当てたりする場合はOnActionで可能です。(当方、Excel97です) (当然ですが、下のコードを2回、3回と動かすときは、作ったボタンと書きこんだコードは事前に消してください) Sub Add_ButtonAndMacro()   Dim bk As Workbook 'ブック   Dim sht As Worksheet 'シート   Dim rg As Range 'セル   Dim obj As OLEObject 'オブジェクト   Dim cdMoj As CodeModule 'コードモジュール   Dim Ln As Long '行カウンタ   Application.ScreenUpdating = False   Set bk = ThisWorkbook 'ブック   Set sht = ActiveSheet 'シート   Set rg = sht.Range("C4:G6") 'ボタンの位置。これは例   With rg 'ボタンを作る     Set obj = sht.OLEObjects.Add(classtype:="Forms.CommandButton.1", _                 link:=False, displayasicon:=False, _                 Left:=.Left, Top:=.Top, _                 Width:=.Width, Height:=.Height)   End With   obj.Object.TakeFocusOnClick = False   obj.Object.Caption = "VBAで書いたメッセージ呼出し"   'クリックイベント   Set cdMoj = ThisWorkbook.VBProject.VBComponents(sht.Name).CodeModule   Ln = cdMoj.CreateEventProc("Click", obj.Name)   cdMoj.InsertLines Ln + 1, "MsgBox ""VBAで追加したマクロです。"""   'VBE画面を閉める。   Application.VBE.MainWindow.Visible = False   Application.ScreenUpdating = True End Sub

Elvin
質問者

お礼

ありがとうございます!まさに悩んでいたポイントずばりです!MSDN見てもCreateEventProcはAccess用のメソッドだと書いてあるし、Excelじゃ動的に作成出来ないのかな、とあきらめかけていました...。本当にありがとうございます!!

関連するQ&A

  • ACCESSのリストボックスで複数選択した値をテーブルに保存するには?

    ACCESS2003でリストボックスを作成しました。 複数選択の設定までは出来ました。これを保存するのに イベントプロシージャでVBAの記述をする必要があるようですが どのように書いたらよいのかわかりません。 VBAは全くの初心者です。 サンプルコードまたはコードが出ているWEBサイトなどありましたら 教えていただければと思います。 よろしくお願いします。

  • Access2013イベントプロシージャのエラー

    Access2010でコードビルダーで作成したイベントプロシージャをAccess2013で実行するとエラーが出ます。エラーメッセージは[OLEサーバまたはActive X コントロールとのコミュニケーション時に起こります。] ヘルプメッセージは[イベントのロジックの箇所が正しく設定されていない場合に起こります。たとえば、フォームのOnOpenプロパティが =[Field]とセットされている場合、エラーが起こります] (スミマセン、英語のACCESSを使用しているのでエラーメッセージも英語なので、上記は表示された英語エラーメッセージの意訳です) 2010のマクロビルダーで作成したイベントプロシージャは2013でも問題なく実行されます。 どのように対応したらいいのか教えていただけますでしょうか?

  • エクセルで作成したリスト

    エクセルで作成したリスト(氏名・住所など10項目程度で200件ほどです)を各取引先ごとにブックを作成して(エクセルファイルでシートは6枚ある決まった書式です)ファイル名は取引先名にしたいのですがどのような方法がありますか? やはりマクロやVBAなどで作るのが一番でしょうか? マクロやVBAは初歩的な簡単なものは作ったことがありますがあまり詳しくありませんが出来るようなら挑戦してみたいのですがもしサンプルコードなど教えていただければお願いします。

  • フォームを作成すると同時にイベントを作成する方法は

    フォームを作成すると同時にイベントを作成する方法は? アクセスなのですが 標準モジュールで Sub フォームを作成() Dim myForm As Form Set myForm = CreateForm DoCmd.Close acForm, myForm.Name, acSaveYes End Sub をしたと同時に、 そのフォーム内に Private Sub Form_Open(Cancel As Integer) MsgBox "開きました" End Sub のようなイベントを同時に生成するにはどうすればいいでしょうか? クラスモジュールを使うのですか? クラスモジュールの使い方がまったくわからないのですが サンプルコードを頂けないですか?

  • AccessからExcelのコマンドボタンイベント

    Access2003 WinXP です。宜しくお願いします。 AccessのVBAでExcelファイルをコピーしたり開いたり テキストボックスの内容を書き換えたりしています。 Excelにてコントロールツールボックスから作成したコマンドボタンがあるのですが、このボタンのクリックイベントを AccessのVBAから実行させる方法を探しています。 ちなみに訳あって標準モジュールに書かれているわけではないので マクロを呼び出す方法は不可でした;; 標準モジュールに移すのは無しの方向で どなたか分かる方いらっしゃいましたらお願いします。

  • エクセルワークシートからVBA自動作成の方法

    エクセル2007を使用しています。 エクセルワークシートからVBAを自動作成する方法を探しています。 添付のエクセルワークシート01の4行目以降を1行づつ処理し、以下のVBAを自動作成したいです。 〔作成希望VBA〕 Public Sub aaa() sample = (1111, 2222, 3333) test = A End Sub Public Sub bbb() sample = (4444, 5555, 6666) test = B End Sub Public Sub ccc() sample = (7777, 8888, 9999) test = C End Sub 以上よろしくお願いします。

  • イベントプロシージャが動作しない

    アクセスVBAで、フォームでイベントプロシージャと指定し、該当イベントプロシージャをコーディングしてオブジェクト化しているのに、イベントプロシージャが動作しません。 何か良い解決方法がありましたら、教えていただけないでしょうか?よろしくお願いいたします。

  • ExcelにおけるDDEデータのイベントプロシージャについて

    DEEをつかって、Excelのセルにデータを出力しています。 そのセルのデータが変更された時に、自動でそのデータをコピーし別のシートにペーストしたいのですが、よろしければ助言をお願い致します。 イベントプロシージャの(worksheet_change)で試してみたのですが、任意でセルの値を変えないとプロシージャが動かず行き詰りました。 VBAも超初心者なのですが、よろしくお願い致します。

  • Excel VBAでQRコードを生成したい

    下記のようなExcelファイルがあります。 (Webシステムからのダウンロードで作られる.xlsmのファイル) このExcelを開くときに、各シートにB4セル(データ3)をもとにQRコードを生成したいです。    A  | B   1  タイトル(AB結合) QRコード(タイトルと同様のセル、タイトルの右側に配置) 2 項目名1 データ1 3 項目名2 データ2 4 項目名3 データ3 5 項目名4 データ4 ・シートはダウンロードするデータ数によるため変動 ・各シートに1つQRコードを生成 テンプレートを利用しダウンロードしているため、指定のセルにはもともと違う値が入っています・ ActiveXコントロールでは中身のデータが更新されない&シート2枚目以降にQRコードが生成されなかったためマクロで作成したいのですが、 インターネットで調べると1シート内の連続生成のみで シートごとの繰り返し方がわからなかったので投稿させていただきました。 ご教授よろしくお願い致します。

  • フォームモジュールが作られない

    アクセスです。 新規でフォーム1を作成し、何もしないで(いじらないで)保存し、 VBE画面でフォーム1のForm_Loadイベントにコードを記述しようと思っても、  画像のようにフォームモジュールがありません。 フォームのデザインビューから適当に何かのイベントプロシージャーのボタンを押せば、 フォームモジュールが生成されます。 これは仕様でしょうか? エクセルは最初からシートモジュールやブックのモジュールがありますよね。

専門家に質問してみよう