Rozwiązanie podał Grzegorz Danowski (grzegorz.danowski@bankmillennium.pl), oto ono:
Option Compare Database Option Explicit Public Function TylkoZnakiAlfa(strWe As String) As String Dim i As Byte, strWy As String, strL As String * 1 TylkoZnakiAlfa = strWe For i = 1 To Len(strWe) strL = Mid(strWe, i, 1) If Asc(strL) >= 48 And Asc(strL) <= 57 Then strWy = strWy & strL End If Next i TylkoZnakiAlfa = strWy End Function Public Function LiczMod(ByVal strLiczba As String, bytDzielnik As Byte) As Byte If Len(strLiczba) < 10 Then LiczMod = CLng(strLiczba) Mod bytDzielnik Else LiczMod = LiczMod(LiczMod(Left(strLiczba, 9), bytDzielnik) & _ Mid(strLiczba, 10), bytDzielnik) End If End Function Public Function CzyNumerNrb(strWe As String) As Boolean Dim strObr As String, bytR As Byte'wyrzucenie wszystkich znaków poza cyframistrObr = TylkoZnakiAlfa(strWe)'dodanie kodu kraju PL=2521 'obrócenie cyfr kontrolnych na koniecstrObr = Mid(strObr, 3) & "2521" & Left(strObr, 2)'wyliczenie reszty z dzielenia przez 97bytR = LiczMod(strObr, 97) If bytR = 1 Then CzyNumerNrb = True Else Debug.Print "Nieprawidłowy NRB:", strObr, bytR CzyNumerNrb = False End If End Function