[[20151003085735]] 『ActiveXコントロール コンボボックスからのマクロ』(CB) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ActiveXコントロール コンボボックスからのマクロ実行』(CB)

 現在マクロの勉強中です。というより、初心者です。
 教えていただきたいことがあります。
 エクセルのシート上に、ActiveXコントロールのコンボボックスを作成いたしました。
 リスト内に表示されている項目を選択後、マクロを実行させたいと思っているのですが
 やり方がわかりません。

 リスト内の表示とマクロ名は異なっていますが、どなたかコードをご教示いただ
 けませんでしょうか?
 よろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 >初心者です
 なら、最初は フォームコントロールのコンボボックスを使う方が簡単だと思いますよ!!
 機能が少ないので、習得しやすいし、Excelとの相性は ActiveXコントロールのそれより よいですよ!!

 どうしても というなら、ActiveXコントロール コンボボックスのChangeイベントというワードを調べt見てください

http://www.cocoaliz.com/excelVBA/index.php/39/

(ichinose) 2015/10/03(土) 09:28


 いろんな方法がありますが一例です。

  コンボボックスにあるリストが "文字列1","文字列2","文字列3" だったとして
 まず、標準モジュールに、コンボボックスのリスト文字列を含んだ以下のようなマクロを準備しておきます。

 Sub Macro文字列1()
    MsgBox "a"
 End Sub

 Sub Macro文字列2()
    MsgBox "b"
 End Sub

 Sub Macro文字列3()
    MsgBox "c"
 End Sub

 で、シートモジュールに

 Private Sub ComboBox1_Change()
    Dim er As Long
    On Error Resume Next
    Application.Run "macro" & ComboBox1.Value
    er = Err.Number
    On Error GoTo 0
    If er Then MsgBox ComboBox1.Value & " に紐付くマクロは用意されていません"

 End Sub

 お試しください。

 別の方法としては、コンボボックスに2列の情報をリストとして設定。
 2列目にマクロ名を入れておき、プロパティで表示されないようににしておきます。

 で、ComboBox1_Change で、選ばれた行の2列目の値(マクロ名)を Application.Run に与えるということも可能です。
 こうしておけば、マクロ名のしばりがなくなり、自由に設定できますので、おすすめですね。

 お勧め版のコードについては、このコンボボックスのリストをどのようにセットしておられるのかが
 わかれば、アップ可能です。

(β) 2015/10/03(土) 09:42


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

 今現在作成をおこなっているコード等を表示いたします。↓

 Sub パターン?@()

 Range("B5:AM38").Sort _
 Key1:=Range("G5"), _
 Order1:=xlDescending, _
 Header:=xlYes, _
 Orientation:=xlTopToBottom

 End Sub

 以下は省略(同じような並べ替えマクロが全部で10種類あります)

 現在は、上記のような並べ替えをおこなうマクロを各項目ごと合計10種類作成をしています。
 今回、10種類のボタンを作成し、それぞれのボタンにマクロの登録を行っていけばいいので
 すが、ボタンが非常に邪魔になるため、ActiveXコントロールのコンボボックスを私用し、
 リストから選択後、一つのボタンをクリックすればマクロが実行をされるようなイメージで考えています。

 現在のリスト内には、マクロ名とは違う表示となっています。
 たとえば、A
           B
      C
      D
      省略

 こういった場合、リストからAを選択後、パターン?@のマクロを実行させたいと思っています。

 勉強不足でご迷惑をおかけいたしますが、一からご教示いただけたらと思います。
 よろしくお願いいたします。

(CB) 2015/10/03(土) 11:46


 コンボボックスのリストはどのようにセットしていますか?

 プロパティのListFillRangeで規定? それとも、別の方法でセット?

(β) 2015/10/03(土) 13:08


 とりあえず一例をアップしておきます。

 たとえば(場所はどこでもいいのですが)

     |[A]     |[B]       
 [1] |ああああ|パターン1 
 [2] |いいいい|パターン2 
 [3] |うううう|パターン3 
 [4] |ええええ|パターン4 
 [5] |おおおお|パターン5 
 [6] |かかかか|パターン6 
 [7] |きききき|パターン7 
 [8] |くくくく|パターン8 
 [9] |けけけけ|パターン9 
 [10]|ここここ|パターン10

 こんなリストを準備し、ListFIllRangeには、この例でいえば A1:B10 を与えておきます。
 B列は、それぞれに対するマクロ名です。

 で、シートモジュールに

 Private Sub ComboBox1_Change()
    Application.Run Me.Name & "." & ComboBox1.List(ComboBox1.ListIndex, 1)
 End Sub

 これに加えて、現在用意している10個のプロシジャも、そのまま シートモジュールに引っ越しさせてください。

 以下は、余談ですが。

 1.もし、10個のマクロで異なるのが並び替えの場所だけだとすれば、マクロは1つで、それに対して
   条件を引数で与えるといったことがよろしいかも。
 2.アップしたのはコンボボックスで選ぶと、即実行というコードですが、選び間違えてしまったといったときには
   もう時すでに遅し、実行されてしまう というのは、リスクが高いですね。
   選んで、ゆっくり目で確認した上で、別途、コマンドボタン起動がいいかもです。

(β) 2015/10/03(土) 13:34


 ありがとうございました。
 上手くいきました。
 また機会があればご教示ください。

 本当に感謝いたします。
(CB) 2015/10/03(土) 20:47

 似たような質問がありましたので、追加質問をこちらよりさせてください。

 上記回答のシートモジュールに現在作成のマクロをどのようにセットしたらよいのでしょうか?

(mark) 2015/10/08(木) 22:09


 >上記回答のシートモジュールに現在作成のマクロをどのようにセットしたらよいのでしょうか?

 意味が不明です。

 現在作成中のマクロというのが、どういうものなのかがわかりませんし。
 仮に、それが Sub HogeHpoge() といったマクロで、シートモジュールに配置するのが適切なものであれば
 それを、同じシートモジュールに引っ越しさせればいいわけですし。

 現在作成中のマクロというのが、Private Sub ComboBox1_Change() であり、それと【合体】させたいということなら
 そのマクロを提示いただかないと、これも具体的にはコメントできませんね。

 ★いずれにしても、↑のようなことを明確にした上で【新規トピ】を立ち上げられるべきかと。

(β) 2015/10/09(金) 06:13


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.