

自分なり解決法をさがしたのですが
どうしても分からないので質問しました。
宜しくお願いします。
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に変えたり
ユーザーフォームでやれば可能ですが・・・
対処法あれば
宜しくお願い致します。

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

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ランキング
-
パワーポイントの画面がずれる
-
Excelで隠れてしまった図...
-
パワーポイントにエクセルの表...
-
excelでチェックボックスが表示...
-
Excelにメールを添付する
-
ExcelでB5をA4にしたい。
-
オートシェイプが消えたり出た...
-
pdf xchange viewer オブジェク...
-
イラストレーターの面積を求める
-
テキストボックスがないのに、...
-
エクセルに任意のページのワー...
-
エクセルに入力しようとすると...
-
画像をワードに貼ると見にくくなる
-
エクセルからワードへの表挿入...
-
画像編集ソフト「JTrim」、丸で...
-
EXCELのActivXコントロールにつ...
-
EXCELのグラフのオブジェクト変...
-
Illustrator CS2 不透明100%な...
-
InternetからExcelにコピ...
-
mayaでの透明化アニメーション
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントの画面がずれる
-
Excelで隠れてしまった図...
-
パワーポイントにエクセルの表...
-
テキストボックスがないのに、...
-
excelでチェックボックスが表示...
-
pdf xchange viewer オブジェク...
-
ExcelでB5をA4にしたい。
-
オブジェクトがシートからはみ...
-
オートシェイプが消えたり出た...
-
Excelにメールを添付する
-
エクセルに入力しようとすると...
-
エクセルに任意のページのワー...
-
【エクセル】列を挿入しようと...
-
Excelでフィルタをかけると、セ...
-
Adobe IllustratorとCorel DRAW...
-
Illustrator CS2 不透明100%な...
-
mayaでの透明化アニメーション
-
文字の特定箇所に背景色をつけ...
-
Wordのツールバーに常に数...
-
イラストレーターの面積を求める
おすすめ情報