2017-09-13 22 views
0

ちょっと私はVBAの最初の基本ステップを書こうとしています。VBA InputBoxがエラーに遭遇しました(間違った変数タイプ)InputBox

Test1: 
qm = InputBox("Wie viele Quadrat Meter hat die Wohnung?" & vbLf & "Bitte geben sie die QM Zahl an.", Angabe) 
If IsError(qm) Then GoTo Test1 

qmIntegerとして定義され、= 0、及び以下1-600から数にqmを変更Select Case mutilple代替があるれています。

InputBoxが実行され、 "Hey guys"のようなWordに入力すると、excelがエラー13(ランタイムエラー13 ':タイプミスマッチ)を表示します。

ここでの目標は、入力ボックスがクラッシュしたときに再度実行して、ユーザーに数字で正しい入力を与える新しい機会を与えることです。 (それがクラッシュすると、msgboxに "申し訳ありません、あなたのエントリーは利用できません、再試行してください"というメッセージボックスが表示されます)

私はスタックオーバーフローとグーグルそれは解決策で同じ問題を見つけることができませんでした。

私が解決策を手伝ったり、既存の説明にフィッティングしてくれたら、本当に感謝しています。

+0

あなたは –

答えて

2

Type:=1を使用すると、数値のみが許可されます。

コード

Dim qm As Integer 

qm = Application.InputBox("Wie viele Quadrat Meter hat die Wohnung?" _ 
      & vbLf & "Bitte geben sie die QM Zahl an.", "Angabe", Type:=1) 
+0

私の質問を編集して読みやすくすることに感謝します。 Allpication.Inputboxはすばらしい成果を上げました。今後の投稿と回答の例として編集を取り上げようと考えています。 – Lutscha

2

Stringとしてqmを宣言し、その数値かどうかをチェック

Sub Demo() 
    Dim qm As String 
    qm = 0 
Test1: 
    qm = InputBox("Enter value") 
    If Not IsNumeric(qm) Then GoTo Test1 
End Sub 

以下のようなものを試してみてください見ることができます。それでStringCInt()を使ってIntegerに変換する必要があります。

+0

以下の私の答えはありがとう参照してください** ** VBAの 'Application.InputBox'バージョンを使用することができます。 IsNumeric()ソリューションはヒントとして私の仕事のためのものでしたが、正しく使用する方法を教えてくれてうれしいです。 – Lutscha

1

これを解決する方法はいくつかあります。私はvariantとして変数を定義することを提案(任意のデータ型を保持することができます)、それが数値であるかどうかを確認します:

dim answer as variant, qm as integer 
do while true 
    answer = InputBox(...) 
    if isNumeric(answer) then 
     qm = cInt(answer) 
     exit do 
    endif 
loop 
+0

男これは私のためには賢い解決策です。どうもありがとう。 – Lutscha

1

あなたはそれが変わるたびに、テキストボックスのデ内容を検証するために、イベントを設定することができます。私はそれが数字であることを確認しましたが、必要な他の条件を検証することができます。 VBAであなたは4番目のパラメータTypeApplication.InputBoxを使用することができます理由です

Private Sub TextBox1_Change() 
    validator = IsNumeric(TextBox1.Value) 
    If validator = False Then 
    MsgBox "WARNING! You must enter a number!" 
    TextBox1.BackColor = &HFF8& 
    End If 
End Sub