Makra VBA na zlecenie w Excelu i Wordzie: nowe i naprawiane
W wielu firmach jeden skoroszyt z makrami trzyma ważny proces: raport, ofertę albo rozliczenie. Piszę nowe makra, naprawiam te, które przestały działać, i mówię wprost, kiedy lepiej przejść na coś innego.
Autor: Szymon Łakomy. Aktualizacja:
Kiedy makro VBA jest dobrym wyborem
- Raport z kilku arkuszy lub plików. Makro zbiera dane z zakładek albo skoroszytów od oddziałów, ujednolica je i tworzy zestawienie z wykresem po jednym kliknięciu.
- Dokumenty z danych. Oferty, umowy, protokoły i zaświadczenia generowane w Wordzie z wiersza w Excelu, z warunkami, których nie obsłuży zwykła korespondencja seryjna, i zapisem do PDF.
- Porządkowanie danych. Usuwanie pustych wierszy, rozdzielanie kolumn, poprawianie formatów dat i kodów przed importem do programu.
- Formularz do wprowadzania danych. Okno z polami i walidacją, żeby zespół nie wpisywał danych w przypadkowe komórki.
- Eksport do innego programu. Zapis danych w pliku CSV lub XML w formacie, którego oczekuje program księgowy albo magazynowy.
Wspólny mianownik: praca dzieje się w jednym pliku, na komputerze z Windows i desktopowym Office, a z plikiem pracuje jedna osoba naraz.
Makro przestało działać: najczęstsze przyczyny
| Objaw | Częsta przyczyna | Co robię |
|---|---|---|
| czerwony pasek z informacją, że Microsoft zablokował makra | plik pobrany z internetu lub z poczty ma oznaczenie niezaufanego źródła | odblokowanie we Właściwościach pliku albo zaufana lokalizacja w Centrum zaufania, a przy wielu osobach podpis makra |
| błąd przy wywołaniu funkcji systemowych po wymianie komputera | przejście na 64-bitowy Office i stare deklaracje bez PtrSafe | poprawiam deklaracje i sprawdzam typy zmiennych |
| makro liczy złe wartości albo kończy się błędem indeksu | ktoś dodał kolumnę albo zmienił nazwę arkusza, a kod odwołuje się do stałych adresów | przechodzę na tabele i nazwane zakresy, dodaję sprawdzenie układu pliku |
| błąd kompilacji zaraz po otwarciu | brakujące odwołanie do biblioteki na innym komputerze | usuwam zbędne odwołania albo zamieniam je na późne wiązanie |
| makro nie działa w przeglądarce ani w Teams | Excel w przeglądarce nie uruchamia VBA | praca w aplikacji desktopowej albo przeniesienie logiki do innego narzędzia |
Część przyczyn to zmiany w samym Office, a nie błąd autora. Blokada makr z plików z internetu jest ustawieniem bezpieczeństwa i nie radzę jej wyłączać dla całej firmy.
Ograniczenia, o których mówię przed zleceniem
Jeden użytkownik naraz
Skoroszyt z makrami źle znosi równoczesną pracę kilku osób. Gdy plik krąży mailem w wersjach, łatwo o dwa różne stany danych.
Brak historii zmian
Kod żyje w pliku. Bez dodatkowej dyscypliny nie wiadomo, kto, kiedy i dlaczego coś zmienił, a kopia „raport_v7_ostateczny” nie zastąpi historii.
Bezpieczeństwo
Makra bywają drogą ataku, więc firmy słusznie je blokują. Każde makro z zewnątrz trzeba odblokować świadomie, a hasło na projekt VBA chroni słabo.
Zależność od Office na komputerze
Makra nie zadziałają w przeglądarce ani na telefonie, a na Macu część funkcji wymaga zmian.
Te ograniczenia nie przekreślają VBA. Oznaczają tylko, że makro to dobre narzędzie dla jednej osoby i jednego pliku, ale słaby fundament procesu całej firmy.
Jak wygląda zlecenie
- Przesyłasz plik z przykładowymi danymi, najlepiej zmienionymi tak, żeby nie było w nich danych klientów, i opis, co ma się dziać po kliknięciu.
- Oglądam plik i istniejący kod, ustalam zakres i podaję cenę. Proste makro albo naprawa zaczyna się od około 500 zł netto.
- Piszę lub poprawiam kod z komentarzami, obsługą błędów zamiast okna debugera i odwołaniami do tabel zamiast stałych adresów.
- Testujesz na kopii pliku i na swoich danych. Poprawki po testach są częścią zlecenia.
- Oddaję plik, krótką instrukcję i eksport modułów do osobnych plików, żeby kolejna zmiana miała punkt odniesienia.
Większe narzędzia, z kilkoma plikami, formularzami i wymianą danych z innymi programami, wyceniam po rozmowie. Kwoty prostych i złożonych automatyzacji są na stronie ile kosztuje automatyzacja procesów.
Kiedy wyjść poza VBA
| Sytuacja | Co proponuję zamiast makra |
|---|---|
| kilka osób pracuje na tych samych danych jednocześnie | aplikację webową z bazą danych, opisaną w tekście z Excela do aplikacji webowej |
| co tydzień trzeba przetworzyć dziesiątki plików bez otwierania Excela | skrypt w Pythonie uruchamiany według harmonogramu, opisany na stronie automatyzacja w Pythonie |
| dane mają płynąć ze sklepu, poczty lub programu do faktur | przepływ w n8n, opisany w tekście co to jest n8n |
| firma pracuje w Microsoft 365 w chmurze i potrzebuje zatwierdzeń w Teams | Power Automate albo n8n, porównane na stronie Power Automate czy n8n |
| skoroszyt z makrami stał się głównym systemem firmy | plan przeniesienia, o którym piszę w tekście modernizacja starego systemu firmowego |
Czasem rozsądny jest etap pośredni: naprawiam makro, żeby proces działał od jutra, a równolegle spisujemy jego reguły pod przyszłą aplikację.
Najczęstsze pytania
Czy poprawisz makro napisane przez kogoś innego?
Tak, to częste zlecenie. Najpierw czytam kod i sprawdzam, co naprawdę robi, bo opis od użytkownika bywa niepełny. Jeśli kod jest w złym stanie, mówię, czy taniej będzie go poprawić, czy napisać od nowa.
Czy makro zadziała na Macu?
Częściowo. Podstawowe operacje na arkuszach działają, ale ścieżki do plików, okna dialogowe i wywołania funkcji Windows wymagają zmian. Jeśli makro ma działać na obu systemach, testuję je na obu przed oddaniem.
Czy mogę zabezpieczyć kod makra hasłem?
Można ustawić hasło na projekt VBA, ale to słaba ochrona, którą da się obejść. Traktuję je jako zabezpieczenie przed przypadkową zmianą, a nie przed kimś, kto celowo chce zobaczyć kod.
Czy przepiszesz makro na Pythona albo aplikację?
Tak, jeśli makro przerosło plik. Zaczynam od spisania reguł z istniejącego kodu, bo to on jest najdokładniejszym opisem procesu, a potem proponuję docelowe narzędzie z wyceną.
Powiązane strony
Masz makro, które przestało działać?
Wyślij opis problemu i, jeśli możesz, plik bez danych klientów. Odpowiem, co jest do zrobienia i ile to kosztuje.