• ベストアンサー

EXCEL2000(VBA) イベントの取得について

EXCEL2000のVBAで多くのコマンドボタンを設置したのですが、 これは面倒だと思って、Collectionプロパティを使ってコード部では うまくボタンを配列で扱えるようになったのですが、問題はボタンが押された時のイベント時です。 VB6.0とかだとコマンドボタンのオブジェクト名自体に配列を付けることが出来て、 尚かつ、このボタンを押された時、配列の何番目のがクリックされたのかなど、 Private Sub xxxxx_Click(Index As Integer) のように出来たと思います。 VBA(EXCEL2000)でCollectionでとった配列の何番目のボタンを押されたなど、 配列の要素を取得することは可能でしょうか?

  • yo-he
  • お礼率35% (34/97)

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

  • ベストアンサー
  • zerosix
  • ベストアンサー率31% (47/149)
回答No.1

出来ますよ。サンプルを見つけたのでやってみてください。

参考URL:
http://www.moug.net/skillup/opm/opm08-01.htm
yo-he
質問者

お礼

すみません、手違いでお礼を補足の欄に書いてしまいました。

yo-he
質問者

補足

アドバイスありがとうございます。 クラスモジュールですか?けっこう難しいそうですが、 頑張って実現させてみたいと思います。 また何か有りましたら宜しくお願いします。 ありがとうございました。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 Collectionプロパティ? Collectionオブジェクトのことですよね。 VB6.0のコントロール配列のことですね。 残念ながら、VBAにはコントロール配列の機能はなかったと思います。 したがって、各コントロール1つずつにイベントを書かなければいけないと思います。 ただし、共通化出来る部分はプロシージャ化すればいいとは思います。 Collectionオブジェクトでは、一度にプロパティの値を設定したりする時に便利ですね。 IndexをカウンタにしてForループとかで回せばいいわけですから。 私は、テキストボックスをCollection化して、一度に内容のクリアをしたり、使用可/不可や表示/非表示の切り替えなどで利用しています。 イベントはあきらめています(笑)。 あとは、VB6.0で作るか。

yo-he
質問者

お礼

やっぱり普通にやって、イベント時に配列を取得するなんて無理でしたか... 自分も簡単にできる方法を探していたのですが、 おかげさまで諦めがつきました。(苦笑) また何か有りましたら宜しくお願いします。 ありがとうございました。

