Migracja z VBA
Migracja VBA do Pythona dla miesięcznego raportowania
Problem
Kluczowe makro raportowe w VBA — nieudokumentowane, zbudowane przez pracownika, który odszedł. Regularnie się psuło.
Rozwiązanie
Odtworzenie logiki, przebudowa w Pythonie z dokumentacją, kontrolą wersji i testami jednostkowymi.
Wynik
Czas utrzymania miesięcznego zredukowany o 6 godzin. Proces odporny na awarie i gotowy do przekazania.
Sytuacja wyjściowa
Makro zostało napisane cztery lata wcześniej przez analityka finansowego, który od tamtej pory zmienił pracę. Uruchamiało się co miesiąc, żeby wygenerować pack raportów zarządczych — pobierało dane z trzech plików źródłowych, stosowało szereg transformacji i produkowało sformatowany raport Excel.
Nikt nie rozumiał w pełni jak działało. Działało, dopóki nie przestawało. Co dwa, trzy miesiące coś się psuło — format pliku źródłowego się zmieniał, arkusz zmieniał nazwę, albo Excel aktualizował się i jakaś przestarzała funkcja VBA przestawała działać. Każdy incydent kosztował zespół popołudnie debugowania, często dzień przed terminem raportu.
Co zrobiłem
Krok 1 — Zrozumieć co faktycznie robi
Przeszedłem przez kod VBA i udokumentowałem każdy krok: jakie dane wczytuje, jakie transformacje stosuje, jak wygląda wynik. Zajęło to dłużej niż się spodziewałem — makro rozrosło się przez lata jednolinijkowych poprawek, bez logicznej struktury i z hojnym użyciem On Error Resume Next.
Krok 2 — Napisać odpowiednik w Pythonie
Przebudowa używała pandas do manipulacji danymi i openpyxl do generowania Excela. Każda transformacja stała się nazwaną funkcją z jasnym kontraktem wejście/wyjście. Tam, gdzie VBA robił coś nieoczywistego, dodałem komentarze wyjaśniające logikę biznesową.
Krok 3 — Testowanie przed zastąpieniem
Przez dwa miesiące uruchamiałem obie wersje równolegle, porównując wyniki komórka po komórce. Znalazłem trzy rozbieżności — w dwóch przypadkach wersja Python była poprawna, a VBA miał długo nieodkryty błąd. W jednym przypadku źle odczytałem logikę VBA i musiałem poprawić Pythona.
Krok 4 — Pakiet przekazania
Finalne dostarczenie obejmowało: skrypt Python, README z instrukcją konfiguracji i opisem każdej transformacji, CHANGELOG dla przyszłych modyfikacji oraz zestaw testów weryfikujących kluczowe wartości wynikowe przy każdym uruchomieniu.
Wnioski
- Dziedziczne VBA jest często czarną skrzynką z nieodkrytymi błędami — dokumentuj przed migracją, nie po
- Równoległe uruchomienie nie jest opcjonalne jeśli proces jest krytyczny biznesowo
- Wartość migracji to nie tylko nowy kod — to dokumentacja, której wcześniej nie było
Porozmawiajmy.
Chcesz oddać proces, podzlecić wdrożenie albo po prostu umówić bezpłatny audyt? Napisz, co zżera czas Twojego zespołu — pierwsza 30-minutowa rozmowa jest bezpłatna.