2016-12-22 3 views
1

Ich versuche, eine Funktion in Visual Basic zu schreiben, die ausgeführt wird, wenn bestimmte Kriterien erfüllt sind. Wenn nicht, wird die Funktion beendet.Exit-Funktion, wenn Bedingungen nicht erfüllt werden - Visual Basic

Im Moment habe ich die folgende,

Function answer(list As range) As String 

    Dim extent As Integer 
    extent = list.rows.Value 
    Dim array_1() As Double 
    ReDim array_1(1 To extent) As Double 
    Dim i As Integer 

    For i = 1 To extent 
     array_1(i) = list(i).value 
     If array_1(i) <> "L" Or array_1(i) <> "R" Or array_1(i) <> "PD" Or array_1(i) <> "D" Or array_1(i) <> "PD" Or array_1(i) <> "P" Or array_1(i) <> "S" Then 
      answer = "Your list is not valid" 
      Exit Function 
     End If 
     Next i 

    'Otherwise function will perform rest of code 

    answer = "Your list is valid" 

End Function 

Wenn mein Eingang ist: =answer(A1:A6) zum Beispiel ... mit sagen wir mal, A1 = "XXX" die nicht gleich „L“ oder „R“ oder „PD“ usw. Ich erwarte, dass meine Antwort "Deine Liste ist nicht gültig" lautet, aber stattdessen bekomme ich #WERT!

Es ist mir nicht klar, warum dies der Fall ist.

+1

'Umfang = list.rows.count' – nightcrawler23

+0

@Soto haben Sie versucht, meinen Code in meiner Antwort unten? irgendeine Anregung ? –

+0

@Shairado Ich habe. Klappt wunderbar! Danke Kumpel – Soto

Antwort

1

Es gibt ein paar Änderungen, die Sie an Ihrem Code vornehmen müssen:

  1. Damit extent die Anzahl der Zeilen in dem Bereich haben, verwenden Sie extent = list.rows.count.

  2. Sie brauchen nicht das Array array_1(), siehe Punkt 3. (dank @ nightcrawler23 für bemerken)

  3. Sie benötigen list (Range.Cells) eine Schleife durch, und prüfen Sie jedes cell.Value wenn Es enthält keine Ihrer Sonderzeichen (ich habe hier die Select Case verwendet, um Ihren Code zu vereinfachen und zu verkürzen).

-Code (getestet)

Function answer(list As Range) As String 

    Dim extent As Long 
    Dim cell As Range 

    extent = list.Rows.Count 

    ReDim array_1(1 To extent) 

    For Each cell In list.Cells 
     Select Case cell.Value 
      Case "L", "R", "PD", "D", "S" 

      Case Else 
       answer = "Your list is not valid" 
       Exit Function 

     End Select 
    Next cell 

    'Otherwise function will perform rest of code 
    answer = "Your list is valid" 

End Function 
+0

Sie brauchen das Array_1 überhaupt nicht. Dies würde einen Großteil des Codes reduzieren. – nightcrawler23

+1

Verwenden Sie einfach 'Select Case cell.Value' – nightcrawler23

+0

@ nightcrawler23 danke, Sie haben Recht, ich habe den ursprünglichen Code verwendet, ich habe nicht bemerkt, dass es nicht benötigt wird. –

0

und das Umgehen der Schleife und die Verwendung einer eine Zeile COUNTIF:

Test

Sub GetValues() 
MsgBox Answer([A1:B10]) 
End Sub 

functi auf

Function Answer(list As Range) As Boolean 
Answer = (Evaluate("Sum(COUNTIF(" & list.Address & ",{""L"",""R"",""PD"",""D"",""S""}))") = list.Cells.Count) 
End Function 
Verwandte Themen