Bei Ihrer Frage geht es darum, zu entscheiden, wann Sie zum ersten Mal auf etwas stoßen, bei dem die IsNumeric()
Rückgabe wahr ist
Diese aktualisierte Version sollte es tun
Option Explicit
Sub doIt()
Dim dn As String
dn = DoorNo("12A Street 12th")
End Sub
Function DoorNo(addy As String) As String
Dim door As String
Dim AddressArray() As String
AddressArray = Split(addy)
Dim i As Integer
For i = 0 To UBound(AddressArray)
Dim iCnt As Integer
For iCnt = 1 To Len(AddressArray(i)) 'why are you looping here?
If IsNumeric(Mid(AddressArray(i), iCnt, 1)) Then
door = AddressArray(i)
End If
Next iCnt
If Not IsEmpty(DoorNo) Or Not DoorNo = Null Then
DoorNo = door
Exit For
End If
Next i
End Function
Wenn Sie alle anderen Fehler ignorieren (und Ihre derzeitige Logik beibehalten, wo dies möglich ist), können Sie die Logik verwenden, indem Sie eine Exit For
(und die IF
Anweisung schließen).
Exit For
verlässt die For
Schleife. Sie tun dies, nachdem das erste Wort analysiert und erstellt wurde.
Dann prüfen Sie einfach, ob das neue erste Wort ( DoorNo
) einen Wert hat oder nicht. Wenn dies der Fall ist, weisen Sie es zu und beenden Sie die Schleife
Da Ihre Funktion auch etwas zurückgibt, sollten Sie dies mit explizit angeben As
Es macht jedoch keinen Sinn, da Ihre gesamte aktuelle Logik prüft, ob ein Zeichen in der Zeichenfolge numerisch ist, und es zurückgibt, wenn dies der Fall ist! Dies bedeutet, dass die Adresse a12 (falls vorhanden) niemals abgeholt werden würde. Wo als mein Geschäft, das keine Nummer hat, aber den blöden Namen von hat, 5tars C3entre
würde von Ihrer Logik akzeptiert
Ohne die Situation, Ihre Logik und die Art der Werte zu kennen, die Sie erhalten (z. B. 12 House, 12 House, 12a House, House, Other usw.), ist es schwierig, mehr zu helfen, aber dies sollte Sie zum Laufen bringen
End If