関連するQ&A

  • excel2000のVBAについて

    excel2000でコマンドボタン(command1)をclickすると VBAの command1_click関数の処理をするという マクロをVBAで作成したいのですが、 (1)excelシート上にコマンドボタンの作成方法 を教えてください

  • Excel2011のVBAについて教えてください。

    初めて質問します。 Excel2011forMACでVBAを使いBOOKを指定してクローズさせたいのですが、 エラー1004が起こりファイルを閉じることができません。 作成したVBAは以前にWindowsXP、Excel2000で作成したものを修正したものだったためなのではないかと思い、 改めてExcel2011forMACで下記ように、コマンドボタンをクリックすると"test.xlsx"を閉じるだけのテストを行いましたが同じエラーが発生します。 Private Sub CommandButton1_Click() Windows("test.xlsx").Close  End Sub 実行すると『実行時エラー'1004' _ オブジェクト'Close'のメソッド'Window'が失敗しました。』となります。 ちなみに、WindowsをWorkbooksにしても同様のエラーが発生しました。 Workbooksではファイルを指定しなければエラーは発生しないのですが、できれば1つのファイルを開いた状態にしておきたいと思っています。 このエラーの解消方法を教えていただけませんか。 それとも、MACでは個別にファイルを閉じることはできないのでしょうか。 Excel2011を使っているMAC OS Xのバージョンは10.6.7です。 VBAについては、初心者レベルで常にヘルプとマクロの記録を頼りになんとか作成しています。さらに、MACでVBAを使ったのが初めてで、この事象が一般的に知られていることなのかわかりません。いろいろ調べて同じような事例が見つけられなかったので質問させていただきます。 よろしくお願いします。

  • VBAのプロパティウィンドウについて

    VBAでプロパティウィンドウには ・Microsoft Excel Object ・フォーム ・標準モジュール があります。 ところで、下のプログラムですが、(1)の部分を標準モジュールに書き込み、フォームにあるコマンドボタンをクリックしたら、"test.xls"が表示されます。 しかし、(1)の部分をMicrosoft Excel Object のsheet1(sheet1)のコードに書き込み、プログラムを実行させると、フォームのコマンドボタンをクリックしても"test.xls"は表示されません。 これはなぜですか? (1)の部分のコマンドボタン1はsheet1に存在します。 (1)----------------------------------- Private file_name as string Private Sub CommandButton1_Click()   file_name="test.xls" UserForm1.Show End Sub (1)----------------------------------- フォーム Sub CommandButton1_Click() MsgBox file_name End Sub

  • コマンドボタンを押すと・・・

    vbの超初心者なのですが、フォームにコマンドボタンを何度か設置したら Private Sub Button1_Click(sender As System.Object,・・・ というのと Private Sub Button1_Click_1(sender As System.Object,・・・ というのが出来上がっていて、コマンドボタンをクリックすると Private Sub Button1_Click_1 のほうのコードが実行されるのですが、 Private Sub Button1_ClickとPrivate Sub Button1_Click_1 の違いはなんでしょうか? Private Sub Button1_Clickは、どのコマンドボタンを押せば実行されるのでしょうか?

  • VBAでイベント発生時に自分の呼ばれたコマンドを知る方法

    イベントが発生したときに自分がどのオブジェクトから呼ばれているイベントか知る方法ってありますか?あるいは上から何番目のコマンド(縦に同じコマンドがズラッと並んでいるイメージ)から呼ばれているかをイベント内部から知る方法ってありますか? 今コーディングで新規フォームを作ってそこにレコード数だけコントロールを配置するというコーディングを考えております。 そのコマンドにクリックイベントも発生させたいので、コントロールを作成してイベントを埋め込むという作業まではできたのですが、不特定多数のコマンドボタンの作成設置方法に悩んでおります。 VBAではコントロールの配列はできないので、コントロールの名前などを全て変えて作らなければなりません。そこをどうするかで頭を悩ませています。 しかも後でどのコントロールがクリックされて呼ばれたのかも知りたいので、コントロール配列のindex番号みたいなものを取得しておく必要もありますが、何か良い方法はないでしょうか? いっそのことコマンドの名前を数字にして、後でそのコントロール名とかオブジェクトのメソッドを参照してインデックス番号を取得・・・みたいなことを考えてたのですが、たしか既存の(目に見えて形となっている)(オブジェクト名自体を持っている)コントロールのメソッドを使用するのはかなり不可能だったような気がするので、タグやオブジェクト名も拾えない気がします。 VBなら同じイベント内容のコマンドを全て配列にしてまとめてクリックイベントにしてそのIndexを見ればプロシージャ1つで済みますが、VBAで似たような方法をする方法を教えてください。 ループで回しながらオブジェクト名の違うコントロールを配置する方法は自分でなんとかやってみますのでindex番号の取得の方法だけお願いします。

  • エクセルのVBAでオブジェクトの配列変数は使えますか?

    VBですとオブジェクトの配列変数というか、コピーしたときに自動的に配列になってしまいますが、エクセルのVBAの場合でオブジェクトの配列変数は使えますか? なにをしたいかというと、ボタンが多すぎて一つ一つにプログラム定義は面倒、そこで配列にしてまわすことにしたいのですが、エクセルで可能でしょうか。 どなたかお願いします。

  • Access 1つのイベントに複数のVBA

    こんにちは! Accessについて、質問です!! あるフォームの『修正』というボタンのクリック時プロパティに、以下のVBAが組み込まれています。 Private Sub 修正_Click() CopyRec End Sub ここに新たに、 『メッセージボックス』『ウインドウを閉じる』VBAを加えたいのです。 現状として…… (1)Private Sub 修正_Click() CopyRec MsgBox "修正が完了しました" End Sub (2)Option Compare Database (下線) Private Sub 修正_Click() CopyRec End Sub Option Compare Database (下線) MsgBox "修正が完了しました" End Sub 上記(1)(2)は、失敗しています。 質問は2つあります。 (1)1つのプロパティに、複数のVBAを設定するのは可能ですか?可能なら、どのようにVBAを入力すれば正常作動するのでしょうか? (2)『ウインドウを閉じる』VBAの書き方が調べても分かりませんでした……。どのように入力するのですか? どちらか1つが分かる方でもかまいません。 回答よろしくお願いします!

  • EXCEL VBAのユーザーフォームに引数を渡す方法について

    すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

  • Excel-VBA フォルダの日時を取得・設定

    目的は、Excel-VBAでフォルダのタイムスタンプを「取得・設定」したいのですが、 非力にてクマロの書き方が分かりません。 何方かご教授よろしくお願いいたします。 下記はサンプルコードを探していて、これだと目に留まったのですが、 Excel-VBAマクロで実行するコードに書き直す事ができませんでした。 '--------------------------------------------- 'VB.NET フォルダのタイムスタンプ取得・設定(6個)-(SNo.032) 'http://hanatyan.sakura.ne.jp/dotnet/index.html '--------------------------------------------- 'Sample1.フォルダの作成日時を取得する Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim dt As DateTime dt = System.IO.Directory.GetCreationTime("c:test\") Debug.WriteLine(dt) End Sub '--------------------------------------------- 'Sample4.フォルダの作成日時を設定する Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click 'Directory.SetCreationTime メソッド System.IO.Directory.SetCreationTime("c:test\", DateTime.Now) End Sub '--------------------------------------------- 以上

  • オブジェクト名を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です。

専門家に質問してみよう