Excel UDF ishlamayapti: muammolar va echimlar

  • Buni Baham Ko'Ring
Michael Brown

Ushbu maqolada biz ish daftarlarida maxsus funksiyalardan foydalanishda duch kelishi mumkin bo'lgan muammolarni ko'rib chiqamiz. Men sizga ularga nima sabab bo'layotganini va ularni qanday osonlik bilan hal qilish mumkinligini ko'rsatishga harakat qilaman.

Mana biz nima haqida gaplashamiz:

    Avvalroq biz nima haqida gapirgan edik. maxsus funksiya, uni qanday yaratish va ishlatish. Agar siz avvaldan UDF haqidagi asosiy bilimlarni yangilashingiz kerak deb hisoblasangiz, biroz pauza qiling va oldingi maqolamni koʻrib chiqing.

    Nega Excel UDF qayta hisoblanmayapti?

    Oʻzgartirish kiritganingizda. Sizning ish kitobingiz, Excel u erda mavjud bo'lgan har bir formulani qayta hisoblab chiqmaydi. U faqat oʻzgartirilgan kataklarga bogʻlangan formulalar natijalarini yangilaydi.

    Lekin bu standart Excel funksiyalariga tegishli. Maxsus bo'lganlarga kelsak, Excel VBA kodini tasdiqlay olmaydi va maxsus funktsiya natijasiga ta'sir qilishi mumkin bo'lgan boshqa hujayralarni aniqlay olmaydi. Shuning uchun, ishchi daftarga o'zgartirish kiritganingizda maxsus formulangiz o'zgarmasligi mumkin.

    Muammoni tuzatish uchun Application.Volatile bayonotidan foydalanishingiz kifoya. Uni qanday qo'llash bo'yicha bosqichma-bosqich ko'rsatmalarni o'rganish uchun keyingi bobni ko'rib chiqing.

    O'zgaruvchan va uchuvchan bo'lmagan maxsus funktsiyalar

    Sukut bo'yicha Excelda maxsus funksiyalar o'zgaruvchan emas. Bu shuni anglatadiki, UDF faqat u tegishli bo'lgan har qanday hujayraning qiymati o'zgargan taqdirdagina qayta hisoblab chiqiladi. Lekin agar hujayralar formati, nomiish varag'i, fayl nomi o'zgaradi, keyin UDFda ​​hech qanday o'zgarishlar bo'lmaydi.

    Keling, so'zlardan misollarga o'tamiz. Masalan, ish daftaringiz nomini katakka yozishingiz kerak. Buning uchun siz maxsus funksiya yaratasiz:

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

    Endi quyidagi holatni tasavvur qiling. Siz katakka =WorkbookName() maxsus formulasini yozdingiz va u yerda fayl nomini oldingiz. Bir muncha vaqt o'tgach, siz fayl nomini o'zgartirishga qaror qildingiz va uni boshqa nom bilan saqladingiz. Lekin siz hujayradagi qiymatga qaraysiz va u o'zgarmaganligini ko'rasiz. Hali ham eski fayl nomi toʻgʻri emas.

    Ushbu funksiyada argumentlar yoʻqligi sababli funksiya qayta hisoblanmaydi (hatto siz ishchi kitob nomini oʻzgartirsangiz, uni yoping va keyin qayta oching) it).

    Eslatma. Faylingizdagi barcha funktsiyalarni qayta hisoblash uchun siz Ctrl + Alt + F9 yorliqlaridan foydalanishingiz mumkin.

    Buning oson yo'li bormi? Ish varag'i har o'zgarganda formulani qayta hisoblash uchun sizga qo'shimcha kod qatori kerak bo'ladi. Funktsiyangizning boshiga quyidagi kod qismini qo'ying:

    Application.Volatile

    Shunday qilib, kodingiz quyidagicha ko'rinadi:

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

    Endi sizning UDF o'zgaruvchan, shuning uchun agar ishchi varaqdagi katakchalar bo'lsa, u avtomatik ravishda qayta hisoblab chiqiladi.qayta hisob-kitob qilingan yoki ish kitobida biron bir o'zgarish sodir bo'lgan. Fayl nomini o'zgartirishingiz bilan darhol yangilanishni ko'rasiz.

    Eslatma. Shuni yodda tutingki, juda ko'p o'zgaruvchan funktsiyalar Excel ishini sekinlashtirishi mumkin. Axir, murakkab hisob-kitoblarni amalga oshiradigan va doimiy ravishda katta ma'lumotlar diapazonlarida ishlaydigan juda ko'p maxsus funktsiyalar mavjud.

    Shuning uchun men o'zgaruvchanlikni faqat zarur bo'lgan joyda ishlatishni tavsiya qilaman.

    Nima uchun maxsus funksiyalar mavjud emas

    Maxsus funksiya nomining birinchi harflarini kiritganingizda, u paydo bo'ladi. kirish katakchasi yonidagi ochiladigan ro'yxatda, xuddi standart Excel funktsiyalari kabi.

    Biroq, bu har doim ham sodir bo'lmaydi. Qanday xatolar bu holatga olib kelishi mumkin?

    Agar sizda Excel 2003-2007 bo'lsa, UDF hech qachon ochiladigan ro'yxatda ko'rinmaydi. U yerda siz faqat standart funksiyalarni koʻrishingiz mumkin.

    Ammo Excelning yangiroq versiyasidan foydalanayotgan boʻlsangiz ham, siz tasodifan yana bir xatoga yoʻl qoʻyishingiz mumkin.

    Koʻryapsizmi, maxsus funksiya bu yerda boʻlishi kerak. Modullar deb nomlangan standart VBA moduli. Funktsiya kodini yozish uchun yangi modul qo'shsangiz, avtomatik ravishda barcha modullar yoziladigan Modules papkasi yaratiladi.

    Ammo ba'zan shunday bo'ladiki, yangi modul bo'lmaydi. yaratilish. Keyingi skrinshotda siz maxsus funktsiya kodi "Microsoft Excel Objects" moduli bilan birga ekanligini ko'rishingiz mumkin.Ushbu Ish kitobi.

    Gap shundaki, siz ishchi varaq yoki ish kitobining kod maydoniga maxsus funksiyani joylashtira olmaysiz. Bunday holda, funktsiya ishlamaydi. Bundan tashqari, u ochiladigan funktsiyalar ro'yxatida ko'rinmaydi. Shuning uchun kod har doim Modules jildida bo'lishi kerak.

    Excel maxsus funksiyasi yordam matni ko'rsatilmaydi

    Yana bir muammo yuzaga kelishi mumkin, bu joylashtirganingizda ko'radigan maslahatdir. moslashtirilgan funksiya. Agar siz standart funktsiyadan foydalansangiz, siz doimo funksiya va uning argumentlari uchun maslahatchini ko'rasiz. Ammo UDF-lar haqida nima deyish mumkin?

    Agar sizda juda ko'p maxsus funktsiyalar mavjud bo'lsa, ularning har biri qanday hisob-kitoblarni bajarishini eslab qolish juda qiyin bo'ladi. Qaysi argumentlardan foydalanishni eslab qolish yanada qiyinroq bo'ladi. Menimcha, eslatma sifatida shaxsiy funksiyalaringiz tavsifi boʻlsa yaxshi boʻladi.

    Buning uchun men Application.MacroOptions usulidan foydalanishni tavsiya qilaman. Bu funksiya ustasi oynasida nafaqat funksiya, balki uning har bir argumenti tavsifini ham ko‘rsatishga yordam beradi. Formulalar qatoridagi Fx tugmachasini bosganingizda ushbu oynani ko'rasiz.

    Keling, UDF-larga bunday maslahatni qanday qo'shishni ko'rib chiqamiz. Oldingi maqolada biz GetMaxBetween maxsus funksiyasini ko'rib chiqdik. Belgilangan diapazondagi maksimal raqamni topadi va uchta argumentni oladi: raqamli qiymatlar oralig'i va maksimal va minimal qiymatlar.qidiring.

    Endi biz ushbu maxsus funksiya uchun tavsif qo'shamiz. Buning uchun Application.MacroOptions buyrug'ini yarating va ishga tushiring. GetMaxBetween funksiyasi uchun quyidagi buyruqni bajarishingiz mumkin:

    Sub RegisterUDF () Dim strFuncName As String 'siz ro‘yxatdan o‘tkazmoqchi bo‘lgan funksiya nomi Dim strDescr As String ' funksiya tavsifi o'zi Dim strArgs () As String 'funksiya argumentlari tavsifi ' GetMaxBetween funksiyasini ro'yxatdan o'tkazing ReDim strArgs (1 dan 3 gacha) 'Funksiyangizdagi argumentlar soni strFuncName = "GetMaxBetween" strDescr = "Maksimal raqam"str =Arg ichida ko'rsatilgan (1) "Raqamli qiymatlar diapazoni" strArgs (2) = "Quyi interval chegarasi " strArgs (3) = " Yuqori interval chegarasi " Application.MacroOptions Ibratli: = strFuncName, _ Tavsif: = strDescr, _ ArgumentDescriptions: = strArgs, _ Turkum: = " Mening maxsus funksiyalarim " End Sub

    yoki

    Sub RegisterUDF () Application.MacroOptions Ibratli: = "GetMaxBetween" , _ Tavsif: = "Ko'rsatilgan diapazondagi maksimal raqam" , _ Turkum: = "Mening Maxsus funksiyalar" , _ ArgumentDescriptions: = Massiv (_ "Raqamli qiymatlar diapazoni" , _ "Quyi intervalli bor" der", _ "Yuqori interval chegarasi" ) End Sub

    O'zgaruvchi str FuncName - funksiya nomi. strDescr - funksiya tavsifi. strArgs o'zgaruvchilari har bir argument uchun maslahatlarni o'z ichiga oladi.

    To'rtinchi argument nima ekanligini qiziqtirishingiz mumkin.Ilova.MacroOptions. Ushbu ixtiyoriy argument Category deb nomlanadi va bizning maxsus GetMaxBetween () funksiyamiz joylashtiriladigan Excel funksiyalari sinfini bildiradi. Siz uni mavjud toifalardan istalganidan keyin nomlashingiz mumkin: Math & ; Trig, Statistical, Logical, va hokazo. Siz yaratgan funksiyalaringizni joylashtiradigan yangi toifa uchun nom belgilashingiz mumkin. Agar siz Turkum argumentidan foydalanmasangiz, u holda maxsus funksiya avtomatik ravishda “Foydalanuvchi tomonidan belgilangan” toifasiga joylashtiriladi.

    Funksiya kodini modul oynasiga kiriting:

    Keyin "Ishga tushirish" tugmasini bosing. Buyruq GetMaxBetween() funksiyasi bilan Fx tugmasidan foydalanish uchun barcha sozlamalarni bajaradi.

    Agar siz Funktsiyani qo'shish vositasida siz GetMaxBetween funksiyangiz "Mening maxsus funktsiyalarim" turkumida ekanligini ko'rasiz:

    Siz Yacheykaga funktsiya nomini yozishni boshlashingiz mumkin va siz o'zingizning shaxsiy funksiyangizni tanlash uchun ochiladigan funksiyalar ro'yxatida ko'rasiz.

    Keyin Funksiya ustasiga qo'ng'iroq qiling. Fx tugmasi bilan.

    Maslahat. Funksiya ustasini ochish uchun CRTL + A tugmalar birikmasidan ham foydalanishingiz mumkin.

    Funktsiya ustasi oynasida siz o'z funksiyangiz tavsifini, shuningdek, birinchi argument uchun maslahatni ko'rasiz. Agar kursorni ustiga qo'ysangizikkinchi yoki uchinchi argument bo'lsa, siz ular uchun maslahatlarni ham ko'rasiz.

    Agar siz ushbu maslahatlar matnini o'zgartirmoqchi bo'lsangiz, strDescr va strArgs RegisterUDF () kodidagi 7> o'zgaruvchilar. Keyin yana RegisterUDF () buyrug'ini ishga tushiring.

    Agar siz barcha sozlamalarni bekor qilmoqchi bo'lsangiz va funksiya tavsifini o'chirmoqchi bo'lsangiz, ushbu kodni ishga tushiring:

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

    Xususiy funktsiyani kiritishda maslahat olishning yana bir usuli bor. Funksiya nomini kiriting va keyin Ctrl + Shift + A tugmalarini bosing :

    =GetMaxBetween( + Ctrl + Shift + A

    Siz funktsiyaning barcha argumentlari ro'yxatini ko'rasiz:

    Afsuski, bu yerda funksiya tavsifi va uning argumentlarini ko'rmaysiz. Ammo agar argumentlarning nomlari juda ma'lumotli bo'lsa, ular ham foydali bo'lishi mumkin. Shunga qaramay, bu hech narsadan yaxshiroq :)

    Standart Excel funksiyalari kabi ishlaydigan UDF uchun intellisense yaratish uchun biroz ko'proq mehnat talab etiladi. Afsuski, Microsoft hech qanday variantni taqdim etmaydi. Hozirgi vaqtda yagona yechim Excel-DNA IntelliSense kengaytmasidir. Batafsil maʼlumotni ishlab chiquvchining veb-saytida topishingiz mumkin.

    Ushbu koʻrsatmalar sizning shaxsiy funksiyangiz ishlamayotgan yoki ishlamayotgan muammolarni hal qilishga yordam beradi deb umid qilamiz.xohlaganingizcha ishlang. Agar sizning UDF hali ham ishlamasa, iltimos, sharhlar bo'limida muammoingizni aniq tasvirlab bering. Biz buni aniqlashga va siz uchun yechim topishga harakat qilamiz ;)

    Maykl Braun - dasturiy vositalardan foydalangan holda murakkab jarayonlarni soddalashtirishga ishtiyoqi bo'lgan maxsus texnologiya ishqibozi. Texnologiya sohasida o'n yildan ortiq tajribaga ega bo'lgan holda, u Microsoft Excel va Outlook, shuningdek, Google Sheets va Docs dasturlarida o'z mahoratini oshirdi. Mayklning blogi o'z bilimi va tajribasini boshqalar bilan baham ko'rishga, samaradorlik va samaradorlikni oshirish uchun amal qilish oson maslahatlar va o'quv qo'llanmalariga bag'ishlangan. Tajribali mutaxassismisiz yoki yangi boshlovchi boʻlasizmi, Mayklning blogi ushbu muhim dasturiy vositalardan maksimal darajada foydalanish uchun qimmatli tushunchalar va amaliy maslahatlarni taqdim etadi.