Niedziałający FROM w programie Excel: problemy i rozwiązania

  • Udostępnij To
Michael Brown

W tym artykule przyjrzymy się problemom, z jakimi można się spotkać podczas korzystania z funkcji niestandardowych w skoroszytach. Postaram się pokazać, co jest ich przyczyną i jak łatwo można je rozwiązać.

Oto, o czym będziemy rozmawiać:

    Wcześniej rozmawialiśmy o tym, czym jest funkcja niestandardowa, jak ją tworzyć i używać. Jeśli czujesz, że musisz wcześniej odświeżyć podstawową wiedzę o FROM, zrób sobie przerwę i przejrzyj mój poprzedni artykuł.

    Dlaczego FROM w Excelu nie przelicza się?

    Gdy dokonasz jakichkolwiek zmian w swoim skoroszycie, Excel nie przeliczy każdej formuły, którą tam masz. Zaktualizuje wyniki tylko dla tych formuł, które są powiązane ze zmienionymi komórkami.

    Ale dotyczy to standardowych funkcji Excela. Jeśli chodzi o te niestandardowe, Excel nie może sprawdzić poprawności kodu VBA i zidentyfikować innych komórek, które mogłyby również wpłynąć na wynik funkcji niestandardowej. Dlatego twoja niestandardowa formuła może się nie zmienić, gdy wprowadzisz zmiany w skoroszycie.

    Aby rozwiązać ten problem, wystarczy użyć Zastosowanie.Lotne stwierdzenie. Sprawdź następny rozdział, aby poznać instrukcje krok po kroku, jak go zastosować.

    Nieulotne i nieulotne funkcje własne

    Domyślnie funkcje niestandardowe w Excelu nie są lotne. Oznacza to, że FROM jest ponownie obliczany tylko wtedy, gdy zmieni się wartość którejkolwiek z komórek, do których się odwołuje. Ale jeśli zmieni się format komórek, nazwa arkusza, nazwa pliku, to w FROM nie zajdą żadne zmiany.

    Przejdźmy od słów do przykładów. Na przykład musisz zapisać nazwę swojego skoroszytu w komórce. Aby to zrobić, tworzysz funkcję niestandardową:

    Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

    Teraz wyobraź sobie następujący przypadek. napisałeś niestandardową formułę =WorkbookName() do komórki i otrzymał tam nazwę pliku. Za jakiś czas postanowiłeś zmienić nazwę pliku i zapisałeś go z inną nazwą. Ale patrzysz na wartość w komórce i widzisz, że nie uległa ona zmianie. Nadal istnieje stara nazwa pliku, która nie jest już właściwa.

    Ponieważ w tej funkcji nie ma żadnych argumentów, nie jest ona przeliczana (nawet jeśli zmienisz nazwę skoroszytu, zamkniesz go, a następnie ponownie otworzysz).

    Uwaga. Aby przeliczyć wszystkie funkcje w pliku, możesz użyć skrótu Ctrl + Alt + F9.

    Czy istnieje prostszy sposób? Aby formuła przeliczała się przy każdej zmianie arkusza, potrzebujesz dodatkowej linii kodu. Na początku swojej funkcji wklej następujący fragment kodu:

    Zastosowanie.Lotne

    Tak więc twój kod będzie wyglądał tak:

    Function WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name End Function

    Teraz twój FROM jest zmienny, stąd będzie przeliczany automatycznie, jeśli jakakolwiek komórka w arkuszu została przeliczona lub nastąpiła jakakolwiek zmiana w skoroszycie. Jak tylko zmienisz nazwę pliku, zobaczysz tę aktualizację natychmiast.

    Uwaga. Należy pamiętać, że zbyt wiele funkcji lotnych może spowolnić działanie Excela. W końcu istnieje zbyt wiele funkcji niestandardowych, które wykonują złożone obliczenia i nieustannie operują na dużych zakresach danych.

    Dlatego polecam stosowanie zmienności tylko tam, gdzie jest ona naprawdę potrzebna.

    Dlaczego funkcje niestandardowe nie są dostępne

    Po wprowadzeniu pierwszych liter nazwy funkcji niestandardowej pojawia się ona na liście rozwijanej obok komórki wejściowej, podobnie jak standardowe funkcje Excela.

    Nie zawsze jednak tak się dzieje, jakie błędy mogą spowodować taką sytuację?

    Jeśli masz Excela 2003-2007, to UDF nigdy nie pojawia się na liście rozwijanej, tam widać tylko funkcje standardowe.

    Ale nawet jeśli używasz nowszej wersji Excela, jest jeszcze jeden błąd, który możesz przypadkowo popełnić.

    Widzisz, funkcja niestandardowa musi znajdować się w standardowym module VBA o nazwie Moduły. Kiedy dodajesz nowy moduł do pisania kodu funkcji, automatycznie tworzony jest folder Moduły, w którym zapisywane są wszystkie moduły.

    Ale czasami zdarza się, że nowy moduł nie jest tworzony. Na następnym zrzucie ekranu widać, że kod funkcji niestandardowej znajduje się w module "Obiekty Microsoft Excel" wraz z ThisWorkbook.

    Chodzi o to, że nie można umieścić funkcji niestandardowej w obszarze kodu arkusza lub skoroszytu. W takim przypadku funkcja nie będzie działać. Ponadto nie pojawi się w rozwijanej liście funkcji. Dlatego kod powinien zawsze znajdować się w folderze Moduły .

    Tekst pomocy funkcji niestandardowej programu Excel nie jest wyświetlany

    Innym problemem, który może się pojawić, jest podpowiedź, którą widzisz, gdy wklejasz funkcję niestandardową. Jeśli używasz standardowej funkcji, zawsze zobaczysz etykietę narzędziową dla funkcji i dla jej argumentów. Ale co z UDF-ami?

    Jeśli masz wiele funkcji niestandardowych, będzie ci niezwykle trudno zapamiętać, jakie obliczenia wykonuje każda z nich. Jeszcze trudniej będzie pamiętać, które argumenty należy użyć. Myślę, że dobrym pomysłem będzie posiadanie opisu twoich niestandardowych funkcji jako przypomnienia.

    W tym celu sugerowałbym użycie Application.MacroOptions metoda. Dzięki niej w oknie Kreator funkcji pokażesz opis nie tylko funkcji, ale także każdego z jej argumentów. Okno to zobaczysz po kliknięciu przycisku Fx na pasku formuły.

    Zobaczmy, jak dodać taką podpowiedź do swoich FROM-ów. W poprzednim artykule przyjrzeliśmy się funkcji niestandardowej GetMaxBetween. Znajduje ona maksymalną liczbę w określonym zakresie i przyjmuje trzy argumenty: zakres wartości liczbowych oraz maksymalną i minimalną wartość do wyszukania.

    Teraz dodamy opis dla tej niestandardowej funkcji. Aby to zrobić, należy utworzyć i uruchomić Application.MacroOptions polecenie. dla GetMaxBetween funkcja, można uruchomić następujące polecenie:

    Sub RegisterUDF () Dim strFuncName As String 'nazwa funkcji, którą chcesz zarejestrować Dim strDescr As String ' opis samej funkcji Dim strArgs () As String 'opis argumentów funkcji ' Zarejestruj funkcję GetMaxBetween ReDim strArgs (1 Do 3) 'liczba argumentów Twojej funkcji strFuncName = "GetMaxBetween" strDescr = "Maksymalna liczba w określonym zakresie" strArgs (1) =."Zakres wartości liczbowych" strArgs (2) = "Dolna granica przedziału " strArgs (3) = "Górna granica przedziału " Application.MacroOptions Macro: = strFuncName, _ Description: = strDescr, _ ArgumentDescriptions: = strArgs, _ Category: = " My Custom Functions " End Sub.

    lub

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "Maksymalna liczba w określonym przedziale" , _ Category: = "My Custom Functions" , _ ArgumentDescriptions: = Array (_ "Zakres wartości liczbowych" , _ "Dolna granica przedziału" , _ "Górna granica przedziału" ) End Sub.

    Zmienna str FuncName jest nazwą funkcji. strDescr - opis funkcji. strArgs zmienne zawierają podpowiedzi dla każdego argumentu.

    Można się zastanawiać, czym jest czwarty argument Application.MacroOptions. Ten opcjonalny argument nosi nazwę Kategoria i wskazuje klasę funkcji Excela, które nasze własne GetMaxBetween () Możesz określić nazwę nowej kategorii, w której będziesz umieszczał tworzone przez siebie funkcje. Jeśli nie użyjesz argumentu Kategoria, wówczas funkcja zostanie automatycznie umieszczona w kategorii "Zdefiniowane przez użytkownika".

    Kod funkcji wklejamy do okna modułu:

    Następnie kliknij przycisk "Uruchom". Polecenie wykona wszystkie ustawienia dotyczące korzystania z Fx przycisk z twoim GetMaxBetween() funkcja.

    Jeśli spróbujesz wstawić funkcję do komórki za pomocą Funkcja wstawiania zobaczysz, że jest tam twój GetMaxBetween Funkcja znajduje się w kategorii "Moje funkcje niestandardowe":

    Możesz po prostu zacząć wpisywać nazwę funkcji do komórki i zobaczysz swoją niestandardową funkcję w rozwijanej liście funkcji do wyboru.

    Następnie zadzwoń do Kreator funkcji za pomocą przycisku Fx.

    Wskazówka. Możesz również użyć kombinacji klawiszy CRTL + A, aby otworzyć Kreator funkcji.

    W Kreator funkcji W oknie pojawi się opis funkcji, a także podpowiedź dla pierwszego argumentu. Jeśli umieścisz kursor nad drugim lub trzecim argumentem, zobaczysz również podpowiedzi dla nich.

    Jeśli chcesz zmienić tekst tych podpowiedzi, zmień wartości opcji strDescr oraz strArgs zmienne w RegisterUDF () a następnie uruchomić RegisterUDF () ponownie polecenie.

    Jeśli chcesz cofnąć wszystkie wprowadzone ustawienia i wyczyścić opis funkcji, uruchom ten kod:

    Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    Jest jeszcze jeden sposób, aby uzyskać podpowiedź po wprowadzeniu funkcji niestandardowej. Wprowadź nazwę funkcji, a następnie naciśnij Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Zobaczysz listę wszystkich argumentów funkcji:

    Niestety, tutaj nie zobaczysz opisu funkcji i jej argumentów. Ale skoro nazwy argumentów są dość pouczające, więc i one mogą być pomocne.Mimo wszystko lepsze to niż nic :)

    Stworzenie intellisense dla FROM, które działają jak standardowe funkcje Excela, będzie wymagało nieco więcej pracy. Niestety, Microsoft nie zapewnia żadnych opcji. Jedynym dostępnym rozwiązaniem jest obecnie rozszerzenie Excel-DNA IntelliSense. Więcej informacji można znaleźć na stronie dewelopera.

    Mamy nadzieję, że te wskazówki pomogą Ci rozwiązać problemy, gdy Twoja funkcja niestandardowa nie działa lub nie działa tak, jak byś chciał. Jeśli jednak Twój FROM nadal nie działa, opisz dokładnie swój problem w sekcji Komentarze. Postaramy się go rozgryźć i znaleźć dla Ciebie rozwiązanie ;)

    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.