過去ログ

                                Page      64
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼If Then構文が沢山  123 02/9/11(水) 10:35
   ┣Re:If Then構文が沢山  Jaka 02/9/11(水) 12:55
   ┃  ┗Re:If Then構文が沢山  123 02/9/11(水) 13:20
   ┃     ┗Re:If Then構文が沢山  コロスケ 02/9/11(水) 14:01
   ┃        ┗Re:If Then構文が沢山  Jaka 02/9/11(水) 14:05
   ┃           ┗Re:If Then構文が沢山  つん 02/9/11(水) 14:18
   ┗皆さん すごいです。  123 02/9/11(水) 15:08

 ───────────────────────────────────────
 ■題名 : If Then構文が沢山
 ■名前 : 123
 ■日付 : 02/9/11(水) 10:35
 -------------------------------------------------------------------------
   お助けください。

ユーザーフォームのTextBox1をExit(TextBox1_Exit)する際に
いくつかの If Then を実行させています。
このIf構文には、TextBox1_KeyDown によって数値を8桁にした数値を
判断して実行する If も含まれています。

TextBox1に数値を入力してEnterを押した場合は、その入力した数値は
8桁に変更され、その8桁の数値を TextBox1_Exit のIf構文が判断するのですが、
Enterを押さずに、カーソル下を押して次のTextBoxへ移動すると
TextBox1_KeyDown の8桁数値変換が行われません。

そこで、TextBox1_KeyDown の内容を TextBox1_Exit へ移したのですが、
8桁の数値変換が行われません。
TextBox1_Exit 内のIf構文について、まず8桁の数値変換が行われて、それから
次のIf構文へ進ませるにはどうしたらよいのでしょうか。

どなたか教えてください。宜しくお願いいたします。
 ───────────────────────────────────────  ■題名 : Re:If Then構文が沢山  ■名前 : Jaka  ■日付 : 02/9/11(水) 12:55  -------------------------------------------------------------------------
   こんにちは。

コードを提示した方が、レスがつきやすくなると思います。
現時点では、どう言う事なのか良く解りません。
 ───────────────────────────────────────  ■題名 : Re:If Then構文が沢山  ■名前 : 123  ■日付 : 02/9/11(水) 13:20  -------------------------------------------------------------------------
   ▼Jaka さん こんにちは。

恥ずかしながらコードを記します。(変なところがあるかとは思いますが..)

Private Sub T_個人番号_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If T_個人番号.Value = "" Then
Exit Sub
Else
  Dim strTest2 As String
  Dim Find As Range
  strTest2 = T_個人番号.Value
 
  With ActiveSheet
    Set Find = .Range(.Cells(1, 2), .Cells(26, 2)).Find(strTest2)
    If Find Is Nothing Then
    T_該当なし.Value = "* 該当者がいません。(氏名登録可)"
    T_氏名.Value = Empty
    Exit Sub

    End If

    Find.Activate
    Cells(ActiveCell.Row, 1).Select
    T_氏名.Value = ActiveCell.Offset(0, 0).Value
  End With
End If
End Sub

上記のExitコードに以下の内容を取り込みたいのですが
(以下の内容をKeyDownではなくExitで実行したい)
単に取り込んだだけでは、6桁数値になりません。
上記コードはT_個人番号(Textbox)内の数値が6桁に
なった後に実行されなければなりません。


Private Sub T_個人番号_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   If KeyCode = 13 Then
    nn = Format(T_個人番号.Value, "000000")
    T_個人番号 = nn
  End If
End Sub

宜しくお願いいたします。
 ───────────────────────────────────────  ■題名 : Re:If Then構文が沢山  ■名前 : コロスケ <corosuke@chan.co.jp>  ■日付 : 02/9/11(水) 14:01  -------------------------------------------------------------------------
   ▼123 さん:
こんにちは。8桁か6桁か良くわからないのですが、
1.T_個人番号には数字しか入力されない。
2.入力されるデータは常に0詰の8桁数字である必要がある。
3.ExitイベントでFindを開始する。
と考えたときに、
1.KeyPressイベントで数字のみの入力に限定し、
2.入力されたらChangeイベントで8桁の0詰数字に変換する
という手順ではいかがですか?
これなら、Exitイベントが発生した時に常に"T_個人番号.Value"は8桁の数字になると思います。
違ってたらすいません。(↓こういう事を言いたいのですが...)
ではー♪

Private Sub T_個人番号_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'//入力を数字だけに限定
  If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End Sub

