このトピックに書きこむ |
---|
Re[9]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる | |
---|---|
[196069] Re[9]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■ / 記事引用/メール受信=OFF■ □投稿者/ ぽんこつ -(2023/12/26(22:23)) □U R L/ 半平太さんへ お返事が遅くなり申し訳ありませんでした。詳細な解説をいただきましてありがとうございます。半平太さんのコードがよく理解できました。素人ながら、セルに値を残すやり方でやってみたのですが(セルに値を残す→次のオープン後のある処理の途中に残っている値を削除する)、美しくないなと率直に感じました。IDプロパティ、大変勉強になりました。 コードが理解できたおかげで、私が考えている動作が完璧にできました。素人の私にここまで丁寧にお付き合いいただきまして、ありがとうございました。 |
[196068] Re[8]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/12/26(11:08)) □U R L/ >値としてはA1かA2のみがはいるようですが、仕組みがわからないのです。 初期状態なら、 "" Aをクリックしたら、A1かA2 Bをクリックしたら、B その痕跡があれば、前回クリックされた状態が分かります。 前回の状態が分かれば、今回、どっちのボタンがクリックされたら、どう対処すべきか判断できます。 |
[196067] Re[7]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/12/26(10:53)) □U R L/ >他のコードを要求しているかのように聞こえたのならお許しください。 そこまで勘違いはしておりません。 今回の仕様を満たすためには、どんな仕掛けが必要なのか、ご自身であれこれ考えて貰いたかったものです。 簡単に結論を言えば「どこかにクリックの痕跡と出目をメモっておく必要がある」と言うことですが、 それだけなら、セルにでも書き出しておけばいいですね。 けど、ファイルを保存して閉じ、再度オープンしたら、 前回時の痕跡が消去されていないので意図に反する挙動になりますよね。 この問題をどう解決するか? ブックのオープンイベントで対処するのか、モジュールレベルの変数を使用して対処するのか。 ※ただし、モジュールレベルの変数は、いつ勝手にクリアされるか分からないので 今回の様な目的での使用は、Microsoft社は推奨していません。 そこで、私としてはセルのIDプロパティに書くのが手間なくていいと考えたものです。 オープン時には、前回のIDプロパティは消えている。 使っている間は、消えることがない(ハズ) 。 どこのセルのIDにするかは悩ましい。今回はZ200にしてみた。その辺なら無害であろうと・・)。 >なぜ "A" や "B" が登場するのか(Aボタン、Bボタンというのは質問時に書いたのですが、 >ボタンとして"A"や"B"として登録はしていませんし、ボタン上にもテキストとして表示していません。 >なのになぜ文字列として登場したのか?) どっちのボタンが前回クリックされたのか、それを識別する為です。 文字列にしたのは、IDプロパティが文字型なので、そうならざるを得ません。 なお、数字(文字型)から数値型へ変換する必要があるなら、Val() 関数を噛ませればいいです。 こう言うのはアイデア次第なので、自分で工夫する部分です。 >Aボタンのクリック時の最後にあるMsgBoxの内容を別の動作に書き換えたいのですが、 >これをEnd Ifの前に置いたら期待する動作が得られません。 MsgBoxをEnd Ifの前に置いたら、サイコロを振った時しか表示されませんけど・・? 当初の仕様は、これですよね?(同じ出目を出続けさせたいんじゃなかったですか) ↓ >ボタンAを何度クリックしても、ボタンAを最初にクリックしたときに表示された数字が出続け、 |
[196066] Re[6]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■記事引用/メール受信=OFF■ □投稿者/ ぽんこつ -(2023/12/26(06:21)) □U R L/ 半平太さん お返事が大変遅くなり申し訳ありません。書き方が悪く、他のコードを要求しているかのように聞こえたのならお許しください。そういう意図ではございません。一つ上の半平太さんが質問くださった内容につきましては、確かにその通りと納得しているのですが、IDプロパティの働きが全くわからず、ゆえにコードの1行目から何を行なっているのかがわからないのです。 あわせてIDプロパティはもちろんのこと、なぜ "A" や "B" が登場するのか(Aボタン、Bボタンというのは質問時に書いたのですが、ボタンとして"A"や"B"として登録はしていませんし、ボタン上にもテキストとして表示していません。なのになぜ文字列として登場したのか?) 昨日わたしが考えている内容にあわせて活用させていただき修正をしていたのですが、Aボタンのクリック時の最後にあるMsgBoxの内容を別の動作に書き換えたいのですが、これをEnd Ifの前に置いたら期待する動作が得られません。IDの働きや"A", "B"がなぜ登場するのかが理解できていないからだと思います。 ぜひご指導いただきたいです。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[196064] Re[5]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/12/25(14:27)) □U R L/ >私にはIDプロパティは初めてでして、 余り活用されることがないプロパティです。 >なぜこれをか使わなければならないのか、他の書き方ではだめなのか、皆目検討がつきません。 これじゃなければだめと言うことはないですが、 以下の点はどう対処するお積りか教えてください。(どうすれば対処できるのか) 1.最初にボタンがクリックされたとき、 (1)Aならサイコロを振る、 でも、最初のAかどうか、どう判断しますか? (2)Bなら何もしない。 でも、最初のBかどうか、どう判断しますか? 2.同じボタンが2回続けてクリックされたとき、 (1)Aなら以前の出目を表示する。 a. Aの2回目かどうか、どう判断しますか? b. 以前の出目は、どうやって出しますか?(以前の出目はどこにあるんですか?) (2)Bなら何もしない。 Bの2回目かどうか、どう判断しますか? |
[196063] Re[4]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■記事引用/メール受信=OFF■ □投稿者/ ぽんこつ -(2023/12/25(10:34)) □U R L/ 半平太さんへ お返事が大変遅くなり、申し訳ございません。 希望通り動いたのですが、どうしても最初の1行から意味が理解できません。 If Left(Range("Z200").ID, 1) <> "A" Then 私にはIDプロパティは初めてでして、検索したのですが、html関連のサイトしか見当たらず、これがどんな働きをするのか、なぜこれをか使わなければならないのか、他の書き方ではだめなのか、皆目検討がつきません。 値としてはA1かA2のみがはいるようですが、仕組みがわからないのです。 申し訳ございませんが、上の1行だけで構いませんので、解説いただけますか。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[196060] Re[3]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/12/24(22:55)) □U R L/ こんな感じかな? Sub ボタンA_Click() If Left(Range("Z200").ID, 1) <> "A" Then Randomize Range("Z200").ID = "A" & Round(Rnd(), 0) + 1 End If MsgBox Right(Range("Z200").ID, 1) End Sub Sub ボタンB_Click() If Range("Z200").ID = "" Then Exit Sub ElseIf Left(Range("Z200").ID, 1) <> "B" Then Range("Z200").ID = "B" MsgBox "Bの処理" End If End Sub どのボタンをクリックしたのか、確率2分の1の出目は何だったのかについて 何処かに覚えさせておかないとならないので、上のコードでは、 Z200セルのIDプロパティに文字列型で書きこんでいます。 |
[196059] Re[2]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■記事引用/メール受信=OFF■ □投稿者/ ぽんこつ -(2023/12/24(21:42)) □U R L/ 半平太さんへ ご質問ありがとうございます。 ボタンBを最初にクリックしてもなにも反応しない、またクリックは一回のみで、二回目以降は無効。 もしこのようなことができればうれしいです。VBAは初級レベルはクリアしたかな程度です。 よろしくお願いいたします。 |
[196058] Re[1]: 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/12/24(20:21)) □U R L/ 初っ端にボタンBをクリックしたり、 立て続けにボタンBをクリックしたら、どうなるんですか? |
[196057] 別のボタンがクリックされるまで、もう一方のボタンを何度クリックしても同じ操作が行われる- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ ぽんこつ -(2023/12/24(14:13)) □U R L/ お世話になります。 Sheet1上にボタンA、ボタンBの2つがあります。ボタンAを1回クリックすると、1/2の確率で1または2が表示されます。 行いたいことは、ボタンBをクリックをするまでは、ボタンAを何度クリックしても、ボタンAを最初にクリックしたときに表示された数字が出続け、ボタンBがクリックされたら、ボタンBのマクロの書かれた動作が行われ、次に、ボタンAをクリックしたときには新たに1または2が表示されるということです。 テストを作ろうとしているのですが、ボタンBがクリックされるまで、ボタンAを何度クリックしても同じ問題が提示されることをやりたいと思っているのですが。。。 よろしくお願いいたします。 【例】 ・ボタンAをクリック→2が表示 ・ボタンBをクリック→Bの処理 ・ボタンAをクリック→(新たに1または2を抽選し表示) ***** ・ボタンAをクリック→2が表示 ・ボタンAをクリック→2が表示 ・ボタンAをクリック→2が表示 ・ボタンAをクリック→2が表示 ・ボタンBをクリック→Bの処理 ・ボタンAをクリック→(新たに1または2を抽選し表示) 【Windows11, Office365】 |