Dowiedz się, jak usuwać błędy w funkcjach niestandardowych w programie Excel

  • Udostępnij To
Michael Brown

Ponieważ wiesz już, jak tworzyć FROM-y (i, mam nadzieję, próbowałeś również zastosować je w swoim Excelu), wykopmy trochę głębiej i zobaczmy, co można zrobić w przypadku, gdy twoja funkcja zdefiniowana przez użytkownika nie działa.

Aby rozwiązać niektóre problemy podczas tworzenia funkcji niestandardowej, najprawdopodobniej będziesz musiał uruchomić debug. Wtedy możesz mieć pewność, że funkcja działa poprawnie.

Poznamy następujące techniki debugowania:

    Kiedy tworzysz funkcję niestandardową, zawsze istnieje możliwość, że popełnisz błąd. Funkcje niestandardowe są zwykle dość złożone. I nie zawsze od razu zaczynają działać poprawnie. Formuła może zwrócić nieprawidłowy wynik lub błąd #VALUE! W przeciwieństwie do standardowych funkcji Excela, nie zobaczysz żadnych innych komunikatów.

    Czy istnieje sposób, aby przejść przez funkcję niestandardową krok po kroku, aby sprawdzić, jak działa każde z jej stwierdzeń? Oczywiście! Debugowanie służy do tego.

    Zaproponuję ci kilka sposobów debugowania twojej niestandardowej funkcji, abyś mógł wybrać ten, który działa dla ciebie.

    Jako przykład, używamy funkcji niestandardowej GetMaxBetween z jednego z naszych poprzednich artykułów, który oblicza maksymalną liczbę w określonym zakresie wartości:

    Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Function

    Argumentami funkcji są zakresy komórek, w których zapisywane są liczby oraz górna i dolna granica wartości.

    Umieść funkcję MsgBox w ważnych miejscach

    W celu monitorowania wykonywania obliczeń można wyświetlać na ekranie w odpowiednich miejscach wartości najważniejszych zmiennych. Można to zrobić za pomocą wyskakujących okien dialogowych.

    MsgBox to okno dialogowe, którego można użyć do pokazania użytkownikowi jakiegoś komunikatu.

    Składnia MsgBox jest podobna do innych funkcji VBA:

    MsgBox(prompt [, buttons] [, title] [, helpfile, context])

    podpowiedź jest argumentem wymaganym. Zawiera komunikat, który zobaczysz w oknie dialogowym. Może być również użyty do wyświetlenia wartości poszczególnych zmiennych.

    Wszystkie pozostałe argumenty są opcjonalne.

    [ przyciski ] - określa, które przyciski i ikony są wyświetlane w MsgBox Na przykład, jeśli użyjemy opcji vbOkOnly , to tylko OK Nawet jeśli pominiesz ten argument, przycisk ten jest używany domyślnie.

    [ tytuł ] - tutaj można określić tytuł okna wiadomości.

    Przejdźmy od słów do praktyki i zacznijmy debugować. Aby wyświetlić komunikat, dodajemy do kodu następującą linię GetMaxBetween funkcja zdefiniowana przez użytkownika przed Sprawa Else operator:

    MsgBox vMax,, "Count -" & i

    Oto co otrzymamy w wyniku:

    Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax,,,Count -" & i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween =.WorksheetFunction.Max(arrNums) End Function

    Używanie vMax zmiennej w oknie dialogowym, zobaczymy, które liczby spełniają kryteria wyboru, dzięki czemu będziemy mogli wybrać największą z nich. Za pomocą wyrażenia "Count -" & I w pasku tytułowym wskazujemy, ile liczb już wybraliśmy, aby określić wartość maksymalną. Licznik będzie zwiększany z każdą nową wartością.

    Kiedy mamy już ustawiony nasz FROM, stosujemy poniższą formułę do zakresu dat:

    = GetMaxBetween (A1:A6,10,50)

    Po wciśnięciu przycisku Enter pojawi się komunikat jak na poniższym zrzucie ekranu:

    Jest to pierwsza liczba z zakresu A1: A6 spełniająca kryteria: większa niż 10, ale mniejsza niż 50.

    Po kliknięciu OK pojawia się drugi komunikat z liczbą 14. Pozostałe liczby nie spełniają kryteriów wyboru, dlatego funkcja kończy działanie i zwraca największą z dwóch wartości, 17.

    Na stronie MsgBox Funkcja może być użyta w najważniejszych miejscach Twojej funkcji niestandardowej, aby kontrolować jak zmieniają się wartości poszczególnych zmiennych. Skrzynki komunikatów mogą być bardzo przydatne, gdy masz dużą funkcję i dużo obliczeń. W takim przypadku łatwo będzie Ci określić, w której części kodu wystąpił błąd.

    Ustalić punkty zatrzymania i wykonać krok po kroku

    Możesz dodać punkty przerwania do kodu swojej funkcji, gdzie wykonanie kodu zostanie zatrzymane. Możesz więc śledzić proces obliczeniowy krok po kroku. W ten sposób możesz zobaczyć, jak zmieniają się wartości zmiennych.

    Aby dodać punkt przerwania, umieść kursor na linii zawierającej instrukcję, w której chcesz zrobić przerwę. Następnie kliknij prawym przyciskiem myszy i wybierz Debug -> Przełączanie punktu przerwania lub po prostu naciśnij F9 . Możesz również kliknąć w żądanym miejscu na pionowym szarym obszarze po lewej stronie kodu funkcji.

    Pojawi się czerwone koło, jak widać na poniższym zrzucie ekranu. Linia kodu, w której obliczenia zostaną zatrzymane, jest podświetlona na czerwono.

    Teraz okno edytora VBA będzie otwarte podczas działania funkcji. Kursor będzie ustawiony w miejscu, w którym się zatrzymałeś.

    Jeśli najedziesz kursorem myszy na dowolną zmienną w kodzie funkcji, zobaczysz jej aktualną wartość:

    Naciśnij F5, aby kontynuować obliczenia.

    Uwaga. Po wykonaniu punktu przerwania można rozpocząć śledzenie postępu obliczeń krok po kroku. Jeśli naciśniesz przycisk F8, zostanie wykonana tylko jedna, kolejna linia kodu VBA. Żółta linia ze strzałką również przesunie się do ostatnio wykonanej pozycji kodu.

    Ponieważ wykonanie funkcji jest ponownie wstrzymane, można za pomocą kursora myszy obejrzeć aktualne wartości wszystkich zmiennych funkcji.

    Kolejne naciśnięcie F8 spowoduje, że przejdziemy o jeden krok do przodu. Można więc naciskać F8 do końca obliczeń. Albo nacisnąć F5, aby kontynuować obliczenia do następnego punktu przerwania.

    Jeśli wystąpi błąd, kursor zostanie zatrzymany w punkcie kodu, w którym wystąpił błąd.A także zobaczysz wyskakujący komunikat o błędzie.Dzięki temu można łatwo określić przyczynę problemu.

    Punkty przerwania, które określisz, będą stosowane do momentu zamknięcia pliku. Kiedy ponownie go otworzysz, będziesz musiał ustawić je ponownie. Nie jest to najwygodniejsza metoda, nie sądzisz?

    Problem ten można jednak rozwiązać. wstawić a Przestań do kodu funkcji w odpowiednich miejscach i możesz zatrzymać wykonanie programu w taki sam sposób, jak przy użyciu punktów przerwania.

    Kiedy VBA napotyka na Przestań Sprawdź wartości zmiennych, a następnie naciśnij F5, aby kontynuować.

    Lub naciśnij F8, aby wypełnić funkcję krok po kroku, jak opisano powyżej.

    Na stronie Przestań Instrukcja jest częścią programu i dlatego nie jest usuwana, jak w przypadku punktu przerwania. Po zakończeniu debugowania usuń ją samodzielnie. Możesz też zamienić ją w komentarz, poprzedzając ją pojedynczym cudzysłowem (').

    Debugowanie przy użyciu operatora Debug.Print

    Możesz umieścić Debug.Print w kodzie funkcji we właściwym miejscu. Jest to przydatne do sprawdzania wartości zmiennych, które cyklicznie się zmieniają.

    Przykład działania Debug.Print można zobaczyć na poniższym zrzucie ekranu.

    Oświadczenie Debug.Print i, vMax wypisuje wartości i ich liczby porządkowe.

    W oknie Immediate widzimy dwie liczby (17 i 14) z wybranego przedziału, który odpowiada zadanym granicom i spośród których zostanie wybrane maksimum. Cyfry 1 i 2 oznaczają, że funkcja wykonała 2 cykle, w których zostały wybrane liczby. Widzimy wartości najważniejszych zmiennych, podobnie jak wcześniej przy MsgBox Ale to nie powstrzymało funkcji.

    Wywołanie funkcji z procedury

    Możesz wywołać funkcję zdefiniowaną przez użytkownika nie z komórki arkusza, ale z procedury. W takim przypadku wszystkie błędy zostaną pokazane w oknie edytora Visual Basic.

    Oto jak można wywołać funkcję zdefiniowaną przez użytkownika GetMaxBerween z procedury:

    Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End Sub

    Ustaw kursor w dowolnym miejscu kodu i naciśnij F5 . Jeśli nie ma błędu w funkcji, zobaczysz wyskakujące okno z wynikiem obliczeń.

    W przypadku wystąpienia błędu, w edytorze VBA zobaczysz odpowiedni komunikat. Obliczenia zostaną zatrzymane, a linia kodu, w której wystąpił błąd, zostanie podświetlona na żółto. Możesz łatwo zidentyfikować, gdzie i dlaczego wystąpił błąd.

    To wszystko, teraz stworzyłeś swój własny dodatek, dodałeś go do Excela i możesz używać w nim FROM. Jeśli chcesz używać więcej FROM, wystarczy napisać kod w module dodatku w edytorze VBA i zapisać go.

    To wszystko na dziś, pokryliśmy różne sposoby debugowania funkcji niestandardowych i dowiedzieliśmy się, jak używać ich w swoim skoroszycie. Naprawdę mamy nadzieję, że znajdziesz te wskazówki pomocne. Jeśli masz jakieś pytania, napisz w komentarzach do tego artykułu.

    Michael Brown jest oddanym entuzjastą technologii z pasją do upraszczania złożonych procesów za pomocą narzędzi programowych. Dzięki ponad dziesięcioletniemu doświadczeniu w branży technologicznej doskonalił swoje umiejętności w programach Microsoft Excel i Outlook, a także w Arkuszach i Dokumentach Google. Blog Michaela jest poświęcony dzieleniu się swoją wiedzą i doświadczeniem z innymi, dostarczając łatwych do zastosowania wskazówek i samouczków w celu poprawy produktywności i wydajności. Niezależnie od tego, czy jesteś doświadczonym profesjonalistą, czy początkującym, blog Michaela oferuje cenne spostrzeżenia i praktyczne porady dotyczące maksymalnego wykorzystania tych niezbędnych narzędzi programowych.