Błąd Overflow, czyli przepełnienie bufora, to błąd, który w VBA pojawia się dosyć rzadko. Zazwyczaj dotyczy sytuacji, gdy zadeklarowaliśmy zmienną jako Integer i przypisaliśmy do niej zbyt dużą liczbę – np. 100 000. Kilka dni temu, ten błąd wyświetlił mi się nieoczekiwanie na samym początku makra.
Makro przestało działać…
Niedawno przydarzyła mi się w pracy bardzo dziwna sytuacja. Okazało się, że jedno z makr nagle zaczęło wyrzucać błąd… Numer błędu 6 (Overflow) czyli tzw. przepełnienie bufora. Sęk w tym, że działało ono rewelacyjnie przez 2,5-roku!
Sytuacja była dla mnie o tyle dziwna, że błąd pojawił się prawie na samym początku kodu. Linia, dotyczyła zaczytania sporej ilości danych z zakresu komórek do tablicy.
Nie bardzo potrafiłem zrozumieć skąd wziął się ten błąd Overflow. Moją pierwszą myślą było to, że zwiększył się zakres komórek, który chciałem przenieść do tablicy. Z drugiej strony wydawało mi się to jednak trochę irracjonalne, że zwiększenie zakresu do 54 000 komórek (600 wierszy przy stałej liczbie 90- kolumn) może powodować problem.
Do tablicy wirtualnej możemy przypisywać znacznie większe zakresy. Nawet takie, które składają się z 6 000 wierszy i 90 kolumn (w sumie 540 000 komórek), co potwierdziło się w testach gdzie zaczytałem zupełnie inne dane.
Ogromne liczby w jednej z kolumn
Skopiowałem tabelę źródłową do osobnego arkusza i usunąłem formatowanie. Problem dalej się pojawiał. Od razu jednak rzuciły mi się w oczy dziwne wartości w jednej z kolumn.
Tam gdzie spodziewałem się cyfr od 1 do 4 pojawiły się ogromne liczby, których Excel nie potrafił poprawnie wyświetlić w całości. Były to kody kreskowe składające się z kilkunastu cyfr. Excel uciął im poprzedzające zera.
Jak się później okazało, wystąpił błąd w raporcie źródłowym i został on niejako powielony w narzędziu. Excel nie mógł zaczytać tych wielkich liczb do tablicy, dlatego wyświetlił błąd Overflow podczas próby ich przeniesienia.