2017-09-03 3 views
1

私は、アドレスデータを入力するためにユーザーフォームを作成しています。私はアドレス名のテキストボックス、道路、通りなどを選択するためのコンボボックス、奇数と偶数の4つの数値ボックスを持っています。Ifステートメントを使用してセルをクリアする

数字は既に入力されているが、ユーザーがボックスを「〜」ボックスの数よりも大きな値に変更した場合、VBAに「〜」ボックスの内容をクリアする問題が発生しています。ここで

は、私が現在持っているコードです:明確にするために

Private Sub txtstreet_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    Select Case KeyAscii 
    Case 65 To 90 
    Case 97 To 122 
    Case 32 
    Case 127 
    Case Else 
     KeyAscii = 0 
    End Select 
End Sub 

Private Sub UserForm_Initialize() 
    roaddesciptor.List = Array("ROAD", "STREET", "WAY", "AVENUE", "DRIVE", "GROVE", "LANE", "GARDENS", "PLACE", "CRESENT", "CLOSE", "SQUARE", "HILL", "CIRCUS", "MEWS", "VALE", "RISE", "ROW", "MEAD", "WHARF") 
    roaddesciptor.ListIndex = 0 
End Sub 

Private Sub txtaddoddfrom_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    Select Case KeyAscii 
    Case 48 To 57 
    Case Else 
     KeyAscii = 0 
    End Select 
End Sub 

Private Sub txtaddoddfrom_AfterUpdate() 
    If txtaddoddfrom.Value < txtaddoddto.Value Or txtaddoddto = "" And txtaddoddfrom.Value Mod 2 = 1 Then Exit Sub 
    If txtaddoddfrom.Value Mod 2 <> 1 Or txtaddoddfrom.Value > txtaddoddto.Value Then txtaddoddfrom = "" 
    'Else: txtaddoddfrom = "" 
End Sub 

Private Sub txtaddoddto_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    Select Case KeyAscii 
     Case 48 To 57 
     Case Else 
      KeyAscii = 0 
    End Select 
End Sub 

Private Sub txtaddoddto_AfterUpdate() 
    If txtaddoddto.Value Mod 2 = 1 And txtaddoddto.Value >= txtaddoddfrom.Value Then Exit Sub 
    If txtaddoddto.Value Mod 2 <> 1 Or txtaddoddto.Value < txtaddoddfrom.Value Then txtaddoddto = "" 
End Sub 

Private Sub txtaddevenfrom_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    Select Case KeyAscii 
    Case 48 To 57 
    Case Else 
     KeyAscii = 0 
    End Select 
End Sub 

Private Sub txtaddevenfrom_AfterUpdate() 
    If txtaddevenfrom.Value < txtaddevento.Value Or txtaddevento = 0 And txtaddevenfrom.Value Mod 2 <> 1 Then Exit Sub 
    If txtaddevenfrom.Value Mod 2 = 1 Or txtaddevenfrom.Value > txtaddevento.Value Then txtaddevenfrom = "" 
End Sub 

Private Sub txtaddevento_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    Select Case KeyAscii 
    Case 48 To 57 
    Case Else 
     KeyAscii = 0 
    End Select 
End Sub 

Private Sub txtaddevento_AfterUpdate() 
    If txtaddevento.Value Mod 2 <> 1 And txtaddevento.Value >= txtaddevenfrom.Value Then Exit Sub 
    If txtaddevento.Value Mod 2 = 1 Or txtaddevento.Value < txtaddevenfrom.Value Then txtaddevento = "" 
End Sub 
+0

あなたは 'If Not IsNumeric(Chr(KeyAscii))を使用してコードを短縮することができます。次にKeyAscii = 0'を入力して数値を入力します。 .....また、このタイプの文を使用すると、コードを明確にすることができます。 '' Asc( "a")からAsc( "z") '....' case 127'行は誤ってインクルードされているようです – jsotola

答えて

0

、あなたが新しい場合は、「へ」のボックスが消去されます「から」ボックスのAfterUpdateイベントにコードを追加したいです"From"ボックス番号は "To"ボックス番号よりも大きいです。

"From"ボックスAfterUpdateイベントに以下のコード行を追加すると、必要な処理が行われます。 "To"ボックスではなく、 "From"ボックスをクリアしていることを除けば、既に持っているものと同じです。

txtaddoddfrom.Value > txtaddoddto.Value Then txtaddoddto = "" 
0

ここでは3つの問題があります。

まず、空白フィールドと同じ文字列に数値演算子を使用することはできません。これを可能にするさまざまな方法があります。 1つの方法は(0 & "")です。もう一つは、明示的にそれらをチェックすることです。私はあなたのコードを調整するのに両方を使用します。

第2に、タブのフィールドの値を変更しようとして失敗します。成功するためには、Application.EnableEventsステートメントを折り返さなければなりません。

最後に、 "from"ハンドラの "to"フィールドの代わりに "from"フィールドをザッピングしていました。

はここにあなたのハンドラのペアは固定です:

Private Sub txtaddoddfrom_AfterUpdate() 
    If (0 & txtaddoddfrom) Mod 2 <> 1 Then txtaddoddfrom = "" ' If even (or ""), zap it 
    If txtaddoddfrom = "" Or txtaddoddto = "" Then Exit Sub 'If was even or blank, done -> exit 
    Application.EnableEvents = False 
    If txtaddoddto < txtaddoddfrom Then txtaddoddto.Value = "" ' Otherwise compare and zap txtaddoddto if smaller 
    Application.EnableEvents = True 
End Sub 


Private Sub txtaddoddto_AfterUpdate() 
    If (0 & txtaddoddto) Mod 2 <> 1 Then txtaddoddto = "" ' If even (or ""), zap it 
    If txtaddoddto = "" Or txtaddoddfrom = "" Then Exit Sub 'If was even or blank, done -> exit 
    Application.EnableEvents = False 
    If txtaddoddfrom > txtaddoddto Then txtaddoddfrom = "" ' Otherwise compare and zap txtaddoddfrom if greater 
    Application.EnableEvents = True 
End Sub 

注:フィールドの値を明示的に.Valueを使用してアクセスすることができ、または暗黙的にそれなし。一貫して1つのフォームを使用することをお勧めします。

関連する問題