Thread View: pl.comp.bazy-danych.msaccess
2 messages
2 total messages
Started by Prot
Fri, 09 Oct 2015 18:09
Funkcja z regexp przy 500 wywołaniu sypie błędem 2042
Author: Prot
Date: Fri, 09 Oct 2015 18:09
Date: Fri, 09 Oct 2015 18:09
55 lines
2815 bytes
2815 bytes
Witam!
Pracuje nad parserem danych z formatu MT940 (sformalizowany format importu
wyciągów bankowych) do accessa. Z mojej analizy wynika, że można go zrobić w
VBA z wykorzystaniem właściwości tzw. submatches. Wykorzystać planuje
funkcję:
Function GetItem(ByVal STR As String, Wzorzec As String, iNum As Long)
Dim objRegExp As Object
Set objRegExp = CreateObject("vbscript.regexp")
On Error GoTo GetItem_Error
With objRegExp
.Global = True
.Pattern = Wzorzec
GetItem = .Execute(STR)(iNum).SubMatches(0)
End With
GetItem_Exit:
On Error GoTo 0
Set objRegExp = Nothing
Exit Function
GetItem_Error:
GetItem = CVErr(xlErrNA)
Resume GetItem_Exit
End Function
W testowym pliku tekstowym mam ponad 400 linii danych, obejmujących 28
rekordów tablicy z wyciągiem bankowym.
Dziwny problem powstał przy testowaniu w VBE 2007 działania tej funkcji: w
kodzie testowym wywołuje tą funkcję (oczywiście w pętli) z 500 razy i
wyłuskuje mi wszystkie potrzebne stringi i nagle przy 27 rekordzie danych
wywala run time error 13, a w debugerze błąd 2042 - (brak danych ???).
Błąd ten występuje w momencie analizy (kolejnego 26-stego stringu) 26
cyfrowego numeru konta bankowego i koniec.
Mam pytanie zatem dla znawców tematu czym może być spowodowany ten błąd ?
Czy są w VBA jakieś ograniczenia wielokrotności wywoływania funkcji własnych
? Czy każde wywołanie zajmuje "odrębne" miejsce w pamięci podręcznej i
trzeba ją cyklicznie czyścić ?
Z góry dziękuje za wszelkie sugestie i rozwiązania.
Prot
---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: Funkcja z regexp przy 500 wywołaniu sypie błędem 2042
Author: protmaster
Date: Sun, 11 Oct 2015 11:31
Date: Sun, 11 Oct 2015 11:31
8 lines
1983 bytes
1983 bytes
W dniu piątek, 9 października 2015 20:09:11 UTC+2 użytkownik Prot napisał: > > > Z góry dziękuje za wszelkie sugestie i rozwiązania. > Sprawa się wyjaśniła po analizie pliku MT940 jest w nim faktycznie 28 rekordów danych transakcji bankowych, ale ... tylko 26 z nich posiada linię z numerem kont! W dwóch rekordach - nie ma w ogóle takich linii - więc wywołania następnych submatches było oczywiście niemożliwe. Prot
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads