Jak debugować niedziałające makro Excel VBA. W Excel VBA są niesamowite narzędzia, które pozwalają zobaczyć bieżącą wartość przechowywaną w zmiennych podczas przechodzenia przez kod po jednej linii na raz. Jeśli masz niedziałające makro,
Obejrzyj wideo
- Masz niedziałające makro programu Excel VBA
- VBA ma niesamowite narzędzia do debugowania
- Zamiast uruchamiać kod, możesz przejść przez kod za pomocą klawisza F8
- Linia na żółto to linia, którą ma zostać uruchomiona
- Najedź na dowolną zmienną, aby zobaczyć wartość tej zmiennej.
- Przełączaj się tam iz powrotem do programu Excel, aby zobaczyć, co się dzieje
Transkrypcja wideo
Naucz się programu Excel z podcastu, odcinek 2096: Debugowanie makra VBA
Hej, witaj z powrotem w netcastie, jestem Bill Jelen. Dzisiejsze pytanie: Ktoś miał kod, który umieściłem na starym filmie na YouTube i opublikował komentarz mówiący: „Ach, to nie działa. Nie zapisuje zduplikowanej faktury, ale nie generuje błędu. ” Nie wiem, co jest nie tak z kodem. W porządku, więc wiesz, spójrz, są świetne narzędzia, które są dostępne, gdy jesteś w VBA. Makro nie działa. Mamy tutaj przycisk, który ma uruchamiać kod. Mam zamiar przypisać makro, nazywa się SaveInvoice. Kliknę Edytuj i skończymy w VBA. Zwykle po naciśnięciu tego przycisku po prostu uruchomi się ten kod. BAM! Jakby to wszystko stało się naprawdę szybko, ale nie możesz patrzeć, co się dzieje.
Więc w narzędziach debugowania jedną z moich ulubionych rzeczy jest Debug Step Into, w którym zobaczysz klawisz skrótu F8, który pozwala nam uruchamiać kod po jednym wierszu na raz. Więc nacisnąłem tam F8 i to jest - linia na żółto to linia, którą ma wykonać. Więc jeśli naciskam F8, przeskakuje te dwie deklaracje i teraz mamy zamiar wykonać ActiveSheet.Copy. Więc to, co jest naprawdę piękne, to wiesz, zwłaszcza jeśli masz duży monitor, okno Podcastu jest o wiele za małe, ale możesz zobaczyć, jak działa makro. A więc teraz chodzi o wykonanie ActiveSheet.Copy. W tej chwili jestem w skoroszycie o nazwie Podcast 2096. Oto arkusz roboczy o nazwie Faktura i kiedy naciskam F8, zobaczysz, że jestem teraz w zupełnie nowym skoroszycie o nazwie Book2 i mamy tylko fakturę, w porządku.
A teraz mamy zamiar przypisać tę wielką, długą rzecz do Nowego FN. Naciśnij klawisz F8. W porządku, nie wyglądało na to, żeby coś się tutaj wydarzyło, bo tutaj nic się nie wydarzyło. Ale oto piękna rzecz, przypisałem teraz coś do tej zmiennej o nazwie Nowy FN i jeśli wezmę mysz i najedziesz kursorem na Nowy FN, pojawi się mała podpowiedź, która pokazuje mi, co jest zapisane w Nowym FN. Więc zapisuje nazwę pliku, jest folder, do którego ma się udać. Nazywa się Invoice1234, ponieważ pobrał wartość z F4, a następnie dodał PDF.
W porządku, jedną z najbardziej frustrujących rzeczy w programie Excel jest to, że jeśli zaczyna brakować pamięci, ta wskazówka narzędzia nie chce się pojawiać. Znajdziesz się tam i nic się nie stanie. Czasami musisz kliknąć, aby to zrobić tutaj, a czasami po prostu w ogóle się nie pojawi. Kiedy w ogóle się nie pojawi, możemy zrobić Ctrl + G. Ctrl + G to bezpośrednie okno, a następnie użyjemy? który jest skrótem do Debug.Print, NewFN. Innymi słowy, powiedz mi, co jest w nowym FN, a pokaże ci, co jest w nowym FN.
W porządku, więc teraz mamy zamiar uruchomić ten wiersz kodu, który utworzy plik PDF. W porządku, więc nacisnę F8. W porządku, w tym momencie powinniśmy mieć nowy plik PDF z 1234 i jeśli przejdę do folderu, z pewnością utworzono wystarczającą liczbę Inv1234 z 11 maja o 6:25. Świetnie, prawda?
W porządku, teraz dochodzimy do punktu, w którym mamy problem. W porządku, więc naciskamy tutaj F8 i pojawia się jako Duplikat kopii. W porządku, to zadziałało. A potem F8 i możemy zobaczyć, co jest w nowym FN. W porządku, więc ma DupInv1234.pdf i możesz nawet wrócić tutaj i po prostu kliknąć po Print NewFN, a zobaczysz, że zmieniliśmy nazwę pliku, w porządku. Więc wszystko w porządku. Następnie naciskamy F8, aby uruchomić Tworzenie pliku PDF. Niesamowite! Wszystko wygląda świetnie, prawda?
Wróć więc do naszych plików podcastów. W porządku, ale zamiast czegoś, co nazywa się DupInv1234, po prostu nie wiem, jak to się nazywa Book2. W porządku, został utworzony minutę temu. To musi być jedyne, ale ojej! Wygląda na to, że to zła nazwa. W porządku, więc wracamy do VBA i wiem, że właśnie w ten sposób przypisałem odpowiednią wartość nowemu FN, w porządku. Zobaczmy, jak to oszczędzamy. Zapisujemy go jako nowy FN1, który jest pusty; a ponieważ jest pusty, oznacza to, że przyjmuje nazwę pliku, która w tym przypadku jest Book2, ponieważ utworzyłem jego kopię. I zmieniłem to - Och, spójrz! Więc tutaj przypisałem nazwę do NewFN, a następnie zapisałem ten NewFN1, a teraz, ponieważ debuguję i unoszę kursor - najechanie jest najwspanialszą rzeczą w historii. Mam nadzieję, że będę w stanie dowiedzieć się, co się dzieje.Więc wracam i zmieniam NewFN1. Oto niesamowita rzecz. W porządku, więc już przekroczyłem tę linię w Macro, ale mogę przeciągnąć to z powrotem i powiedzieć, w porządku, uruchommy to ponownie F8. A teraz stwórzmy plik PDF. W porządku, pojawia się z właściwą nazwą i wszystko jest w porządku.
W porządku, teraz, kiedy wiem, że skończyłem, wszystko jest świetnie. Stąd wszystko będzie działać. Po prostu klikam przycisk Uruchom i będzie działać do końca kodu. W porządku, czasami będziesz mieć długie makro z, no wiesz, setkami linii kodu, które działają, a następnie jedną określoną część, która nie działa, dobrze? Dlatego właśnie wspomniano tutaj o kilku innych narzędziach. Jeśli chcesz przeskoczyć przez całą masę kodu i uruchomić wszystko do tego momentu, cóż, jednym ze sposobów jest kliknięcie tutaj i utworzenie punktu przerwania. W porządku, więc teraz, kiedy to uruchomię, wszystko doprowadzi do tego punktu. Mogę po prostu kliknąć Uruchom i zatrzyma się, lub jeśli nawet nie chcesz ustawić punktu przerwania, po prostu kliknij tutaj i powiemy Debuguj, Uruchom do kursora. Uruchom do kursora.Teraz wiem, że spowoduje to tutaj problem bo kod do zmiany tego numeru faktury jeszcze się nie podłączyłem. Więc po prostu wstawię nowy numer faktury i jestem teraz w tej linii. Debuguj, uruchom do kursora, czyli Ctrl + F8. W porządku, więc teraz wszystko doprowadziło do tego punktu i powinniśmy być w stanie zobaczyć, że właśnie utworzył Inv1235, w porządku. A teraz chodzi o … jesteśmy w tej linii kodu. Mogę po prostu nacisnąć klawisz F8, aby uruchomić jedną linię, lub po prostu uruchomić resztę. I jest nasz DupInv1235, dobrze? Tak więc narzędzia do debugowania w VBA są niesamowite. Uruchommy kod po jednej linii na raz, ułóżmy ekran tak, abyśmy mogli zobaczyć zarówno działający kod, jak i jego wyniki po lewej stronie. I wiesz, miejmy nadzieję, że możesz dowiedzieć się, co jest nie tak z kodem.
W porządku, więc podsumuj odcinek: Miej makro Excel VBA, które nie działa. Ma niesamowite narzędzia do debugowania. Zamiast uruchamiać kod, możesz przejść przez kod za pomocą klawisza F8. Linia zaznaczona na żółto to linia, która ma zostać uruchomiona. Możesz najechać kursorem na zmienną, aby zobaczyć wartość tej zmiennej, przełączać się tam iz powrotem do programu Excel, aby zobaczyć, co się dzieje.
Cóż, hej, chcę ci podziękować, że wpadłeś. Do zobaczenia następnym razem z kolejnym netcastem od.
Pobieranie pliku
Pobierz przykładowy plik tutaj: Podcast2096.xlsm