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 cyframi
strObr = TylkoZnakiAlfa(strWe)
'dodanie kodu kraju PL=2521
'obrócenie cyfr kontrolnych na koniec
strObr = Mid(strObr, 3) & "2521" & Left(strObr, 2)
'wyliczenie reszty z dzielenia przez 97
bytR = LiczMod(strObr, 97)
If bytR = 1 Then
CzyNumerNrb = True
Else
Debug.Print "Nieprawidłowy NRB:", strObr, bytR
CzyNumerNrb = False
End If
End Function