2016-09-11 12 views
0

私はこのコードを持っています。私はこれをどのように修正することができますか、私のExcelテーブルに入力するときに番号vlauesするにはテキストボックス9と10が必要ですか?VBAテキストボックスの数値を

Sub FillRanges(ws As Worksheet, L As Long) 
With ws 
    .Range("C" & L).Value = (Now) 
    .Range("D" & L).Value = Me.TextBox2 
    .Range("E" & L).Value = Me.TextBox3 
    .Range("F" & L).Value = Me.TextBox4 
    .Range("G" & L).Value = Me.TextBox5 
    .Range("K" & L).Value = Me.ComboBox1 
    .Range("L" & L).Value = Me.ComboBox2 
    .Range("M" & L).Value = Me.ComboBox3 
    .Range("N" & L).Value = Me.TextBox9 
    .Range("O" & L).Value = Me.TextBox10 
    .Range("R" & L).Value = Me.TextBox39 
    .Range("P" & L).Value = Me.TextBox40 
End With 

End Subの

+0

...

ValidateStringInput(tb As MSForms.TextBox, validStrings() as String) 

と好きなあなたはこれまでにしようとしたのですか?あなたのコードを投稿してください!あなたがそれを走らせたとき何が起こったのですか?代わりに何が起こると思いますか?具体的に何が問題になっていますか? – Robert

答えて

1

私はそれが(書き込み)を使用する前に、ユーザー入力を検証することが好ましいことだと思う、それは

ので、あなたには、いくつかの非常にシンプルなユーザー入力の検証潜水艦を書くと以下のように、コントロール変更イベントハンドラ内からそれらを呼び出したいことがあります。私はDoubleタイプの入力が必要とされるであろうと想定

Option Explicit 

Private Sub TextBox9_Change() 
    ValidateNumericInput Me.TextBox9, 0, 10.4 '<--| as soon as this control text changes, call 'ValidateNumericInput' to validate it 
End Sub 


Private Sub ValidateNumericInput(tb As MSForms.TextBox, minVal As Double, maxVal As Double) 
    Dim errMsg As String 

    With tb 
     If Len(.Text) > 0 Then '<-- proceed only if there's some text to validate! 
      Select Case True 
       Case Not IsNumeric(.value) '<--| if not a "numeric" input 
        errMsg = "please enter a number" 
       Case CDbl(.Text) < minVal Or CDbl(.Text) > maxVal '<--| if "numeric" input exceeds passed range 
        errMsg = "please enter a number within " & minVal & " and " & maxVal 
      End Select 
      If errMsg <> "" Then '<--| if error message has been written 
       MsgBox "invalid input in " & tb.name & vbCrLf & vbCrLf & errMsg, vbCritical + vbExclamation + vbOKOnly, "Invalid input" '<--| infrm the user 
       .Text = "" '<--| delete textbox input 
      End If 
     End If 
    End With 
End Sub 

、しかし、あなたは簡単にあなたがかもしれないので、他のtypes

に適応させることができますそして、このような他の潜水艦を追加します。

+0

これは私が必要としていたものです。ありがとう – Alex

3

あなたはCDbl()のような変換機能を使用することができます。

Sub FillRanges(ws As Worksheet, L As Long) 
With ws 
    .Range("C" & L).Value = (Now) 
    .Range("D" & L).Value = Me.TextBox2 
    .Range("E" & L).Value = Me.TextBox3 
    .Range("F" & L).Value = Me.TextBox4 
    .Range("G" & L).Value = Me.TextBox5 
    .Range("K" & L).Value = Me.ComboBox1 
    .Range("L" & L).Value = Me.ComboBox2 
    .Range("M" & L).Value = Me.ComboBox3 
    .Range("N" & L).Value = CDbl(Me.TextBox9) 
    .Range("O" & L).Value = CDbl(Me.TextBox10) 
    .Range("R" & L).Value = Me.TextBox39 
    .Range("P" & L).Value = Me.TextBox40 
End With 

他の変換機能もあります。 CInt()(整数)、CLng()(ロング)、CDec()(10進数)です。

関連する問題