Ваш вопрос касается выбора, когда вы впервые сталкиваетесь с чем-то, где IsNumeric()
возвращает true
Эта обновленная версия должна сделать это
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
Игнорируя все остальные вещи неправильно (и сохраняя существующую текущую логику, где это возможно), вы могли бы использовать логику Exit For
(а также закрытие оператора IF
).
Exit For
выйдет из цикла For
. Вы делаете это после того, как первое слово было проанализировано и создано.
Затем вы просто проверяете, имеет ли новое первое слово (DoorNo
) значение или нет. Если это так, назначьте его и выйдите из цикла
Кроме того, поскольку ваша функция возвращает что-то, вы должны сделать это явно, используя As
Однако это не имеет смысла, поскольку вся ваша текущая логика проверяет, является ли какой-либо символ в строке числовым, и возвращает его, если так! Это означает, что адрес a12 (если он будет существовать) никогда не будет поднят. Где, как мой бизнес, который не имеет номера, но имеет глупое имя 5tars C3entre
будет принят по вашей логике
Не зная ситуацию, вашу логику, тип ценностей, которые вы получаете (например, 12 Дом, Двенадцать Дом, 12а Дом, Дом, Другое и т.д.), Трудно помочь больше, но это должно заставить вас работать