Excel UDF çalışmıyor: sorunlar ve çözümler

  • Bunu Paylaş
Michael Brown

Bu makalede, çalışma kitaplarınızda özel işlevler kullanırken karşılaşabileceğiniz sorunlara bir göz atacağız. Bunlara neyin neden olduğunu ve nasıl kolayca çözülebileceklerini göstermeye çalışacağım.

İşte konuşacaklarımız:

    Daha önce özel fonksiyonun ne olduğundan, nasıl oluşturulacağından ve kullanılacağından bahsetmiştik. Öncesinde UDF'lerle ilgili temel bilgileri tazelemeniz gerektiğini düşünüyorsanız, bir ara verin ve önceki makaleme göz atın.

    Excel UDF neden yeniden hesaplanmıyor?

    Çalışma kitabınızda herhangi bir değişiklik yaptığınızda, Excel orada bulunan her bir formülü yeniden hesaplamaz. Yalnızca değiştirilen hücrelere bağlı olan formüllerin sonuçlarını günceller.

    Ancak bu standart Excel işlevleriyle ilgilidir. Özel olanlara gelince, Excel VBA kodunu doğrulayamaz ve özel işlevin sonucunu etkileyebilecek diğer hücreleri de belirleyemez. Bu nedenle, çalışma kitabında değişiklik yaptığınızda özel formülünüz değişmeyebilir.

    Sorunu çözmek için, sadece Uygulama.Uçucu Nasıl uygulanacağına dair adım adım talimatları öğrenmek için bir sonraki bölüme göz atın.

    Uçucu ve uçucu olmayan özel fonksiyonlar

    Varsayılan olarak, Excel'deki özel işlevler uçucu değildir. Bu, UDF'nin yalnızca başvurduğu hücrelerden herhangi birinin değeri değişirse yeniden hesaplanacağı anlamına gelir. Ancak hücrelerin biçimi, çalışma sayfasının adı, dosyanın adı değişirse, UDF'de hiçbir değişiklik olmaz.

    Sözcüklerden örneklere geçelim. Örneğin, çalışma kitabınızın adını bir hücreye yazmanız gerekiyor. Bunu yapmak için özel bir işlev oluşturursunuz:

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

    Şimdi aşağıdaki durumu hayal edin. Özel formül yazdınız =İşKitabıAdı() Bir süre sonra dosyayı yeniden adlandırmaya karar verdiniz ve farklı bir adla kaydettiniz. Ancak hücredeki değere baktınız ve değişmediğini gördünüz. Hala eski bir dosya adı var ve bu artık doğru değil.

    Bu fonksiyonda bağımsız değişken olmadığından, fonksiyon yeniden hesaplanmaz (çalışma kitabının adını değiştirseniz, kapatsanız ve sonra yeniden açsanız bile).

    Not: Dosyanızdaki tüm fonksiyonları yeniden hesaplamak için Ctrl + Alt + F9 kısayolunu kullanabilirsiniz.

    Daha kolay bir yolu var mı? Çalışma sayfası her değiştiğinde formülün yeniden hesaplanmasını sağlamak için fazladan bir kod satırına ihtiyacınız var. Aşağıdaki kod parçasını işlevinizin başına yapıştırın:

    Uygulama.Uçucu

    Yani, kodunuz şöyle görünecektir:

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

    Artık UDF'niz uçucudur, dolayısıyla çalışma sayfasındaki herhangi bir hücre yeniden hesaplandığında veya çalışma kitabında herhangi bir değişiklik olduğunda otomatik olarak yeniden hesaplanacaktır. Dosyanın adını değiştirdiğiniz anda, bu güncellemeyi hemen göreceksiniz.

    Not: Çok fazla sayıda uçucu işlevin Excel'inizi yavaşlatabileceğini lütfen unutmayın. Sonuçta, karmaşık hesaplamalar yapan ve sürekli olarak büyük veri aralıkları üzerinde çalışan çok fazla özel işlev vardır.

    Bu nedenle, oynaklığı yalnızca gerçekten ihtiyaç duyulan yerlerde kullanmanızı öneririm.

    Özel fonksiyonlar neden kullanılamıyor?

    Özel bir işlevin adının ilk harflerini girdiğinizde, tıpkı standart Excel işlevlerinde olduğu gibi, giriş hücresinin yanındaki açılır listede görünür.

    Ancak bu her zaman gerçekleşmez. Hangi hatalar bu duruma neden olabilir?

    Excel 2003-2007'ye sahipseniz, UDF hiçbir zaman açılır listede görünmez. Orada yalnızca standart işlevleri görebilirsiniz.

    Ancak Excel'in daha yeni bir sürümünü kullanıyor olsanız bile, yanlışlıkla yapabileceğiniz başka bir hata daha vardır.

    Gördüğünüz gibi, özel fonksiyon Modules adlı standart bir VBA modülünde olmalıdır. Fonksiyon kodunu yazmak için yeni bir modül eklediğinizde, otomatik olarak tüm modüllerin yazıldığı bir Modules klasörü oluşturulur.

    Ancak bazen yeni bir modül oluşturulmayabilir. Bir sonraki ekran görüntüsünde özel fonksiyon kodunun ThisWorkbook ile birlikte "Microsoft Excel Objects" modülünde olduğunu görebilirsiniz.

    Burada önemli olan nokta, bir çalışma sayfasının veya çalışma kitabının kod alanına özel bir işlev yerleştiremeyeceğinizdir. Bu durumda işlev çalışmayacaktır. Ayrıca, işlevlerin açılır listesinde de görünmeyecektir. Bu nedenle, kod her zaman klasörde olmalıdır Modüller .

    Excel özel işlev yardım metni görüntülenmiyor

    Başka bir sorun da özel bir işlevi yapıştırdığınızda gördüğünüz ipucudur. Standart bir işlev kullanırsanız, işlev ve bağımsız değişkenleri için her zaman bir araç ipucu görürsünüz. Peki ya UDF'ler?

    Çok sayıda özel fonksiyonunuz varsa, her birinin hangi hesaplamaları yaptığını hatırlamanız son derece zor olacaktır. Hangi argümanları kullanacağınızı hatırlamak daha da zor olacaktır. Hatırlatma olarak özel fonksiyonlarınızın bir açıklamasına sahip olmanın iyi bir fikir olacağını düşünüyorum.

    Bunun için, aşağıdakileri kullanmanızı öneririm Application.MacroOptions İşlev Sihirbazı penceresinde yalnızca işlevin değil, aynı zamanda bağımsız değişkenlerinin her birinin açıklamasını da göstermenize yardımcı olur. Formül çubuğundaki Fx düğmesine tıkladığınızda bu pencereyi görürsünüz.

    UDF'lerinize böyle bir ipucunu nasıl ekleyeceğinizi görelim. Önceki makalede GetMaxBetween özel fonksiyonuna bakmıştık. Belirtilen aralıktaki maksimum sayıyı bulur ve üç bağımsız değişken alır: bir sayısal değer aralığı ve aranacak maksimum ve minimum değer.

    Şimdi bu özel fonksiyon için bir açıklama ekleyeceğiz. Bunu yapmak için Application.MacroOptions komutu için. GetMaxBetween işlevini çalıştırmak için aşağıdaki komutu çalıştırabilirsiniz:

    Sub RegisterUDF () Dim strFuncName As String 'kaydetmek istediğiniz fonksiyonun adı Dim strDescr As String ' fonksiyonun kendisinin açıklaması Dim strArgs () As String 'fonksiyon argümanlarının açıklaması ' GetMaxBetween fonksiyonunu kaydet ReDim strArgs (1 ila 3) 'Fonksiyonunuzdaki argüman sayısı strFuncName = "GetMaxBetween" strDescr = "Belirtilen aralıktaki maksimum sayı" strArgs (1) ="Sayısal değer aralığı" strArgs (2) = "Alt aralık sınırı " strArgs (3) = " Üst aralık sınırı " Application.MacroOptions Macro: = strFuncName, _ Description: = strDescr, _ ArgumentDescriptions: = strArgs, _ Category: = " My Custom Functions " End Sub

    veya

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "Belirtilen aralıktaki maksimum sayı" , _ Category: = "My Custom Functions" , _ ArgumentDescriptions: = Array (_ "Range of numeric values" , _ "Lower interval border" , _ "Upper interval border" ) End Sub

    Değişken str FuncName fonksiyonun adıdır. strDescr - fonksiyon açıklaması. strArgs değişkenleri her bir argüman için ipuçları içerir.

    Application.MacroOptions'ın dördüncü argümanının ne olduğunu merak edebilirsiniz. Bu isteğe bağlı argümanın adı Kategori ve özel Excel işlevlerimizin sınıfını belirtir GetMaxBetween () Oluşturduğunuz fonksiyonları yerleştireceğiniz yeni kategori için bir isim belirleyebilirsiniz. Kategori bağımsız değişkenini kullanmazsanız, özel fonksiyon otomatik olarak "Kullanıcı Tanımlı" kategorisine yerleştirilecektir.

    Fonksiyon kodunu modül penceresine yapıştırın:

    Ardından "Çalıştır" düğmesine tıklayın. Komut, aşağıdaki komutu kullanmak için tüm ayarları gerçekleştirecektir Fx düğmesi ile GetMaxBetween() fonksiyon.

    kullanarak bir hücreye bir işlev eklemeye çalışırsanız Fonksiyon Ekleme aracını kullandığınızda, orada sizin GetMaxBetween fonksiyonu "Özel Fonksiyonlarım" kategorisindedir:

    Fonksiyon adını hücreye yazmaya başlayabilirsiniz ve özel fonksiyonunuzu aralarından seçim yapabileceğiniz fonksiyonların açılır listesinde göreceksiniz.

    Sonra da İşlev Sihirbazı Fx düğmesi ile.

    İpucu: İşlev Sihirbazını açmak için CRTL + A tuş kombinasyonunu da kullanabilirsiniz.

    İçinde İşlev Sihirbazı penceresinde fonksiyonunuzun açıklamasının yanı sıra ilk argüman için bir ipucu göreceksiniz. İmlecinizi ikinci veya üçüncü argümanın üzerine getirirseniz, bunlar için de ipuçları göreceksiniz.

    Bu ipuçlarının metnini değiştirmek isterseniz, ipuçlarının değerlerini değiştirin. strDescr ve strArgs içindeki değişkenler RegisterUDF () kodunu çalıştırın. RegisterUDF () komutunu tekrar ver.

    Yapılan tüm ayarları geri almak ve işlev açıklamasını temizlemek istiyorsanız, bu kodu çalıştırın:

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

    Özel bir fonksiyon girdiğinizde ipucu almanın bir yolu daha vardır. Fonksiyonun adını girin ve ardından Ctrl + Shift + A tuşlarına basın:

    =GetMaxBetween( + Ctrl + Shift + A

    Fonksiyonun tüm argümanlarının bir listesini göreceksiniz:

    Ne yazık ki, burada fonksiyonun ve argümanlarının açıklamasını göremezsiniz. Ancak argümanların isimleri oldukça bilgilendirici ise, bu yüzden de yardımcı olabilirler. Yine de, hiç yoktan iyidir :)

    Standart Excel işlevleri gibi çalışan UDF'ler için intellisense oluşturmak biraz daha fazla çalışma gerektirecektir. Ne yazık ki Microsoft herhangi bir seçenek sunmamaktadır. Mevcut tek çözüm şu anda bir Excel-DNA IntelliSense uzantısıdır. Geliştiricinin web sitesinde daha fazla bilgi bulabilirsiniz.

    Umarım bu yönergeler, özel işleviniz çalışmadığında veya istediğiniz gibi çalışmadığında sorunları çözmenize yardımcı olur. Bununla birlikte, UDF'niz yine de çalışmazsa, lütfen sorununuzu Yorumlar bölümünde doğru bir şekilde açıklayın. Bunu anlamaya ve sizin için bir çözüm bulmaya çalışacağız ;)

    Michael Brown, yazılım araçlarını kullanarak karmaşık süreçleri basitleştirme tutkusuna sahip, kendini adamış bir teknoloji meraklısıdır. Teknoloji endüstrisinde on yılı aşkın deneyimiyle Microsoft Excel ve Outlook'un yanı sıra Google E-Tablolar ve Dokümanlar'daki becerilerini geliştirdi. Michael'ın blogu, bilgisini ve uzmanlığını başkalarıyla paylaşmaya, üretkenliği ve verimliliği artırmaya yönelik takip etmesi kolay ipuçları ve eğitimler sağlamaya adamıştır. İster deneyimli bir profesyonel, ister yeni başlayan olun, Michael'ın blogu, bu temel yazılım araçlarından en iyi şekilde yararlanmak için değerli bilgiler ve pratik tavsiyeler sunar.