過去ログ

                                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と言うメッセージを出したい
のですが、どうしたらいいでしょうか?教えてください。お願いします。
 ───────────────────────────────────────  ■題名 : Re:テキストボックスの制限。  ■名前 : Jaka  ■日付 : 03/2/24(月) 10:21  -------------------------------------------------------------------------
   こんにちは。

ここ参考になりませんか?
[#1226]
 ───────────────────────────────────────  ■題名 : ことばのあや。  ■名前 : Jaka  ■日付 : 03/2/24(月) 10:25  -------------------------------------------------------------------------
   >ここ参考になりませんか?
>[#1226]

ここと言うよりここのツリーでしたね。
すみません。
 ───────────────────────────────────────  ■題名 : Re:テキストボックスの制限。  ■名前 : つん <honey@sweetparty.ne.jp>  ■日付 : 03/2/24(月) 10:40  -------------------------------------------------------------------------
   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個のテキストボックス一個ずつに書かないとあかんかな?
長々書いたわりには役にたたないレスですみません。
こっから派生して、なにかええ案が出ないかな・・・
 ───────────────────────────────────────  ■題名 : Re:テキストボックスの制限。  ■名前 : Jカーター  ■日付 : 03/2/24(月) 10:49  -------------------------------------------------------------------------
   おじゃまします。
メッセージ表示したいTextBoxのControlSourceを
作業用セルに設定します。
設定したシートのChangeイベントでメッセージ表示するのはどうでしょうか?

と書いてみましたが、ダメレスかもしれません。
失礼しました。
 ───────────────────────────────────────  ■題名 : Re:テキストボックスの制限。  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 03/2/24(月) 21:29  -------------------------------------------------------------------------
   直接的な回答で無くてゴメン
私も、どうしても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
 ───────────────────────────────────────  ■題名 : できました!  ■名前 : sara  ■日付 : 03/2/25(火) 10:40  -------------------------------------------------------------------------
   Jakaさん、つんさん、Jカータさん、Hirohumiさん。
ありがとうございます。

っと言うか、私はかなり難しい事をしようとしたのだとびっくりしました。
頭で考えるのは簡単なのですが、実際に動かすのって難しいのですね。
皆さんがお答えくださった内容の半分(?)くらいしか理解できない・・
もっと勉強しないといけないと痛感しました!

また、機会がありましたらよろしくお願いします。m(_~_)m
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 791