Page 791 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼テキストボックスの制限。 sara 03/2/23(日) 16:08 ┣Re:テキストボックスの制限。 Jaka 03/2/24(月) 10:21 ┃ ┗ことばのあや。 Jaka 03/2/24(月) 10:25 ┣Re:テキストボックスの制限。 つん 03/2/24(月) 10:40 ┣Re:テキストボックスの制限。 Jカーター 03/2/24(月) 10:49 ┣Re:テキストボックスの制限。 Hirofumi 03/2/24(月) 21:29 ┗できました! sara 03/2/25(火) 10:40 ─────────────────────────────────────── ■題名 : テキストボックスの制限。 ■名前 : sara ■日付 : 03/2/23(日) 16:08 -------------------------------------------------------------------------
すみません。全くの初心者で、わからない事だらけです。 どなたか教えてください。 下記のようなフォームがあります。 UserForm1 TextBox1 TextBox2 TextBox3 TextBox4 TextBox5 TextBox6 . . . . この様な感じでTextBox80件くらいひとつのフォーム上に並んでいます。 このTextBoxに値を入力した時、TextBoxの偶数番号(TextBox2,TextBox4,TextBox6) に値が入力された時のみ”あ”であれば○ それ以外はXと言うメッセージを出したい のですが、どうしたらいいでしょうか?教えてください。お願いします。 |
こんにちは。 ここ参考になりませんか? [#1226] |
>ここ参考になりませんか? >[#1226] ここと言うよりここのツリーでしたね。 すみません。 |
sara さん、おはようございます。 >UserForm1 > > TextBox1 TextBox2 > TextBox3 TextBox4 > TextBox5 TextBox6 > . . > . . > >この様な感じでTextBox80件くらいひとつのフォーム上に並んでいます。 >このTextBoxに値を入力した時、TextBoxの偶数番号(TextBox2,TextBox4,TextBox6) >に値が入力された時のみ”あ”であれば○ それ以外はXと言うメッセージを出したい >のですが、どうしたらいいでしょうか?教えてください。お願いします。 クラスモジュールを使えばいいかなぁ? こんな感じですけど・・・・ '=クラスモジュール============================================= Private WithEvents pr_txtBox As MSForms.TextBox Public Property Get txtBox() As MSForms.TextBox Set txtBox = pr_txtBox End Property Public Property Let txtBox(ByVal txtBoxNew As MSForms.TextBox) Set pr_txtBox = txtBoxNew End Property Private Sub Class_Terminate() Set pr_txtBox = Nothing End Sub Private Sub pr_txtBox_Change() If pr_txtBox.Value = "あ" Then MsgBox "○" Else MsgBox "×" End If End Sub '=ユーザーフォーム============================================= Private clsTest() As Class1 Private k As Long Private Sub UserForm_Initialize() Dim i As Long k = 0 For i = 1 To 6 If i Mod 2 = 0 Then ReDim Preserve clsTest(k) Set clsTest(k) = New Class1 clsTest(k).txtBox = Me.Controls("TextBox" & i) k = k + 1 End If Next i End Sub Private Sub UserForm_Terminate() Dim i As Long For i = 0 To k - 1 Set clsTest(i) = Nothing Next i End Sub テキストボックスを6つだけ用意してテストしてみました。 でも、これやと、テキストボックスに何か入力するたびにメッセージボックスが出てしまいますね・・・・ クラスでのイベントにはExitとかないし・・・やっぱし、80個のテキストボックス一個ずつに書かないとあかんかな? 長々書いたわりには役にたたないレスですみません。 こっから派生して、なにかええ案が出ないかな・・・ |
おじゃまします。 メッセージ表示したいTextBoxのControlSourceを 作業用セルに設定します。 設定したシートのChangeイベントでメッセージ表示するのはどうでしょうか? と書いてみましたが、ダメレスかもしれません。 失礼しました。 |
直接的な回答で無くてゴメン 私も、どうしても80以上のTextBoxに同じ様にコード書かなければ成らなくて つんさんの様なClassも考えたのですが、Exitイベントが使えづ、 通常どおりにイベントを書きました 通常で行くと以下のようなコードを書くと思います UserFormのコードとして 1、偶数のTextBoxに"あ"を入れた時の判定をするFunctionです Private Function ExitTextBox(txtBox As MSForms.TextBox) As Boolean Dim intBoxNumb As Integer Dim intNameLength As Integer intNameLength = Len("Textbox") intBoxNumb = CInt(Mid(txtBox.Name, intNameLength + 1)) If intBoxNumb Mod 2 = 0 Then If txtBox.Text = "あ" Then MsgBox "○" Else Beep MsgBox "×" ExitTextBox = True End If End If End Function 2、各TextBoxのイベントとして 例えばTextBox1とすると Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Cancel = ExitTextBox(TextBox1) End Sub ただ、2のコードを番号だけ変えて80こ書くのは辛いので そこで、手抜きを考えました やり方は、VBAを使ってTextファイルにコードを生成してコピーする事です 別のBookでも、同じBookでも善いのですが以下のマクロを標準モジュールに書いてください 実行すると、Bookが有るフォルダにCode.txtと言うTextフアイルが生成され、中身は2のコードの番号違いが80個作成されています これをメモ帳等で開き、コピーしてUserFormのモジユールに張りつけます 私の場合はこれで上手くいきました 非常の垢抜けない物で申し訳有りません Public Sub CodeMake() Dim i As Long Dim strCode(3) As String Dim dfn As Integer Dim strFileName As String Dim strOutPut As String Const clngNumb As Long = 80 strCode(0) = "Private Sub TextBox" strCode(1) = "_Exit(ByVal Cancel As MSForms.ReturnBoolean)" _ & vbCrLf & vbCrLf strCode(2) = " Cancel = ExitTextBox(TextBox" strCode(3) = ")" & vbCrLf & vbCrLf & "End Sub" & vbCrLf strFileName = ThisWorkbook.Path & "\" & "Code.txt" dfn = FreeFile Open strFileName For Output As dfn For i = 1 To clngNumb strOutPut = "" strOutPut = strCode(0) & i & strCode(1) strOutPut = strOutPut & strCode(2) & i & strCode(3) Print #dfn, strOutPut Next i Close dfn End Sub |
Jakaさん、つんさん、Jカータさん、Hirohumiさん。 ありがとうございます。 っと言うか、私はかなり難しい事をしようとしたのだとびっくりしました。 頭で考えるのは簡単なのですが、実際に動かすのって難しいのですね。 皆さんがお答えくださった内容の半分(?)くらいしか理解できない・・ もっと勉強しないといけないと痛感しました! また、機会がありましたらよろしくお願いします。m(_~_)m |