いつも回答して頂き、ありがとうございます。
フレームの中にオプションボタンを設定し、更に別のフレームの中にオプションボタンを設定。
上記の時、各フレームのオプションボタンを押すと、各フレームにあるどれか1つだけオプションボタンを同時にTRUEに出来ますが、これを片方をTRUEにした時、もう片方のフレームにあるオプションボタンをFALSEにしたいのですが、こんな事可能なのでしょうか?ネットで確認しましたが、分からない為、出来るか出来ないか教えて頂けないでしょうか?宜しくお願い致します。
※自分はフレームをただ用途に応じて分け、見た目を良くしたいだけなのです。
No.4ベストアンサー
- 回答日時:
#2、3、cjです。
追加レスです。#2で提示したサンプルコードですが、
中途半端で動作も重く若干問題アリなので丸ごと書き換えました。
本題から逸れているのかも知れませんが、放置できなかったので、、、。
それから、説明が不足していた点を補足します。
Labelの上にOptionButtonを配置する、という言葉通りのことは出来ません。
正確には、Labelより前面にOptionButtonを配置する、でした。
初期デザインの際、
Frameの場合は、Frameを移動するだけで配下のOptionButtonも移動しますが、
LabelとOptionButtonの場合、一緒に移動させるには、
添付画像のように
一旦、LabelとOptionButtonの一群を、すべて覆うようにドラッグして選択してから、
一番外の黒く見える枠の部分をドラッグして、まとめて移動します。
この点は少しだけ、Frameより扱い難いかも知れませんね。
以下、#2の差し替え分です。
今お使いのままのデザインを維持して実現するサンプルについて、
レスポンスの遅さを解消しました。
OptionButton1 から OptionButton10 まである条件で書いてありますが、
OptionButtonの数や、オブジェクト名に合わせて試してみてください。
' ' ====================Userformモジュール======================
' ' ----宣言部--------------------------------------------------
Private colcFrames As Collection
' ' ----イベント------------------------------------------------
Private Sub OptionButton1_Click()
Call CrossGroup
End Sub
Private Sub OptionButton2_Click()
Call CrossGroup
End Sub
Private Sub OptionButton3_Click()
Call CrossGroup
End Sub
Private Sub OptionButton4_Click()
Call CrossGroup
End Sub
Private Sub OptionButton5_Click()
Call CrossGroup
End Sub
Private Sub OptionButton6_Click()
Call CrossGroup
End Sub
Private Sub OptionButton7_Click()
Call CrossGroup
End Sub
Private Sub OptionButton8_Click()
Call CrossGroup
End Sub
Private Sub OptionButton9_Click()
Call CrossGroup
End Sub
Private Sub OptionButton10_Click()
Call CrossGroup
End Sub
' ' ・
' ' ・
' ' ・
Private Sub UserForm_Initialize()
Dim oCtrl As MSForms.Control
Dim cnt As Long
Set colcFrames = New Collection
For Each oCtrl In Controls
If TypeName(oCtrl) = "Frame" Then
cnt = cnt + 1
oCtrl.Tag = cnt
colcFrames.Add oCtrl, oCtrl.Name
End If
Next
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set colcFrames = Nothing
End Sub
' ' ----メソッド------------------------------------------------
Private Sub CrossGroup()
Dim nSkipIdx As Long
Dim i As Long
nSkipIdx = Val(ActiveControl.Tag)
On Error Resume Next
For i = 1 To colcFrames.Count
If i <> nSkipIdx Then colcFrames(i).ActiveControl.Value = False
Next i
On Error GoTo 0
End Sub
' ' ============================================================
返事が遅れて申し訳ありません。
フレームを使用しても、記述の方法で十分かのうだったんですね。しかも高速化までして頂きありがとうございました。
No.3
- 回答日時:
#2、cjです。
すみません訂正が1点。誤>
(順番が前後した場合はOptionButtonを切り取りFrame上に貼付け、とか)
正
(順番が前後した場合はOptionButtonを切り取りLabel上に貼付け、とか)
でした。失礼しました。
No.2
- 回答日時:
こんにちは。
お邪魔します。まず、
デザインそのままで実現するなら、こんな感じ。
' ' ============================================================
' ' Userformモジュール
Private Sub OptionButton1_Click()
Call ClossFrames
End Sub
Private Sub OptionButton2_Click()
Call ClossFrames
End Sub
Private Sub OptionButton3_Click()
Call ClossFrames
End Sub
' ' ・
' ' ・
' ' ・
Private Sub ClossFrames()
Dim oCtrl As MSForms.Control
Dim sFrame As String
sFrame = ActiveControl.Name ' ★
On Error Resume Next ' ◆
For Each oCtrl In Controls ' ★
If TypeName(oCtrl) = "Frame" Then
If oCtrl.Name <> sFrame Then
' If Not oCtrl.ActiveControl Is Nothing Then ' ◇
With oCtrl.ActiveControl
If .Value Then .Value = False
End With
' End If ' ◇
End If
End If
Next
End Sub
' ' ------------------------------------------------------------
' ' ※もしもUserformモジュールとは別にクラスモジュールを設定している場合は
' ' sFrame = Userform1.ActiveControl.Name ' ★
' ' For Each oCtrl In Userform1.Controls ' ★
' ' 2カ所、親オブジェクトを指定してあげてください。
' ' ※コメントブロックしている ' ◇マークの2行は、
' ' ◆行の(どちらかを選ぶ)オプションです。
' ' On Error の方が効率的ですが、
' ' 食わず嫌いの方が結構いらっしゃるので、念の為添えておきます。
' ' ============================================================
ただ、Frameコントロールは、そもそも、
配下に複数のOptionButtonを配置して、
排他的・閉鎖的なグループを構成した選択肢を実現する為にあるものですから、
端からその必要がないのなら、Frameコントロールを使うのは、
目的が違ってしまいます。
上に挙げたコードでの対応は、Frameを越えて、
OptionButtonのグループを可変に、する為のものです。
グループが固定でいいなら、Frameを使わなければ簡単なのです。
#1さんご回答のように、
Userformの初期デザインの段階で、まずラベルを配置してから
その上にOptionButtonを配置するようにすれば簡単に実現できます。
(順番が前後した場合はOptionButtonを切り取りFrame上に貼付け、とか)
或いは、Userform全体として複数のグループを設け、
それぞれに装飾的な枠を表現したい、という場合は、
まず、グループ単位でFrame、その上にLabel、その上にOptionButtonのようにします。
時間のある時にでも、Userformのデザイナー画面で、
各種コントロールの初期設定可能なプロパティを
プロパティウィンドウを弄りながら覚えておくと、
色々な可能性が見えてくると思います。
誰に教わるでなく弄りながら覚えた、という人が多いと思いますが、
私もその内の一人です。
色々説明して頂きありがとうございました。
ネットで見てもあまり書いている事が少ないので、自分で色々弄ってみるのもありかなと思いました。大変参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- モニター・ディスプレイ windows10 モニタに表示されなくなった 2 2023/08/04 16:58
- Excel(エクセル) [貼り付けオプション]とは? 3 2022/04/17 08:15
- Windows 10 Windows10でセーフモードが出来ません。 2 2022/04/22 23:37
- その他(ファッション) スポーツメガネでフレームの色は白などはあり? 2 2022/11/30 07:26
- 家具・インテリア ダブルのベッドにクイーンのマットレス 5 2023/02/11 08:35
- その他(ファッション) 眼鏡について 先月眼鏡を買いました。 ですが 今日レンズが汚れていたので 拭いていたら 片方のレンズ 6 2022/06/16 17:51
- メガネ・コンタクト・視力矯正 家用メガネの買い替えをしたく商業施設の眼鏡屋さんを3店舗回ったのですが目当てのものがなく困っています 4 2023/07/13 16:46
- カスタマイズ(バイク) カスタマイズ 1 2022/11/12 01:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フレームアニメーションのサイ...
-
英語で「フレームの右上」
-
ボタンクリックで本のページを...
-
キーフレームとはなんですか?
-
メガネのフレームの買い取りに...
-
flashでムービークリップ後のフ...
-
フレーム数を直感的に数えたい
-
ドコモ携帯 N504isのフォトフ...
-
オシロスコープのような描写方...
-
可愛い無料写メフレームサイト
-
【PHP】 リロードに関しての事...
-
WEBカメラの1秒間のフレーム数
-
処理の速い当たり判定について[...
-
○秒後にフレーム移動
-
C言語 バッファについて。
-
【C#】wavファイルの複数同時再生
-
Flashで右クリックメニューにつ...
-
ipadでdブックがとんでもなく遅...
-
外部mp3のランダム再生について
-
actionscript3.0で親階層にある...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フレーム内に移動したい
-
ドロップフレームの計算をエク...
-
Access2010でサブフォームのフ...
-
フレーム内のオプションボタン...
-
VB6のスクロールバー付きフレー...
-
車の運転時のメガネ 縁なし(...
-
VBで動的に作成したパネルの上...
-
cisco catalystのトラブルシュ...
-
URLを隠す、または別アドレスな...
-
2Dゲーム作成する際、アニメー...
-
フレームでのResponse.Redirect
-
シーケンス番号の初期値
-
【C++】IDirect3DSurfaceのディ...
-
フレームでページ分かれていて...
-
エクセルVBA フレーム内のイベ...
-
ソーラーパネルのアルミフレー...
-
B2ポスターフレームの自作
-
キーフレームとはなんですか?
-
VBSでHTMLソースの取得方法で
-
HTMLのフレームとテーブル...
おすすめ情報