Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6060 / 13646 ツリー ←次へ | 前へ→

【47433】テキストボックスの入力制限 ハル 07/3/9(金) 17:32 質問[未読]
【47436】Re:テキストボックスの入力制限 とおりすがり 07/3/9(金) 17:57 発言[未読]
【47437】Re:テキストボックスの入力制限 ハル 07/3/9(金) 17:58 発言[未読]
【47439】Re:テキストボックスの入力制限 とおりすがり 07/3/9(金) 18:15 発言[未読]
【47440】Re:テキストボックスの入力制限 とおりすがり 07/3/9(金) 18:17 発言[未読]
【47438】Re:テキストボックスの入力制限 ハル 07/3/9(金) 18:14 お礼[未読]
【47441】Re:テキストボックスの入力制限 ichinose 07/3/9(金) 19:29 発言[未読]
【47446】Re:テキストボックスの入力制限 ichinose 07/3/10(土) 10:38 発言[未読]

【47433】テキストボックスの入力制限
質問  ハル  - 07/3/9(金) 17:32 -

引用なし
パスワード
   テキストボックスをある計算のパラメータ入力に使っています。

そこで、テキストボックスに半角数字とピリオドのみ入力させたいので以下のように記述してみたのですが何故かピリオドが入力できません・・・。

IMEModeは3-fmIMEModeDisableとしています。

どなたかお願いします。

************************************************

Private Sub Ttxt_KeyDown( _
  ByVal KeyCode As MSForms.ReturnInteger, _
  ByVal Shift As Integer)

  blnFlag = ((KeyCode >= 48) * (KeyCode <= 57)) _
        + (KeyCode = 8) + (KeyCode = 13) _
        + (KeyCode = 9) + (KeyCode = 46)
       
  If Not blnFlag Then
    KeyCode = 0
  End If
  
End Sub

【47436】Re:テキストボックスの入力制限
発言  とおりすがり  - 07/3/9(金) 17:57 -

引用なし
パスワード
   ピリオドは何番?

Private Sub Ttxt_KeyDown( _
  ByVal KeyCode As MSForms.ReturnInteger, _
  ByVal Shift As Integer)
  
  Dim blnFlag As Boolean '←これはいいのかな?
  
Me.Caption = KeyCode

  blnFlag = ((KeyCode >= 48) * (KeyCode <= 57)) _
        + (KeyCode = 8) + (KeyCode = 13) _
        + (KeyCode = 9) + (KeyCode = 46)
    
  If Not blnFlag Then
    KeyCode = 0
  End If
 
End Sub

【47437】Re:テキストボックスの入力制限
発言  ハル  - 07/3/9(金) 17:58 -

引用なし
パスワード
   >とおりすがりさん
レスありがとうございます。

46番です

▼とおりすがり さん:
>ピリオドは何番?
>
>Private Sub Ttxt_KeyDown( _
>  ByVal KeyCode As MSForms.ReturnInteger, _
>  ByVal Shift As Integer)
>  
>  Dim blnFlag As Boolean '←これはいいのかな?
>  
>Me.Caption = KeyCode
>
>  blnFlag = ((KeyCode >= 48) * (KeyCode <= 57)) _
>        + (KeyCode = 8) + (KeyCode = 13) _
>        + (KeyCode = 9) + (KeyCode = 46)
>    
>  If Not blnFlag Then
>    KeyCode = 0
>  End If
> 
>End Sub

【47438】Re:テキストボックスの入力制限
お礼  ハル  - 07/3/9(金) 18:14 -

引用なし
パスワード
   >とおりすがりさん
解決しました!

Me.caption= keycodeを記述したおかげで、ピリオドのkeycodeがわかりました!

本当にありがとうございましたm(_ _)m

私がみたコード表だと46なのですが一体どういうことなのでしょうか・・・?
間違った表でも見てたのでしょうか?


▼とおりすがり さん:
>ピリオドは何番?
>
>Private Sub Ttxt_KeyDown( _
>  ByVal KeyCode As MSForms.ReturnInteger, _
>  ByVal Shift As Integer)
>  
>  Dim blnFlag As Boolean '←これはいいのかな?
>  
>Me.Caption = KeyCode
>
>  blnFlag = ((KeyCode >= 48) * (KeyCode <= 57)) _
>        + (KeyCode = 8) + (KeyCode = 13) _
>        + (KeyCode = 9) + (KeyCode = 46)
>    
>  If Not blnFlag Then
>    KeyCode = 0
>  End If
> 
>End Sub

【47439】Re:テキストボックスの入力制限
発言  とおりすがり  - 07/3/9(金) 18:15 -

引用なし
パスワード
   >46番です

本当に?
46はDelキーの様な気がするよ。

僕のマクロ実行して欲しいな。

※もしかしてユーザフォームじゃないのかな?

【47440】Re:テキストボックスの入力制限
発言  とおりすがり  - 07/3/9(金) 18:17 -

引用なし
パスワード
   あっ!解決したようですね。

めでたしめでたし。

【47441】Re:テキストボックスの入力制限
発言  ichinose  - 07/3/9(金) 19:29 -

引用なし
パスワード
   こんばんは。
これは、本来はテキストボックスのChangeイベントあたりで処理した方が
良いと思いますよ!!


>Me.caption= keycodeを記述したおかげで、ピリオドのkeycodeがわかりました!
>
>本当にありがとうございましたm(_ _)m
>
>私がみたコード表だと46なのですが一体どういうことなのでしょうか・・・?
>間違った表でも見てたのでしょうか?
Keycodeは、あくまでもキー コードです。
よって、同じ1でもテンキーでは、違うコードになります。

KeydownイベントのKeycodeで入力内容をチェックしていては
処理が大変です。

Changeイベントで処理すると、

Private Sub TextBox1_Change()
  Dim sv As String
  With TextBox1
    sv = Right(.Text, 1)
    If sv <> "" Then
     If Not ((Asc(sv) >= &H30) * (Asc(sv) >= &H39) _
       + (Asc(sv) >= &H2E)) Then
        .Text = Mid(.Text, 1, Len(.Text) - 1)
      End If
     End If
    End With

End Sub

こんな感じです。

【47446】Re:テキストボックスの入力制限
発言  ichinose  - 07/3/10(土) 10:38 -

引用なし
パスワード
   おはようございます。
今、起きて気が付きました

>
>
>>Me.caption= keycodeを記述したおかげで、ピリオドのkeycodeがわかりました!
>>
>>本当にありがとうございましたm(_ _)m
>>
>>私がみたコード表だと46なのですが一体どういうことなのでしょうか・・・?
>>間違った表でも見てたのでしょうか?
>Keycodeは、あくまでもキー コードです。
>よって、同じ1でもテンキーでは、違うコードになります。
>
>KeydownイベントのKeycodeで入力内容をチェックしていては
>処理が大変です。
>
>Changeイベントで処理すると、
>
>Private Sub TextBox1_Change()
  Dim g0 As Long
  Dim mstr As String
  With TextBox1
   For g0 = 1 To Len(.Text)
     mstr = Mid(.Text, g0, 1)
     If Not CBool((Asc(mstr) >= &H30) * (Asc(mstr) <= &H39) _
      + (Asc(mstr) = &H2E)) Then
      .Text = Mid(.Text, 1, g0 - 1)
      Exit For
      End If
     Next
   End With
>End Sub


イベントが発生する度にテキスト全部チェックしないと
駄目ですね!!

6060 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free