Câu hỏi của bạn là về việc chọn lần đầu tiên bạn gặp điều gì đó IsNumeric()
trả về đúng
Phiên bản cập nhật này nên làm điều đó
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
Bỏ qua tất cả những điều khác sai (và giữ logic hiện tại của bạn ở nơi có thể), logic bạn có thể sử dụng là sử dụng một Exit For
(cũng như đóng IF
câu lệnh).
Exit For
sẽ thoát khỏi For
vòng lặp. Bạn làm điều này sau khi từ đầu tiên đã được phân tích và tạo ra.
Sau đó, bạn chỉ cần kiểm tra xem từ đầu tiên mới ( DoorNo
) có giá trị hay không. Nếu có, gán nó và thoát khỏi vòng lặp
Ngoài ra, vì hàm của bạn trả về một cái gì đó, bạn nên làm cho nó rõ ràng bằng cách sử dụng As
Tuy nhiên, sẽ không có ý nghĩa gì vì tất cả logic hiện tại của bạn đang kiểm tra xem có bất kỳ ký tự nào trong chuỗi là số hay không và trả về nếu có! Điều này có nghĩa là địa chỉ a12 (nếu nó tồn tại) sẽ không bao giờ được chọn. Trường hợp là doanh nghiệp của tôi, không có số nhưng có tên ngu ngốc 5tars C3entre
sẽ được chấp nhận bởi logic của bạn
Không biết tình hình, logic của bạn, loại giá trị bạn nhận được (ví dụ: Nhà 12, Nhà mười hai, Nhà 12a, Nhà khác, v.v.) thật khó để giúp đỡ nữa nhưng điều này sẽ giúp bạn đi
End If