Run time error - klasa niezarejestrowana

Run time error - klasa niezarejestrowana
MM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Witam,
Korzystam z weryfikatora NIPów który daje informację o statusie ale bez ID zapytania.
Przydałoby się mieć takie ID więc spróbowałem użyć poniższe makro.
Na jednym zmoich PC makro działa.
Niestety na PC na którym będzie ono docelowo używane makro pokazuje błąd.

Pominąłem linie która w przypadku nieokreślonego błędu kończy makro i dostałem info o błedzie (w załączniku więcej informacji) .

Prawdopodobnie na docelowym PC mam nowszą wersję excela.
Może ktoś już się z tym zmierzył? Da sie to jakoś ominąć w przypadku braku innego rozwiązania.run time error.jpg

Pozdrawiam

Kopiuj
Sub test()
    Dim sArr             As Variant
    Dim el               As Variant

    sArr = Array("name", "nip", "statusVat", "regon", "pesel", "krs", "residenceAddress", "workingAddress", "representatives", "authorizedClerks", "partners", "registrationLegalDate", "registrationDenialBasis", "registrationDenialDate", "restorationBasis", "restorationDate", "removalBasis", "removalDate", "accountNumbers", "hasVirtualAccounts", "requestId")

    For Each el In sArr
        Debug.Print Podatnik_Info("7740001454", CStr(el))
    Next el

End Sub

