- ベストアンサー
エクセル マクロ フォームにて
エクセル マクロの記述教えて下さい! 1)エクセル Sheet1にコマンドボタンをクリックにてフォームが表示 2)UserForm1にコマンドボタンクリックにてUserForm2が表示 3)UserForm2に OptionButton1(1、血圧) OptionButton2(2、体温) OptionButton3(3、脈) と選択させてTextBox1に(1又は2・3)のみの数字番号だけ 表示させたい! 1の数字の場合は赤文字、2なら青文字にしたい! 4)UserForm2にコマンドボタンをクリックするとUserForm1の TextBoxに数字(1~3)をそのまま表示させたい! すいません!分かりづらいですか?・・・今の段階での記述がこれです!が、下記の場合だと3)が文字(1、血圧)しか出来ません。 これを数字に認識させたいです! Private Sub CommandButton1_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 3 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "ひとつも選択されていません" Exit Sub End If With UserForm1 .TextBox1.Value = Me.Controls("OptionButton" & Cnt).Caption End With Unload Me End Sub 色々追加記述が必要ですが、頭が混乱しています! 是非、教えて下さい!
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 OptionButton も含めて、コントロールの多くには Tag プロパティーが あります。VBE 画面で、 1. 血圧の OptionButton を選択 2. Tag プロパティー欄に 1 を入力 3. 同様に、体温は 2、脈は 3 を入力 と設定します。次に Userform2 の CommandButton1_Click() において > With UserForm1 > .TextBox1.Value = Me.Controls("OptionButton" & Cnt).Caption > End With > Unload Me の部分を次のコードに差し替えます。 Dim sTag As String Dim lColor As Long sTag = Me.Controls("OptionButton" & Cnt).Tag Select Case sTag Case 1: lColor = vbRed Case 2: lColor = vbBlue Case 3: lColor = vbBlack End Select With UserForm1.TextBox1 .ForeColor = lColor .Text = sTag End With Unload Me Tag プロパティーはそれ自体に機能のない変わったプロパティーですが、 今回のような隠し要素をもたせたい場合など工夫次第で便利に使えます。
その他の回答 (3)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> Userform2のTextBox1に”血圧”と表示させたいのですが 返信が遅れてすみません。 今質問一覧をみてましたが、別の質問をたてたようですね。 関連するとはいえ、元のご質問とは異なる内容ですし、それで良い と思います。また、再質問いただいた件もそちらも解決したよう ですし、私が特に回答すべきことはありません。 頑張ってくださいね。
お礼
ありがとうございます! いつもすいません! 頑張って勉強します。
- kenpon24
- ベストアンサー率64% (66/102)
こういう関数を作って、 Private Function test(st As String) As Integer Select Case st Case "血圧" test = 1 Case "体温" test = 2 Case "脈" test = 3 Case Else test = 0 End Select End Function .TextBox1.Value = test(Me.Controls("OptionButton" & Cnt).Caption) とするのが無難ですかね。 あと文字色を変えるなら、TextBox1のForeColorプロパティを変更する。
お礼
ありがとうございます! ANo2の記述はUserform2にするんですよね! すいません、全くの素人なんで・・・ ちなみに 前回の記述で .TextBox1.Value = left(Tmp, instr(1, Tmp, "、") - 1) '、の文字を探して1文字前までを返す ↑ これだと引数式が違います!と表示されます。 どうしてなんでしょうか? すいません、質問ばかりで! ヘルプ機能がインストールされていないので・・・ 教えて下さい。
- kenpon24
- ベストアンサー率64% (66/102)
ここの部分を変える With UserForm1 .TextBox1.Value = Me.Controls("OptionButton" & Cnt).Caption End With ↓ dim Tmp as string Tmp = Me.Controls("OptionButton" & Cnt).Caption With UserForm1 .TextBox1.Value = left(Tmp, instr(1, Tmp, "、") - 1) '、の文字を探して1文字前までを返す End With
補足
早速のお返事ありがとうございます! 質問が下手でしたすいません! (1、血圧)=1としたい。 実際のCaptionには血圧しか名前を入れていません! (血圧)=1としたいです! お願いです! 是非教えて下さい。
お礼
ありがとうございました! Tagプロバティーこの方法があったんですね。 上手く表示出来るようになり 色もつける事が出来ました。
補足
すいません、もう一つ教えて下さい! Userform2で血圧の OptionButton を選択したら Userform2のTextBox1に”血圧”と表示させたいのですが お願いします。教えて欲しいです。