Page 160 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼オプションボタンについて ぴかる 02/10/2(水) 12:40 ┣Re:オプションボタンについて ichinose 02/10/2(水) 14:15 ┗Re:オプションボタンについて つん 02/10/2(水) 14:20 ┗Re:オプションボタンについて ぴかる 02/10/2(水) 20:44 ┗Re:オプションボタンについて ichinose 02/10/2(水) 22:30 ┗Re:オプションボタンについて ぴかる 02/10/3(木) 8:28 ┗Re:オプションボタンについて ichinose 02/10/3(木) 12:37 ┗ヘルプも結構、むずかしいのだぁ〜 ぴかる 02/10/3(木) 20:45 ─────────────────────────────────────── ■題名 : オプションボタンについて ■名前 : ぴかる ■日付 : 02/10/2(水) 12:40 -------------------------------------------------------------------------
みなさん、こんにちは。 今回は、オプションボタンについて質問させて頂きます。状況は以下の通りです。 ・オプションボタンが10ヶ存在しています。(名称は、加工A〜加工J) ・選択したオプションボタンにてライン名を所得したい。 単純に行うと下記マクロとなりますよね。 If 加工A = True Then ライン = "加工A" If 加工B = True Then ライン = "加工B" If 加工C = True Then ライン = "加工C" If 加工D = True Then ライン = "加工D" If 加工E = True Then ライン = "加工E" If 加工F = True Then ライン = "加工F" If 加工G = True Then ライン = "加工G" If 加工H = True Then ライン = "加工H" If 加工I = True Then ライン = "加工I" If 加工J = True Then ライン = "加工J" 10行もかかるのでこんな風にならないかと・・・。 ライン = 選択されたオプションボタン名 ← マクロ化したいと思っております。 可能でありましたら、よろしくお願いいたします。 |
▼ぴかる さん: こんにちは。 >・オプションボタンが10ヶ存在しています。(名称は、加工A〜加工J) >・選択したオプションボタンにてライン名を所得したい。 > >単純に行うと下記マクロとなりますよね。 > If 加工A = True Then ライン = "加工A" > If 加工B = True Then ライン = "加工B" > If 加工C = True Then ライン = "加工C" > If 加工D = True Then ライン = "加工D" > If 加工E = True Then ライン = "加工E" > If 加工F = True Then ライン = "加工F" > If 加工G = True Then ライン = "加工G" > If 加工H = True Then ライン = "加工H" > If 加工I = True Then ライン = "加工I" > If 加工J = True Then ライン = "加工J" > >10行もかかるのでこんな風にならないかと・・・。 > ライン = 選択されたオプションボタン名 ← マクロ化したいと思っております。 > >可能でありましたら、よろしくお願いいたします。 クラスモジュールで可能かと・・・。 クラスモジュール(Class1)に、 '======================================================== Public WithEvents opbtn As MSForms.OptionButton Private Sub opbtn_Click() UserForm1.ライン = opbtn.Name End Sub '====================================================== 当該フォームモジュールに '========================================================= Public ライン As String Dim optionbttn(1 To 4) As New Class1 '======================================== Private Sub CommandButton1_Click() MsgBox ライン 'コマンドボタンクリックの例です End Sub '====================================================================== Private Sub UserForm_Initialize() Dim abc abc = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J") For i = 1 To 4 With optionbttn(i) Set .opbtn = Controls("加工" & abc(i - 1)) End With Next End Sub '===================================================================== Private Sub UserForm_Terminate() For i = 1 To 4 Set optionbttn(i) = Nothing Next End Sub '===================================================================== こんなのでいかがでしょうか? |
ぴかる さん、こんちゃ♪ オプションボタンのオブジェクト名を連番にして、(opt1〜opt10) キャプションを「加工A」・・・にして、 こんな感じではどうでしょうか? Dim i As Long For i = 1 To 5 ’面倒だったので5こしか作らなかった(^^; If Me.Controls("opt" & i).Value = True Then MsgBox "ライン = " & Me.Controls("opt" & i).Caption End If Next i オブジェクト名を「加工A」にしないとダメなのかな? |
ichinoseさん、つんさん、こんばんにゃ♪ すんません。たいへん、おそくなっちゃいました。いつも、ありがとうございます。 >ichinoseさん トライさせていただきましたが、なんでかユーザーフォームが表示されません。 「指定されたオブジェクトが見つかりません」が出てしまいます。 フォーム内のコードを削除すると表示されます。何かセッティングがあるのかな?。 多分、どっかでわたくしがチョンボしてると思いますが・・・。 ポイントがありましたら、よろしくお願いします。 おはなしチェンジ 印刷禁止フォローありがとさんでした。助かりました。 >つんさん うまく動作いたしました。だけど・・・。 >オブジェクト名を「加工A」にしないとダメなのかな? そう、ダメなの・・・。できたら、なんですけどね。 オブジェクト名は、キャプションとほぼおんなじにするのが、あたいのこだわりなんです。 >さいごに 一行ですむおいしいコードがあるのかなと思ってました。世の中、そんなに甘くないっすね。 もし、おいしいコードがありましたら、"よろしく^2"です。 |
▼ぴかる さん: こんばんは。 >すんません。たいへん、おそくなっちゃいました。いつも、ありがとうございます。 > >>ichinoseさん >トライさせていただきましたが、なんでかユーザーフォームが表示されません。 >「指定されたオブジェクトが見つかりません」が出てしまいます。 >フォーム内のコードを削除すると表示されます。何かセッティングがあるのかな?。 >多分、どっかでわたくしがチョンボしてると思いますが・・・。 >ポイントがありましたら、よろしくお願いします。 VBEの「ツール」---「デバッグイン」を繰り返すとエラー個所まで進みますが・・。 再度、ひかるさんの投稿と見比べてみました。 '=============================================================== >当該フォームモジュールに >'========================================================= >Public ライン As String >Dim optionbttn(1 To 4) As New Class1 ' ここ、1 to 10に訂正してね、私は4でテストしてしまったので >'======================================== >Private Sub CommandButton1_Click() > MsgBox ライン >'コマンドボタンクリックの例です >End Sub >'====================================================================== >Private Sub UserForm_Initialize() > Dim abc > abc = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J") ' ↑これ全角のA,B,Cですが、半角でしたか? > For i = 1 To 4 ' ↑ここも 1 to 10 > With optionbttn(i) > Set .opbtn = Controls("加工" & abc(i - 1)) ' 全角・半角の違いなら、ここで止まってるはず > End With > Next >End Sub >'===================================================================== >Private Sub UserForm_Terminate() >For i = 1 To 4 ' ↑ここも 1 to 10 > Set optionbttn(i) = Nothing > Next >End Sub >'===================================================================== |
ichinoseさん、おはようございます。 詳しいご説明ありがとうございました。修正したら、バッチグゥ〜でした。 でもコードの意味は、正直分かってません。(?_?) クラスとの兼ね合いも???。 すんません。ひとつだけ教えてください。 ユーザーフォームイベントのヘルプの見方が分からないんです。TerminateをF1押しても「キーワードがないよ」と叱られます。ヘルプをうまく使ってスキルアップしたいと思ってます。そしてichinoseさんコードの解析をしようと思ってます。よろしくお願いします。 |
▼ぴかる さん: こんにちは。 >ユーザーフォームイベントのヘルプの見方が分からないんです。TerminateをF1押しても「キーワードがないよ」と叱られます。 私もHELPの使い方が下手なんですが・・・・。 取り合えず、Terminateイベントまで検索は・・・、 VBEで、F1を押して、イルカ君には、「VBA」と入力してます。 すると、Visual Basicのヘルブを表示するという選択が表示されますので、選択します。 これでHELPが立ち上がりますので、目次の「Microsoft Visual Basic リファレンス」をクリックします。 さらに下の項目の「Visual Basic ランゲージリファレンス」をクリックします。 オブシェクトにUserformがありますので、その辺に「Terminateイベント」は書いてあります。 もっと、上手な活用法があると思いますが・・・。 |
ichinoseさん、こんばんは。 今日もおそくなってしまいました。すんません。教えて頂いた通りにやってみました。 なんとかゴールしました。ありがとうございました。結構、たいへんでしたけど・・・。 ヘルプのヘルプて無いですかね。とても使いきれそうにもないです。ヘルプも難しいッス。 |