![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_03.png?e8efa67b6d)
自分なり解決法をさがしたのですが
どうしても分からないので質問しました。
宜しくお願いします。
OS:WindowsXP SP3
Office:Microsoft Office Excel 2007
1.Worksheet上にActivX Frameコントロール(Microsoft Forms 2.0 Frame)を挿入
2.項番1で挿入したFrame上にActivX OptionButtonコントロールを2つ挿入
(フレームオブジェクト(O)→編集(E)後のツールボックスで挿入)
OptionButtonをクリックしたらイベントで"~する"ということをしたいのですが
デザインモード状態でFrameコントロール内のOptionButtonをダブルクリックしても反応無し
右クリックの"コードの表示..."もグレー表示で選択できません。
仕方ないのでFrameのClickイベントやMouseMoveイベントで対処していますが
出来るならOptionButtonのイベントで処理したいと思い質問しました。
ActivXではなくフォームコントロールのFrameに変えたり
ユーザーフォームでやれば可能ですが・・・
対処法あれば
宜しくお願い致します。
![「EXCELのActivXコントロールにつ」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/b/49182332_5497d99dc3cd1/M.jpg)
No.3ベストアンサー
- 回答日時:
#1、2、cjです。
この課題は運用の仕方の方が難しく感じる人多いかな、と思い直したので、
サンプルを改めます。
ブックを開けば、Frame上に配置した OptionButtonのイベントが有効になるような
簡易版のサンプルです。
' ◆◆ や ' ◆ で示した行の
各オブジェクト名には注意して必要なら書き換えるようにしてください。
特に' ◆◆ の行、Sheet1 2カ所については、注意!
シート名ではなくて、
VBAプロジェクトでのオブジェクト名です。
VBE画面の左側にあるプロジェクトエクスプローラを見ると
■ Sheet1 (Sheet1)
■ Sheet2 (Sheet2)
■ Sheet3 (Sheet3)
□ ThisWorkbook
のような感じで表示されていると思いますが。
シートモジュールについては
■ オブジェクト名 (シート名)
のような表示になっています。
オブジェクト名、シート名、ともに、それぞれ独立して、
ユーザーが名前を付けられるようになっていますし、
シートの削除などあると命名規則にずれが生じて
■ Sheet1 (Sheet3)
■ Sheet2 (Sheet1)
■ Sheet3 (Sheet2)
こんな↑ことになる可能性もあります。
なので、オブジェクト名を知るには、
()の中のシート名を探して、
マッチしたら、()の外、左側にあるオブジェクト名を採るようにします。
以下はより実用に近いテスト用簡易サンプルです。
本格派志向なら、新規にクラスモジュールを挿入して書いてみたいですね。
こういう場合、特にコントロールの数が多い場合なんかは、
別にクラスモジュール用意した方が却って扱い易いかも知れません。
試す時は、新規のブックで、必要最小限のことだけして
動作を確認した方が紛れがなくなります。
準備出来たら、保存しておいて、再度開いた時から、機能するようになります。
' ' =====ThisWorkbook モジュール=====
Private Sub Workbook_Open()
Call Sheet1.SetEvOPB ' ◆◆ Sheet1 ?
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Sheet1.SetEvOPB(True) ' ◆◆ Sheet1 ?
End Sub
' ' =====Sheet1 モジュール=====
Private WithEvents myOptionButton1 As MSForms.OptionButton
Private WithEvents myOptionButton2 As MSForms.OptionButton
Private Sub myOptionButton1_Click()
MsgBox "Frame上に配置した OptionButton1 がクリックされました。"
End Sub
Private Sub myOptionButton2_Click()
MsgBox "Frame上に配置した OptionButton2 がクリックされました。"
End Sub
Sub SetEvOPB(Optional ByVal Clear As Boolean)
If Clear Then
Set myOptionButton1 = Nothing
Set myOptionButton2 = Nothing
Else
Set myOptionButton1 = Frame1.Object("OptionButton1") ' ◆ Frame1 ? OptionButton1 ?
Set myOptionButton2 = Frame1.Object("OptionButton2") ' ◆ Frame2 ? OptionButton2 ?
End If
End Sub
![「EXCELのActivXコントロールにつ」の回答画像3](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/a/558092_5497eb0455f59/M.jpg)
No.2
- 回答日時:
#1、cjです。
書き忘れましたが、
Private Sub Worksheet_Activate()
や
Private Sub Worksheet_Deactivate()
は、
あくまでもテスト用(掲示用)のサンプルですので実用向きではありません。
実際には
ThisWorkbookモジュールの、Workbook_OpenやWorkbook_BeforeClose
などのイベントで、設定、解放するようにした方がいいと思います。
また、今回に限った話ではありませんが、
ActiveXコントロールを扱う上で、
ActiveXコントロールにフォーカスが残っている場合に、
Applicationのメソッドが実行時エラーになることもあるので
そんな時は一旦ActiveCell.Activate等の処理をしてから
シートをアクティブにして、メソッドに進むようにしてください。
ここら辺の挙動はバージョンごとに細かく変化しているらしいのですが、
実は私はExcel 2007はあまりよく知らないのです。
滅多にあることではありませんけれど、記憶の隅にでも置いておいてください。
以上です。
連絡遅れてすいません。
回答ありがとうございました。
教えて頂いた内容通り実施しましたら
オプションボタンでのイベント処理が可能になりました。
ありがとうございました。
No.1
- 回答日時:
こんな感じでしょうか?
一応、VBEのコードペイン上部左にある[オブジェクト]にも
myOptionButton1 が表示されるようになりますので、
各種イベントはその右にある[プロシージャ]を参照してください。
' ' シートモジュール先頭、宣言部に以下
Private WithEvents myOptionButton1 As MSForms.OptionButton
' ' シートモジュールに続けて
Private Sub myOptionButton1_Click()
MsgBox "Frane上に配置したOptionButton1がクリックされました。"
End Sub
Private Sub Worksheet_Activate()
Set myOptionButton1 = Frame1.Object("OptionButton1")
End Sub
Private Sub Worksheet_Deactivate()
Set myOptionButton1 = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントの画面がずれる
-
excelでチェックボックスが表示...
-
Excelで隠れてしまった図...
-
パワーポイントにエクセルの表...
-
Excelにメールを添付する
-
【エクセル】列を挿入しようと...
-
ExcelでB5をA4にしたい。
-
3DCGソフトblenderのブーリアン...
-
Wordのオブジェットと図の違い...
-
pdf xchange viewer オブジェク...
-
オートシェイプが消えたり出た...
-
テキストボックスがないのに、...
-
ワード。表の中に図形を入れた...
-
埋め込みオブジェクトをリンク...
-
エクセルに任意のページのワー...
-
FDFってなに?
-
ドラマ「フリーター、家を買う...
-
エクセルからワードへの表挿入...
-
オブジェクトがシートからはみ...
-
文字の特定箇所に背景色をつけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントの画面がずれる
-
Excelで隠れてしまった図...
-
excelでチェックボックスが表示...
-
Excelにメールを添付する
-
パワーポイントにエクセルの表...
-
テキストボックスがないのに、...
-
pdf xchange viewer オブジェク...
-
イラストレーターの面積を求める
-
文字の特定箇所に背景色をつけ...
-
エクセルに入力しようとすると...
-
【エクセル】列を挿入しようと...
-
ExcelでB5をA4にしたい。
-
エクセルに任意のページのワー...
-
オートシェイプが消えたり出た...
-
エクセルからワードへの表挿入...
-
Illustrator CS4 : 特定のレイ...
-
Wordのオブジェットと図の違い...
-
オートシェイプのハンドルを表...
-
EMBED関数について
-
オブジェクトがシートからはみ...
おすすめ情報