2016-11-30 7 views
0

次のユーザー入力をExcel vbaでセットアップしました。この関数は、呼び出されたときに9999以下の単一の数値を入力するか、2つの数字がダッシュで区切られた形式のXXXX-XXXXの2つの数値を入力するようにユーザーに求めます。その場合、数字はどちらの場合も9999を超えることはできません。ユーザー入力を検証するvba

目的は、単一の数値(IE 50)または範囲(IEの低い値は50、高い値は75)を返すことです。現在セットアップされているように、配列の最初の位置が低い値で、2番目の位置が高い値を返すはずです。または、ユーザーが1つの番号だけを入力する場合は、配列の最初の位置に1つの番号を戻す必要があります。

現在、A)ユーザーが数字を入力したこと、B)数字が4桁以下であることを確認しています。

残念ながら、配列を返していないため、エラーが返されています。下付き文字は範囲外です。

また、ここでチェックする必要がある可能性のある他のユーザー入力がありますか?このアプリケーションは人によって広く使われることはありませんが、潜在的なエラーも最小限に抑えたいと思います。

Public Function getUserInput() As Variant 
'this function gets a user input from an input box and puts it out into the proper format 


     Dim inputString As String 
     Dim numArr() As String 

     Dim i As Long 

     ' On Error GoTo NotValidInput 
     inputString = Trim(InputBox("Enter the rows you'd like to print")) 

     'has the user entered a dash into their user input 

     If InStr(inputString, "-") > 0 Then 
       numArr() = Split(inputString, "-") 

       If UBound(numArr) <> 1 Then 
        GoTo NotValidNumberFormat 
       End If 
       If (IsNumeric(numArr(0)) And Len(numArr(0)) <= 4) And (IsNumeric(numArr(1)) And Len(numArr(1)) <= 4) Then 

        getUserInput = numArr 
        Exit Function 
       Else 
        GoTo NotValidNumberFormat 
       End If 
     'no dash 
     '60 

     Else 
      If (IsNumeric(CInt(inputString))) And Len(inputString) <= 4 Then 
        getUserInput = numArr 
       Exit Function 
      Else 
       GoTo NotValidNumberFormat 
      End If 
     End If 


Exit Function 

NotValidNumberFormat: 
'if the conversion failed, return error 
MsgBox ("Please enter the number in a valid format - either a single number no larger than 9999 or two numbers no larger than 9999 separated by only one dash (IE XX-XX)") 

getUserInput = -1 

End Function 
+1

を*残念ながら、それは配列を返すされていない、それがエラーを返しています。添字が範囲外です* - どの行がエラーを返しますか?他のサブ関数からこの関数を呼び出すと、結果をバリアントオブジェクト型にも代入していますか? –

+0

大括弧で配列を宣言する場合は、ある時点でコード内に次元を設定する必要があります。代わりに 'Dim numArr As Variant'を宣言することです。応答にダッシュがない場合は、numArrに任意の値を割り当てません。つまり、あなたのコードが実際に達成していることはわかりません。 – SJR

+0

ユーザ入力が '-1'である必要がある場合はどうなりますか? '-1'の"エラー値 "から有効な' -1'をどのように伝えますか?魔法の戻り値の代わりに構造化エラー処理を使用し、 'GoTo'を避けてください。 –

答えて

0

これが何をすべき:

Public Function getUserInput() As Variant 
    'this function gets a user input from an input box and puts it out into the proper format 
    Dim numArr As Variant 
    Dim goOn As Boolean 

    Do 
     numArr = Split(WorksheetFunction.Trim(InputBox("Enter the rows you'd like to print in the format 'nnnn' or 'nnnn-mmmm'")), "-") 
     Select Case UBound(numArr) 
      Case 0 
       goOn = Format(numArr(0), "0000") Like "####" 
      Case 1 
       goOn = Format(numArr(0), "0000") Like "####" And Format(numArr(1), "0000") Like "####" 
     End Select 
     If Not goOn Then MsgBox "Please enter the number in a valid format - either a single number no larger than 9999 or two numbers no larger than 9999 separated by only one dash (ex: XX-XX)"   
    Loop While Not goOn 
    getUserInput = numArr 
End Function 
関連する問題