Function Podatnik_Info(sNIP As String, sData As String) As String
'Parametry dla sData: name, nip, statusVat, regon, pesel, krs, residenceAddress, workingAddress, representatives, authorizedClerks, partners, registrationLegalDate, registrationDenialBasis, registrationDenialDate, restorationBasis, restorationDate, removalBasis, removalDate, accountNumbers, hasVirtualAccounts, requestId

    Dim ScriptControl    As Object
    Dim oHttpReq         As Object
    Dim Json             As Object
    Dim Resp             As String
    Dim sUrl             As String

   On Error GoTo Podatnik_Info_Error

    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\D"
        sNIP = .Replace(sNIP, "")
    End With

    Set ScriptControl = CreateObject("MSScriptControl.ScriptControl")
    ScriptControl.Language = "JScript"

    sUrl = "https://wl-api.mf.gov.pl/api/search/nip/" & sNIP & "?date=" & Format(Now, "yyyy-mm-dd")
    Set oHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

    With oHttpReq
        .Open "Get", sUrl, False
        .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64"
        .SetRequestHeader "Accept", "application/json"
        .Send
        .WaitForResponse
        Resp = .ResponseText
    End With

    Resp = VBA.Replace(Resp, "subject", "Subject")
    Resp = VBA.Replace(Resp, "name", "Name")
    Resp = VBA.Replace(Resp, "nip", "NIP")

    Set Json = ScriptControl.Eval("(" + Resp + ")")

    Select Case oHttpReq.Status
    Case 400
        Select Case Json.code
        Case "WL-100": Podatnik_Info = "Wystąpił nieoczekiwany błąd serwera."
        Case "WL-101": Podatnik_Info = "Pole 'data' nie może być puste."
        Case "WL-102": Podatnik_Info = "Pole 'data' ma nieprawidłowy format."
        Case "WL-103": Podatnik_Info = "Data nie może być datą przyszłą."
        Case "WL-104": Podatnik_Info = "Pole 'REGON' nie może być puste."
        Case "WL-105": Podatnik_Info = "Pole 'REGON' ma nieprawidłową długość. Wymagane 9 lub 14 znaków."
        Case "WL-106": Podatnik_Info = "Pole 'REGON' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-107": Podatnik_Info = "Nieprawidłowy REGON."
        Case "WL-108": Podatnik_Info = "Pole 'numer konta' nie może być puste."
        Case "WL-109": Podatnik_Info = "Pole 'numer konta' ma nieprawidłową długość. Wymagane 26 znaków."
        Case "WL-110": Podatnik_Info = "Pole 'numer konta' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-111": Podatnik_Info = "Nieprawidłowy numer konta bankowego."
        Case "WL-112": Podatnik_Info = "Pole 'NIP' nie może być puste."
        Case "WL-113": Podatnik_Info = "Pole 'NIP' ma nieprawidłową długość. Wymagane 10 znaków."
        Case "WL-114": Podatnik_Info = "Pole 'NIP' zawiera niedozwolone znaki. Wymagane tylko cyfry."
        Case "WL-115": Podatnik_Info = "Nieprawidłowy NIP."
        Case "WL-116": Podatnik_Info = "Pole 'nazwa pomiotu' nie może być puste."
        Case "WL-117": Podatnik_Info = "Pole 'nazwa pomiotu' za krótkie. Wymagane przynajmniej 5 znaków."
        Case "WL-118": Podatnik_Info = "Data sprzed zakresu rejestru."
        Case "WL-190": Podatnik_Info = "Niepoprawne żądanie."
        Case "WL-195": Podatnik_Info = "Zaktualizowaliśmy bazę danych. Wykonaj ponownie zapytanie, aby otrzymać aktualne dane."
        Case "WL-196": Podatnik_Info = "Trwa aktualizacja bazy danych. Spróbuj ponownie później."
        Case Else: Podatnik_Info = "Nieznany błąd"
        End Select
        Exit Function

    Case 200
        If IsNull(Json.result.Subject) Then
            Podatnik_Info = "Podmiot nie istnieje."
            Exit Function
        End If

        If UCase(sData) = "REQUESTID" Then
            Podatnik_Info = Json.result.requestId
            Exit Function
        End If

        With Json.result.Subject
            Select Case VBA.UCase$(sData)
            Case "NAME": If IsNull(.Name) Then Podatnik_Info = "Null" Else Podatnik_Info = .Name
            Case "NIP": If IsNull(.NIP) Then Podatnik_Info = "Null" Else Podatnik_Info = .NIP
            Case "STATUSVAT": If IsNull(.statusVat) Then Podatnik_Info = "Null" Else Podatnik_Info = .statusVat
            Case "REGON": If IsNull(.regon) Then Podatnik_Info = "Null" Else Podatnik_Info = .regon
            Case "PESEL": If IsNull(.pesel) Then Podatnik_Info = "Null" Else Podatnik_Info = .pesel
            Case "KRS": If IsNull(.krs) Then Podatnik_Info = "Null" Else Podatnik_Info = .krs
            Case "RESIDENCEADDRESS": If IsNull(.residenceAddress) Then Podatnik_Info = "Null" Else Podatnik_Info = .residenceAddress
            Case "WORKINGADDRESS": If IsNull(.workingAddress) Then Podatnik_Info = "Null" Else Podatnik_Info = .workingAddress
            Case "REPRESENTATIVES": If IsNull(.representatives) Then Podatnik_Info = "Null" Else Podatnik_Info = .representatives
            Case "AUTHORIZEDCLERKS": If IsNull(.authorizedClerks) Then Podatnik_Info = "Null" Else Podatnik_Info = .authorizedClerks
            Case "PARTNERS": If IsNull(.partners) Then Podatnik_Info = "Null" Else Podatnik_Info = .partners
            Case "REGISTRATIONLEGALDATE": If IsNull(.registrationLegalDate) Then Podatnik_Info = "Null" Else Podatnik_Info = .registrationLegalDate
            Case "REGISTRATIONDENIALBASIS": If IsNull(.registrationDenialBasis) Then Podatnik_Info = "Null" Else Podatnik_Info = .registrationDenialBasis
            Case "REGISTRATIONDENIALDATE": If IsNull(.registrationDenialDate) Then Podatnik_Info = "Null" Else Podatnik_Info = .registrationDenialDate
            Case "RESTORATIONBASIS": If IsNull(.restorationBasis) Then Podatnik_Info = "Null" Else Podatnik_Info = .restorationBasis
            Case "RESTORATIONDATE": If IsNull(.restorationDate) Then Podatnik_Info = "Null" Else Podatnik_Info = .restorationDate
            Case "REMOVALBASIS": If IsNull(.removalBasis) Then Podatnik_Info = "Null" Else Podatnik_Info = .removalBasis
            Case "REMOVALDATE": If IsNull(.removalDate) Then Podatnik_Info = "Null" Else Podatnik_Info = .removalDate
            Case "ACCOUNTNUMBERS": If IsNull(.accountNumbers) Then Podatnik_Info = "Null" Else Podatnik_Info = "'" & .accountNumbers
            Case "HASVIRTUALACCOUNTS": If IsNull(.hasVirtualAccounts) Then Podatnik_Info = "Null" Else Podatnik_Info = .hasVirtualAccounts
            Case "REQUESTID": If IsNull(.requestId) Then Podatnik_Info = "Null" Else Podatnik_Info = .requestId
            End Select
        End With
        Case Else: Podatnik_Info = "Błąd nr " & oHttpReq.Status & " " & oHttpReq.StatusText
    End Select
   
    If VBA.Len(Podatnik_Info) = 0 Then Podatnik_Info = "Null"
    Set oHttpReq = Nothing

   On Error GoTo 0
   Exit Function

Podatnik_Info_Error:

    Podatnik_Info = "Nieznany błąd."

End Function
Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2263
1

A nie odkopałeś jakiegoś zabytkowego kodu ?
Bo pierwsze wyniki z google podpowiadają watki na forach mające po 20 lat

hzmzp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 755
0

Zainstaluj .NET Framework i Microsoft Visual C++ Redistributable najlepiej w takiej samej wersji.

MM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0
Marius.Maximus napisał(a):

A nie odkopałeś jakiegoś zabytkowego kodu ?
Bo pierwsze wyniki z google podpowiadają watki na forach mające po 20 lat

Generalnie temat weryfikacji polskich nipów ma okołó 5 lat jeśli dobrze pamiętam.
Proszę nie mylić z NIPami UE bo to podobny temat.

hzmzp napisał(a):

Zainstaluj .NET Framework i Microsoft Visual C++ Redistributable najlepiej w takiej samej wersji.

Dzięki za sugestię
PC jest służbowe i nie jestem pewien czy taki dodatek będzie mile widziany.
Możesz opisać gdzie leży problem i w jaki sposób te dodatki go rozwiążą?

Jedna z sugestii jaką mam wskazuje na problem z 64bitową wersją offica. Co o tym myślicie?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.