No.15
- 回答日時:
こんばんは。
CCK3にチェック、OP3がONの状態のとき云々は、杞憂でしたね。(^^;
>Option Button 1~7という規則的ならびではなかったものをOpt1~Opt7の名前をつけていたとしたらやはり使えないんでしょうねぇ?
やりかた次第で可能だと思いますよ。
何れにしても、も少し具体的な例(なるべく実態に近い例)を挙げて貰えれば答えやすいのですが。。。
以上です。
> も少し具体的な例(なるべく実態に近い例)を挙げて貰えれば答えやすいのですが。。。
わかりました。
まとめまして新しい質問として再度投稿します。
ありがとうございました。
No.14ベストアンサー
- 回答日時:
こんにちは。
Application.Callerとは何とお洒落な。。(^o^)
------------------------------------------------------------------
Public myOpValues(7) As Integer 'これmyOpValues(7) ってどういう意味ですか?
●ひとつ前の7個のオプションボタンの状態を保持するための配列
-------------------------------------------------------------------
If n <> OpNo And myOpValues(n) = 1 Then 'このmyOpValues(N) はなんですか?
●配列myOpValues()にはひとつ前のオプションボタンの状態が入っているので元に戻すためにそこをチェックしています
---------------------------------------------------------------
ActiveSheet.OptionButtons(n).Value = 1
●そしてここで元の状態に戻しています
----------------------------------------------------------------
myOpValues(N) = 0 'このmyOpValues(N)=0 はどんな意味ですか?
●現在のオプションボタンの状態を配列に再設定する為に先ず、Offにしているだけです。
------------------------------------------------------------
If N = OpNo Then myOpValues(N) = 1
●そしてここでいまクリックされたオプションボタンの状態"On"を配列に保持
-----------------------------------------------------------
ということになりますがある別の場合も考えていたのでちょと分かり難いコードになりました。
そこで単純に補足のようなことでよければ以下のようにシンプルにすることもできますね。
=========================================================
Sub OpCheck(OpNo)
Dim N As Integer
If ActiveSheet.CheckBoxes("CCK" & OpNo).Value <> 1 Then
MsgBox "そこは選べないわよ。", vbCritical, "Sorry!!"
For N = 1 To 7
ActiveSheet.OptionButtons(N).Value = myOpValues(N)
Next N
End If
For N = 1 To 7
myOpValues(N) = ActiveSheet.OptionButtons(N).Value
Next N
End Sub
============================================================
それから、こんな時はどうするのでしょう。
例えば、CCK3にチェック、OP3がONの状態の時、CCK3のチェックを外した場合、OP3はONのまま?それともOFFにする?
以上です。
この回答への補足
すみません、あとひとついいですか?
ActiveSheet.OptionButtons(n) ですが、現在はOption Button 1~7に、それぞれOpt1~Opt7の名前を付けていますので問題ないと思いますが、これが仮にOption Button 1~7という規則的ならびではなかったものをOpt1~Opt7の名前をつけていたとしたらやはり使えないんでしょうねぇ?
ご丁寧にありがとうございました。
> CCK3にチェック、OP3がONの状態の時、CCK3のチェックを外した場合、OP3はONのまま?それともOFFにする?
これは下記のコードで対処済みなんです。
Sub CCK_Click()
Dim x As Integer
x = Right(Application.Caller, 1)
With ActiveSheet
If .CheckBoxes("CCK" & x).Value = 1 Then Exit Sub
If .OptionButtons("Opt" & x).Value = xlOn Then
MsgBox "これははずしちゃだめ!", vbCritical, "Sorry!!"
.CheckBoxes("CCK" & x).Value = 1
End If
End With
End Sub
No.13
- 回答日時:
こんにちは。
>それはわたしも考えましたが、オプションボタンを押して初めてマクロが走るんですから、押したあとでEnabled=Falseでは意味がないんです。
読んでいても、おやりになりたいことが、良く理解できないのですが、押した後でダメなら、C1の.Enabled=False の条件だけにすればよいと思いますね。
If Range("C1").Value = True And t = 3 Then
↓
If Range("C1").Value = True Then
でも、#11 の「回答に対するお礼」の例では、
C1 に 3
を入れて、以下のようにすればよいのではありませんか?
'これ以外は、#12 と他は全て同じです。
Sub OPValueStock()
Dim t As Integer
'オプションボタンの値を確保
With ActiveSheet
t = .Shapes(Application.Caller).DrawingObject.Index
If Range("C1").Value = t Then
MsgBox "それは選べません。", 16
Me.OptionButtons(t).Value = 0
j = i
Call OPRecover
End If
j = i
i = t
End With
End Sub
No.12
- 回答日時:
こんばんは。
Wendy02の#8 発言、間違いでした。#2の「回答に対するお礼」の読み違えです。taocat さんの書き込みで、その流れを気づきました。
>どのオプションボタンを押したかで、条件が整うのです。仮にC1セルの値が「TRUE」の時に3番目のオプションボタンを押されたら「キャンセル」させるといった具合です
これは、単に、C1 が、True だったら、OptionButtons(3).Enable =False
っていうことではありませんか?
キャンセルというよりも、選べなくすればよいと思います。
具体的には、このようになります。
t = .Shapes(Application.Caller).DrawingObject.Index
If Range("C1").Value = True And t = 3 Then
Me.OptionButtons(3).Enabled = False
Else
Me.OptionButtons(3).Enabled = True
End If
とすればよいのでは?
それから、これは、難しく考えないで、ものすごくシンプルに考えればよいのではありませんか?
'シートモジュール
Private i As Integer
Private j As Integer
Sub OPValueStock()
Dim t As Integer
'オプションボタンの値を確保
With ActiveSheet
t = .Shapes(Application.Caller).DrawingObject.Index
If Range("C1").Value = True And t = 3 Then
Me.OptionButtons(3).Enabled = False
Else
Me.OptionButtons(3).Enabled = True
End If
j = i
i = t
End With
End Sub
Private Sub OPRecover()
'オプションボタンの値を戻す(UnDo)
On Error Resume Next
Me.OptionButtons(j).Value = 1
End Sub
'=======================================
'設定用マクロ'(一回だけでよい)
Sub SettingMacro()
'オプションボタンの設定
Dim o As Variant
For Each o In ActiveSheet.OptionButtons
o.OnAction = Me.Name & ".OPValueStock"
Next o
End Sub
何度も何度もお手間かけ、申し訳ありません。
>キャンセルというよりも、選べなくすればよいと思います。
それはわたしも考えましたが、オプションボタンを押して初めてマクロが走るんですから、押したあとでEnabled=Falseでは意味がないんです。
今回は11番のtaocatさんのやり方に、Application.Callerを組み合わせて何とかできました。ほとんどわかってないんですが・・・・。
これからもいろいろご教示いただければ幸いです。
ありがとうございました。
No.11
- 回答日時:
こんばんは。
merlionXXさん、ほんとに色んなことされてますねぇ。(^^;
要するにセルC1に値がある時は、OptionButton3を選択できないようにする、ということですね?
(全て標準モジュール)
--------------------------------------------
Public myOpValues(7) As Integer
-----------------------------------
Sub オプション1_Click()
Call OpCheck(1)
End Sub
-----------------------------------
Sub オプション2_Click()
Call OpCheck(2)
End Sub
-----------------------------------
Sub オプション3_Click()
Call OpCheck(3)
End Sub
-----------------------------------
Sub オプション4_Click()
Call OpCheck(4)
End Sub
-----------------------------------
Sub オプション5_Click()
Call OpCheck(5)
End Sub
-----------------------------------
Sub オプション6_Click()
Call OpCheck(6)
End Sub
-----------------------------------
Sub オプション7_Click()
Call OpCheck(7)
End Sub
------------------------------------------
Sub OpCheck(OpNo)
Dim N As Integer
Dim Q As Integer
If OpNo = 3 And Range("C1").Value <>"" Then
For N = 1 To 7
If N <> 3 And myOpValues(N) = 1 Then
ActiveSheet.OptionButtons(N).Value = 1
Exit Sub
End If
Next N
End If
For N = 1 To 7
myOpValues(N) = 0
If N = OpNo Then myOpValues(N) = 1
Next N
End Sub
--------------------------------------------
なお、分かり易くするためにOptionButtonの数は質問の7に固定し、名前もデフォルトにしてあります。
実際にはwendy02さんのようにcount,redimなど使用すべきですね。
勘違いしてましたら平にご容赦願います。(^^;;;
以上です。
taocatさん、お世話になります。
実はちょっとやり方を変え、やはりフォームでチェックボックスを7個つくり(CCK1~CCK7)、このチェックボックスの番号に対応するオプションボタン(OP1~OP7でひとつのグループ)があるんです。
で、チェックボックスがチェックされてない番号のオプションボタンが押されたときに無効にしたいのです。(CCK1がチェックされてないのにOP1は押せない)
試行錯誤の結果、ぜんぜん意味がわからないんですが下記のコードでなんとかできるようになりました!でも、ぜんぜんわからないので教えてください。
Public myOpValues(7) As Integer 'これmyOpValues(7) ってどういう意味ですか?
Sub Opt_Click() ’これを各オプションボタンにセットしました。
Dim x As Integer
x = Right(Application.Caller, 1) ’これでどのオプションボタンが押されたかわかります。
Call OpCheck(x)
End Sub
Sub OpCheck(OpNo)
Dim N As Integer
Dim Q As Integer
If ActiveSheet.CheckBoxes("CCK" & OpNo).Value <> 1 Then
MsgBox "そこは選べないわよ。", vbCritical, "Sorry!!"
For N = 1 To 7
If N <> OpNo And myOpValues(N) = 1 Then 'このmyOpValues(N) はなんですか?
ActiveSheet.OptionButtons(N).Value = 1
Exit Sub
End If
Next N
End If
For N = 1 To 7
myOpValues(N) = 0 'このmyOpValues(N)=0 はどんな意味ですか?
If N = OpNo Then myOpValues(N) = 1
Next N
End Sub
No.9
- 回答日時:
#7です。
>Private Sub SetOption(Idx As Integer, sw As Boolean)
>Sheet2.Shapes("Opt" & Idx).ControlFormat.Value = sw
>Private Sub SetOption(Idx As Integer, sw As Boolean)
ActiveSheet.Shapes("Opt" & Idx).ControlFormat.Value = sw
にしてください。ゴメン
No.8
- 回答日時:
こんばんは。
>でも、考えたんですが、各オプションボタンにSub OPValueStock()を登録しても、それで保存されるのはオプションボタンを押した状態での配列ですよね?押す前の状態は保存されないのでは?
まったく、押されていない、すべてオフの状態では、登録をしたところで、全部オフです。
しかし、もしも、すでに、押されている状態を取得するのでしたら、Sheet_Activate イベントやWorkbook_Open イベントで取ります。
もし、固定状態でしたら、最初から、配列で、どれか1つに、1を代入すればよいわけです。
後は、配列の中身を、ローカルウィンドウで確保されているかみてください。
On は、1として入っているはずです。
No.7
- 回答日時:
エクセルは門外漢ですが。
フォームのオプションボタンをはじめて使いました。。。
Option Explicit
Dim OptionIndex As Integer
Private Function CheckCondition() As Boolean
'キャンセルする条件の場合 True を返してね。
CheckCondition = False
End Function
Private Sub SetOption(Idx As Integer, sw As Boolean)
Sheet2.Shapes("Opt" & Idx).ControlFormat.Value = sw
If sw Then
OptionIndex = Idx
Else
OptionIndex = 0
End If
End Sub
Private Sub CheckOption(Idx As Integer)
If Not CheckCondition Then
OptionIndex = Idx
Else
If OptionIndex <> 0 Then
SetOption OptionIndex, True
Else
SetOption Idx, False
End If
End If
End Sub
Public Sub Opt1_Click()
CheckOption 1
End Sub
Public Sub Opt2_Click()
CheckOption 2
End Sub
'・・・・・・
Public Sub Opt7_Click()
CheckOption 7
End Sub
No.6
- 回答日時:
こんにちは。
>Sub OPRecoverを走らせましたが、オプションボタンは元には戻りませんでした。
大方、それは、モジュールレベル変数が抜けているのだと思います。
Private Ops() As Long '←これ
ただし、他のプロシージャが同一のモジュールにない場合は、Public にしてくださいね。
> Private Ops() As Long '←これ
いいえ、忘れていません。同一モジュールの一番上にあります。
でも、考えたんですが、各オプションボタンにSub OPValueStock()を登録しても、それで保存されるのはオプションボタンを押した状態での配列ですよね?押す前の状態は保存されないのでは?(よくわかってもないのにすみません)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
推しミネラルウォーターはありますか?
推しミネラルウォーターがあったら教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルVBA オプションボタンのチェックを外したい
Excel(エクセル)
-
エクセルVBAでOptionButtonのオンオフ取得
Excel(エクセル)
-
エクセルVBAでオプションボタンを無効にする方法
Excel(エクセル)
-
-
4
Excel ラジオボタンのリセットを作りたい
Excel(エクセル)
-
5
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
6
日報の休日ボタン(トグルボタン)を一度に解除するマクロは?
Excel(エクセル)
-
7
ラジオボタンのオンとオフ
Excel(エクセル)
-
8
入力規則のリスト選択
Visual Basic(VBA)
-
9
トグルボタン一部を一度にON OFFする方法 トグルボタンは、シート上にあります。色々試してみても
Visual Basic(VBA)
-
10
VBAのトグルボタンでのマクロについて質問です
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの質問です。 F列からL...
-
作成した数式を値として表示し...
-
エクセルの文字が途中から消える
-
条件付き書式設定で罫線を引き...
-
Excel関数について教えてくださ...
-
Excelの警告について
-
Excel関数について教えてくださ...
-
ワークシートに出現したこの画...
-
エクセルのセル内に分数などの...
-
タイムスタンプとテキストから...
-
EXCELの散布図で日付が1900年に...
-
エクセルでファイルの最終更新...
-
シートの情報を別のシートへま...
-
マクロの処理が遅くなった
-
エクセルの数式バーのフォント...
-
エクセルの「条件付き書式」を...
-
エクセル日付 文字列の関数がエ...
-
Excelでの文字色
-
Excelの数字の前に入っている空...
-
Excelについて教えてください。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Google Mapで、都市高速は使わ...
-
Access2007で複数のチェックボ...
-
Excelでオプションが開けない
-
画像やオートシェイプの単位が...
-
エクセルVBA/フォームのオプシ...
-
リブレオフィスの予測表示の停...
-
日経225オプションの過去データ...
-
オプション取引がゼロサムゲー...
-
エクセルVBAマクロのオプシ...
-
「Excelのオプション」の「ユー...
-
AcsessでオプショングループをN...
-
オプションボタンの三択(アク...
-
[Google カレンダー] 定期的な...
-
[貼り付けオプション]とは?
-
ふりかけ定食。あったら頼みた...
-
日経225オプションのためのツー...
-
ホンダ車見積もり
-
SBI証券のオプション取引の約定...
-
風俗店ってとても巧みに広告を...
-
自分の仕事人生において、あな...
おすすめ情報