У меня есть очень элементарные знания vba, и я очень запутался в каком-то коде, который мне дали для выполнения рутинных задач. Я уверен, что когда кто-то смотрит на это, он либо видит, что я все испортил, либо упускаю что-то (или некоторые вещи), совершенно очевидное.
У меня есть справочная таблица почтовых индексов, которые распределены по области на основе внутренних групп моей организации. В некоторых случаях почтовые индексы, отправленные внешними клиентами, не «сопоставимы» с вышеуказанным «поиском по почтовому индексу». Мне передали какой-то старый код, который предполагает использование Района на основе похожих известных почтовых индексов; оригинальный код не работает, а мой обновленный код все еще не работает.
Теоретически код берет поле почтового индекса, избавляется от пробелов, затем берет первые 3 символа и сопоставляет их со вторым поиском, чтобы назначить «Площадь»; если он не найдет совпадения, он снова будет проходить по коду, но на этот раз с первыми 4 символами и т. д., пока не получит 7 символов, после чего он выделяет область «Неверный почтовый индекс».
Второй поисковый запрос, упомянутый выше, был построен, поэтому все известные почтовые индексы сокращены до первых 3 символов; все, которые соответствуют одной области, остаются как 3 символа, а все остальные изменяются на 4 символа; все из них, которые соответствуют одной области, остаются как 4 символа, а те, которые не исправлены, до 5 символов и так далее, пока все почтовые индексы от 3 до 7 символов каждый не будут иметь 1 область.
Я обновил имена полей и таблиц (поскольку некоторые поля больше не существуют)
Function FindArea(PCD As String) As String
Dim rs As DAO.Recordset
Dim char As String
Dim i As Integer
Dim NEW_AREAlookup As String
i = 3
Do While i < 8
On Error GoTo FindArea_Err
char = Left(Replace([PCD], " ", ""), i)
Set rs = CurrentDb.OpenRecordset("SELECT plu." & NEW_AREAlookup & " FROM PCode_LU plu " & _
"WHERE plu.CharCount = " & i & " " & _
"AND plu.PartPCode = '" & char & "'", dbOpenDynaset)
If rs.RecordCount > 0 Then
FindArea = rs.Fields(NEW_AREAlookup)
GoTo FindArea_Exit
Else
If i = 7 Then
FindArea = "No Area / incorrect postcode"
GoTo FindArea_Exit
End If
i = i + 1
Set rs = Nothing
End If
Loop
FindArea_Err:
If Err.Number = 3052 Then
Set rs = Nothing
Resume Next
End If
FindArea_Exit:
Set rs = Nothing
Exit Function
End Function