2017-03-03 3 views
0

ユーザーフォームにはユーザーが編集できるテキストボックスがいくつかありますが、デバッグ中であることが報告されました。少しの調査の後、私は、ユーザーがテキストボックスから値を削除していて、これが実行時エラー13を引き起こしていることが分かった。ユーザーが値を削除し、servcreditテキストボックスになると、 a vbnullstring値がVBAテキストボックスから削除されたときのデバッガの防止

現在、テキストボックスには2つのコードがあります。

これは、背中のExcelシートに数値を入力します。

Private Sub ServCredit_Change() 

Worksheets("Calculator").Range("L18") = CDec(ServCredit) 

End Sub 

このユーザーはない入力なし数値図形を行い確実。

Private Sub ServCredit_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 

If (KeyAscii > 47 And KeyAscii < 58) Or KeyAscii = 46 Or KeyAscii = 32 Then 
KeyAscii = KeyAscii 
Else 
KeyAscii = 0 
MsgBox "Invalid Key Pressed" 
End If 

End Sub 

答えて

0

最初ServCreditが数値であるかどうかを確認する必要があります。 CDecは、vbNullStringを数値にキャストできません。

If IsNumeric(ServCredit) then 
    Worksheets("Calculator").Range("L18") = CDec(ServCredit) 
else 
    Worksheets("Calculator").Range("L18") = 0 
End If 
1

値が存在する場合は、単純にテストすることができ:それ簡単だった場合、私は信じることができない

Private Sub ServCredit_Change() 

If Len(ServCredit.Text) <> 0 then 
    Worksheets("Calculator").Range("L18").Value2 = CDec(ServCredit) 
Else 
    Worksheets("Calculator").Range("L18").Value2 = vbnullstring 
end if 
End Sub 
+0

は...ありがとうございました。 –

+0

これは 'Worksheets(" Calculator ")を設定します。範囲(" L18 ")を' ServCredit'に入力した最後の値にすると、計算が間違ってしまう可能性があります。テキストボックスの値が例えば'152'とバックスペースを使用して3桁の数字をすべて削除すると、L18は' 1'のままです。最も安全な方法は数値と照合し、そうでなければ「0」に設定することです。あなたの解決策は、数字だけを入力できることに依存しています。 –

+0

@Peh私は細胞をクリアする方がよいと同意します。問題は、コントロールが非数値入力を防ぐために既に検証されていることを明確にしています。 – Rory

関連する問題