我对vba有非常基本的了解,并且对某些执行常规任务的代码感到非常困惑。我敢肯定,当有人看着它的时候,他们要么会看到我把它弄得一团糟,要么会遗漏很明显的东西(或某些东西)。
我有一个邮政编码查找表,这些邮政编码根据组织的内部分组分配给一个区域。有时,外部客户提交的邮政编码与上述“邮政编码查询”不“匹配”。我通过了一些旧代码,这些代码假定“区域”基于类似的已知邮政编码。原始代码无效,而我的更新代码仍然无效。
从理论上讲,代码采用邮政编码字段,除去空格,然后采用前3个字符,并将其与第二个查找匹配以分配“区域”;如果不匹配,它将再次循环遍历代码,但是这次将使用前4个字符,依此类推,直到使用7个字符,这时它将分配“错误的邮政编码”区域。
已经建立了上面提到的第二个查询,因此所有已知的邮政编码都减少为前3个字符。与一个区域匹配的所有字符都保留为3个字符,所有其他区域均修改为4个字符;所有与一个Area匹配的所有字符都保留为4个字符,那些没有被修改为5个字符的字符依此类推,直到所有邮政编码3至7个字符都具有1个Area。
我已经更新了字段和表名(因为某些字段不再存在)
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