2016-09-21 22 views
0

Ich möchte den Bereich der akzeptierten Werte einschränken, die Benutzer eingeben können.InputBox: Nur bestimmte Wertebereiche zulassen

Zum Beispiel möchte ich 0-100 nur erlauben, und wenn sie über 100 eingeben, dann

  1. automatisch einen Standardwert (wie 10) und
  2. erstellen eine Pop-up-Nachricht eingeben zeigt an, dass der Standardwert angewendet wurde.

Hier ist, was ich bisher habe:

Dim CO2PriceBox As Variant 
    CO2PriceBox = InputBox("Please Enter CO2 Allowance Price ($/ton)", "Enter CO2 Allowance Price", 0) 
    Range("C11").Value = CO2PriceBox 

Antwort

0

ich es so tun würde:

Dim CO2PriceBox As Variant 

CO2PriceBox = InputBox("Please Enter CO2 Allowance Price ($/ton)", "Enter CO2 Allowance Price", 0) 

If Not IsNumeric(CO2PriceBox) Or CO2PriceBox < 0 Or 100 < CO2PriceBox Then 'If value out of specified range 

    CO2PriceBox = 10 'Default value 
    MsgBox "You Entered a wrong value, using default", vbOKOnly 
End If 
+2

FYI: Die 'IsNumeric (CO2PriceBox)' ist veraltet, da alle nicht-numerischen Werte einen VBA-Fehler am '<' Zeichen auslösen (weil es nicht verglichen werden kann). Dennoch ist es möglich, 'Application.InputBox' mit' Type: = 1' zu verwenden, um dies standardmäßig zu vermeiden. ;) –

+0

Danke! Diese Lösung ist fast perfekt, aber ein kleines Problem: Ich tippte es genau wie angegeben und es funktioniert reibungslos, aber es stellt den Wert in der Zelle nicht auf den Standardwert (10) zurück, wenn ein eingegebener Wert außerhalb des Bereichs liegt . Es korrigiert es in der Dialogbox, aber nicht die tatsächliche Zelle. Irgendein Rat? Vielen Dank! – user6851629

+0

Macht nichts, Problem gelöst! Ich musste nur "Range (" C11 ") hinzufügen. Value = CO2PriceBox" nach der Zeile, die das Makro anweist, den Standardwert zu verwenden. Vielen Dank! – user6851629

1

Sie Excel InputBox() Methode verwenden, um ein wenig "Wrapper" Funktion zu bauen:

Function GetValue(prompt As String, title As String, minVal As Long, maxVal As Long, defVal As Long) As Variant 
    GetValue = Application.InputBox(prompt & "[" & minVal & "-" & maxVal & "]", title, Default:=defVal, Type:=1) 
    If GetValue < minVal Or GetValue > maxVal Then 
     GetValue = defVal 
     MsgBox "your input exceeded the range: [" & minVal & "-" & maxVal & "]" & vbCrLf & vbCrLf & "the default value (" & defVal & ") was applied", vbInformation 
    End If 
End Function 

und verwenden Sie es wie folgt:

Option Explicit 

Sub main() 

    Range("C11").Value = GetValue("Please Enter CO2 Allowance Price ($/ton)", "Enter CO2 Allowance Price", 0, 100, 10) 

End Sub