Private Sub T_個人番号_Change()
'//値が変ったら同時にフォーマット開始
  With T_個人番号
    '8桁以上の入力は無効
    If Len(.Value) > 8 Then .Value = Left(Val(.Value), 8)
    'フォーマット
    .Value = Format(.Value, "00000000")
  End With
End Sub
 ───────────────────────────────────────  ■題名 : Re:If Then構文が沢山  ■名前 : Jaka  ■日付 : 02/9/11(水) 14:05  -------------------------------------------------------------------------
   >単に取り込んだだけでは、6桁数値になりません。

????
どの様に取り込んだのでしょうか?

Findメソッドと言う物がありますから、変数名にFindとか同名を使うのは止めましょう。
どうしても使いたければ、xxFindとかFindxxにしましょう。

これだとどうなりますか?

Private Sub T_個人番号_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If T_個人番号.Value = "" Then
  Exit Sub
Else
  Dim strTest2 As String
  Dim Find_1 As Range
  
  strTest2 = Format(T_個人番号.Value, "000000")
  T_個人番号.Value = strTest2

  With ActiveSheet
    Set Find_1 = .Range(.Cells(1, 2), .Cells(26, 2)).Find(strTest2)
    If Find_1 Is Nothing Then
    T_該当なし.Value = "* 該当者がいません。(氏名登録可)"
    T_氏名.Value = Empty
    Exit Sub

    End If

    Find_1.Activate
    Cells(ActiveCell.Row, 1).Select
    T_氏名.Value = ActiveCell.Offset(0, 0).Value
  End With
  Set Find_1 = Nothing
End If
End Sub
 ───────────────────────────────────────  ■題名 : Re:If Then構文が沢山  ■名前 : つん <honey@sweetparty.ne.jp>  ■日付 : 02/9/11(水) 14:18  -------------------------------------------------------------------------
   みなさん、こんにちは。
せっせとやってたら、すでにコロスケさんとJakaさんが・・・
この上、私のを載せるのは無駄なだけだと思いますが、
せっかく頑張ったんで、載せて見ます(自己満足・・コロスケさん、Jakaさんごめんなさい)
Jakaさんとほとんど変わらないようですが・・・

'==============================================
Private Sub T_個人番号_Exit(ByVal Cancel As MSForms.ReturnBoolean)

  Dim strTest2 As String
  Dim rFind As Range
  
  If T_個人番号.Value = "" Then
    MsgBox "個人番号を入力してください"
    Cancel = True
    T_個人番号.SetFocus
    Exit Sub
  End If
  
  If IsNumeric(T_個人番号.Value) = False Then
    MsgBox "数字を入力してください"
    Cancel = True
    T_個人番号.SetFocus
    Exit Sub
  Else
    T_個人番号.Value = Format(T_個人番号.Value, "000000")
  End If
  
  strTest2 = T_個人番号.Value

  With ActiveSheet
    Set rFind = .Range(.Cells(2, 1), .Cells(4, 2)).Find(strTest2)
    If rFind Is Nothing Then
      T_該当なし.Value = "* 該当者がいません。(氏名登録可)"
      T_氏名.Value = Empty
      Exit Sub
    End If

    rFind.Activate
    Cells(ActiveCell.Row, 1).Select
    T_氏名.Value = ActiveCell.Value
  End With
  
  Set rFind = Nothing

End Sub
'==============================================
私がちょっと気になったのは(Findの件も気になりましたが)
変数の宣言を、コードの途中に入れてることです。
間違いではないのかもしれませんが、通常、変数の宣言は、
プロシージャの一番はじめに入れます。
その方が、後から見るときに、このプロシージャにはどういう変数が使われているかよくわかると思います。

それから、
T_氏名.Value = ActiveCell.Offset(0, 0).Value
ってありますが、これって、
ActiveCell.Value
で、ええんと違うかな?それともなんか意味あるんでしょうか?
 ───────────────────────────────────────  ■題名 : 皆さん すごいです。  ■名前 : 123  ■日付 : 02/9/11(水) 15:08  -------------------------------------------------------------------------
   コロスケさん、Jakaさん、つんさん
みなさん ありがとうございました。
すんなり 行きました。

それにしても、みなさん すごいです。

コロスケさん
8桁ではなく、6桁でした。(間違えました)

Jakaさん
変数名には注意します。

つんさん
変数は最初にまとめて宣言します。
T_氏名.Value = ActiveCell.Offset(0,0)Valueは
その通りActiveCell.Valueです。
Offsetの場所をいろいろと いじっていて(0,0)にしてしまいました。
直しました。

みなさん 本当に助かりました。ありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 64