お世話になります。
少々わかりにくいのですが、言葉で説明します。
エクセルVBAで、フォームを作成します。
UserForm1にFrameが2つあり、OptionButtonがそれぞれ2つずつフレームに入っています。(つまり、4つ中2つ選択する必要がある)
フォームが読み込まれた時点ではCommandButton.Enebled=Falseにしておいて、フレーム内のオプションボタンがそれぞれ1つずつ選択された場合に初めてCommandButton.Enebled=trueになるようにしたいと思いますが、どのように記述したら実現されるのでしょうか。
わかりにくい説明でしたが、宜しくお願いします。
No.3ベストアンサー
- 回答日時:
例えば、ユーザフォームがアクティブになった時に0.1秒間隔でチェックする関数を起動。
無限ループにしておき、ボタンが押されたら抜け出ます。
まあ、永遠にチェックする訳じゃないのでメモリの問題は無視できると思います。
Option Explicit
Private Sub UserForm_Activate()
SetCmdEnabled
End Sub
Public Sub SetCmdEnabled()
Dim Ctl As Control
Do
Pause 0.1
For Each Ctl In Me.Controls
If InStr(1, Ctl.Name, "option", vbTextCompare) > 0 Then
If Ctl.Value = True Then
Me.CommandButton1.Enabled = Ctl.Value
Exit Do
End If
End If
Next Ctl
Loop Until (0)
End Sub
<標準モジュール>
Option Explicit
Public Sub Pause(ByVal PauseTime As Single)
Dim Finish As Single
Finish = Timer + PauseTime
Do
DoEvents
Loop Until Timer > Finish
End Sub
No.4
- 回答日時:
X Me.CommandButton1.Enabled = Ctl.Value
O Me.CommandButton1.Enabled = True
ご回答ありがとうございます。
これはまた全然思いつかなかった解答で勉強になりました。
フレームが二つあるので、
For Each Ctl In Me.Frame1.Controls
の様にして判定し、フレーム両方でCtl.Value=Trueの時実行できるようにして、目標を実現できました。
ありがとうございましたm(__)m
No.2
- 回答日時:
#01です
>ただ、確かに長いですね…
OptionButtonがClickされたタイミングでCommandButtonの操作をするのですから、OptionButtonの数だけSub~End Subを書かなければならないのは当然ではないでしょうか
1つのSub~End Subでは実現できませんよ
No.1
- 回答日時:
Frame1にOptionButton1、OptionButton2が、Frame2にOptionButton3、OptionButton4が配置されているとします。
するとマウスで操作する場合はOptionButton1とOptionButton2はどちらか一方しかTrueにできません。OptionButton3とOptionButton4も同様です。従って、以下のようなマクロでもできると思います(泥臭いですが…)
Private Sub UserForm_Activate()
Me.CommandButton1.Enabled = False
End Sub
Private Sub OptionButton1_Click()
If OptionButton3.Value = True Or OptionButton4.Value = True Then
CommandButton1.Enabled = True
End If
End Sub
Private Sub OptionButton2_Click()
If OptionButton3.Value = True Or OptionButton4.Value = True Then
CommandButton1.Enabled = True
End If
End Sub
Private Sub OptionButton3_Click()
If OptionButton1.Value = True Or OptionButton2.Value = True Then
CommandButton1.Enabled = True
End If
End Sub
Private Sub OptionButton4_Click()
If OptionButton1.Value = True Or OptionButton2.Value = True Then
CommandButton1.Enabled = True
End If
End Sub
Private Sub CommandButton1_Click()
OptionButton1.Value = False
OptionButton2.Value = False
OptionButton3.Value = False
OptionButton4.Value = False
Me.Hide
End Sub
早速のご回答ありがとうございます^^
確かに上記コードで動きます。ありがとうございましたm(__)m
ただ、確かに長いですね…ボタンが少ないので、これで済みますが、多いと大変なことになりそうです><
こういう動作というのはスマートに書く方法がないのでしょうか?
結構ありがちな動作かと思ったのですが…orz
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのComboboxでマウスのスク...
-
スクロールバーをVBAで操作したい
-
実行エラー'424' ????
-
エクセルと写真
-
Access2000 フォーム表示位置が...
-
マクロボタンが勝手に飛び回る
-
メインフォームとサブフォーム...
-
エクセルで、抽出したデータだ...
-
Access サブフォームでの選択行...
-
ACCESSでVBAから選択クエリの抽...
-
PDFファイル/抽出許可され...
-
AccessVBAの値によっ...
-
Access 複数フォームを...
-
ACCESSフォーム入力後の確定
-
サブフォームが見えなくなる。
-
(ACCESS)条件に応じて、テキ...
-
未審査請求包袋抽出表作成とは...
-
前のレコードの値を自動で入れたい
-
accessでオートナンバーを使わ...
-
Accessでレコードの複製
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのComboboxでマウスのスク...
-
スクロールバーをVBAで操作したい
-
実行エラー'424' ????
-
ACCESS フォームのサイズ調整
-
Access2000 フォーム表示位置が...
-
エクセル上に画像を貼り付けて...
-
access 最大化した時の画面の...
-
Accessで任意のフォーム以外直...
-
ACCESS VBEが勝手に起動します
-
マクロボタンが勝手に飛び回る
-
Exitイベントから自分自身のコ...
-
エクセルのVBAでマクロ実行...
-
Access起動時の設定について
-
Accessのメニューバーを消したい!
-
ACCESSアクションマクロでイン...
-
エクセル2000のオプションボッ...
-
EXCEL VBA フォームクローズと...
-
VBA ユーザフォームで作成した...
-
accessにexcelのセルの情報を自...
-
Access サブフォームでの選択行...
おすすめ情報