Sua pergunta é sobre como escolher a primeira vez que você encontra algo em que IsNumeric()
retorna verdadeiro
Esta versão atualizada deve fazê-lo
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
Ignorando todas as outras coisas erradas (e mantendo sua lógica atual existente sempre que possível), a lógica que você pode usar é usar um Exit For
(assim como fechar a instrução IF
).
Exit For
sairá do loop For
. Você faz isso depois que a primeira palavra foi analisada e criada.
Depois, você simplesmente verifica se a nova primeira palavra ( DoorNo
) tem um valor ou não. Em caso afirmativo, atribua-o e saia do loop
Além disso, como sua função retorna alguma coisa, você deve explicitar usando As
No entanto, não faz sentido, pois toda a sua lógica atual está verificando se algum caractere da string é numérico e retornando-o em caso afirmativo! Isso significa que o endereço a12 (se existir) nunca seria escolhido. Onde, como o meu negócio, que não tem um número, mas tem o nome estúpido de 5tars C3entre
seria aceito pela sua lógica
Sem conhecer a situação, sua lógica, tipo de valores que você está recebendo (por exemplo, 12 House, Twelve House, 12a House, House, Other etc) é difícil ajudar mais, mas isso deve fazer você ir