Excel UDF არ მუშაობს: პრობლემები და გადაწყვეტილებები

  • გააზიარეთ ეს
Michael Brown

ამ სტატიაში ჩვენ გადავხედავთ იმ პრობლემებს, რომლებიც შეიძლება შეგექმნათ თქვენს სამუშაო წიგნებში მორგებული ფუნქციების გამოყენებისას. ვეცდები გაჩვენოთ რა იწვევს მათ და რამდენად მარტივად შეიძლება მათი მოგვარება.

აი რაზე ვისაუბრებთ:

    ადრე ვისაუბრეთ იმაზე, თუ რა მორგებული ფუნქცია არის, როგორ შევქმნათ და გამოვიყენოთ იგი. თუ ფიქრობთ, რომ წინასწარ გჭირდებათ UDF-ების ძირითადი ცოდნის განახლება, შეაჩერეთ და გადახედეთ ჩემს წინა სტატიას.

    რატომ არ ხდება Excel UDF-ის ხელახალი გამოთვლა?

    როდესაც რაიმე ცვლილებას განახორციელებთ თქვენი სამუშაო წიგნი, Excel არ გადათვლის თითოეულ ფორმულას, რომელიც თქვენ გაქვთ იქ. ის განაახლებს შედეგებს იმ ფორმულებისთვის, რომლებიც დაკავშირებულია მხოლოდ შეცვლილ უჯრედებთან.

    მაგრამ ეს ეხება Excel-ის სტანდარტულ ფუნქციებს. რაც შეეხება მორგებულებს, Excel-ს არ შეუძლია VBA კოდის ვალიდაცია და სხვა უჯრედების იდენტიფიცირება, რომლებმაც ასევე შეიძლება გავლენა მოახდინონ მორგებული ფუნქციის შედეგზე. ამიტომ, თქვენი მორგებული ფორმულა შეიძლება არ შეიცვალოს სამუშაო წიგნში ცვლილებების შეტანისას.

    ამ პრობლემის მოსაგვარებლად, თქვენ უბრალოდ უნდა გამოიყენოთ Application.Volatile განცხადება. შეამოწმეთ შემდეგი თავი, რათა გაიგოთ ნაბიჯ-ნაბიჯ ინსტრუქციები მისი გამოყენების შესახებ.

    არასტაბილური და არასტაბილური მორგებული ფუნქციები

    ნაგულისხმევად, მორგებული ფუნქციები Excel-ში არ არის არასტაბილური. ეს ნიშნავს, რომ UDF ხელახლა გამოითვლება მხოლოდ იმ შემთხვევაში, თუ იცვლება რომელიმე უჯრედის მნიშვნელობა, რომელსაც ის ეხება. მაგრამ თუ უჯრედების ფორმატი, სახელისამუშაო ფურცელი, ფაილის სახელი შეიცვლება, შემდეგ UDF-ში ცვლილებები არ მოხდება.

    მოდით გადავიდეთ სიტყვებიდან მაგალითებზე. მაგალითად, თქვენ უნდა ჩაწეროთ თქვენი სამუშაო წიგნის სახელი უჯრედში. ამისათვის თქვენ შექმნით მორგებულ ფუნქციას:

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

    ახლა წარმოიდგინეთ შემდეგი შემთხვევა. თქვენ ჩაწერეთ მორგებული ფორმულა =WorkbookName() უჯრედში და მიიღეთ ფაილის სახელი. გარკვეული პერიოდის შემდეგ, თქვენ გადაწყვიტეთ ფაილის გადარქმევა და შეინახეთ იგი სხვა სახელით. მაგრამ თქვენ უყურებთ მნიშვნელობას უჯრედში და ხედავთ, რომ ის არ შეცვლილა. ჯერ კიდევ არის ფაილის ძველი სახელი, რომელიც აღარ არის სწორი.

    რადგან ამ ფუნქციაში არგუმენტები არ არის, ფუნქცია არ გამოითვლება (მაშინაც კი, თუ შეცვლით სამუშაო წიგნის სახელს, დახურავთ მას და ხელახლა გახსნით ის).

    შენიშვნა. თქვენს ფაილში არსებული ყველა ფუნქციის ხელახლა გამოსათვლელად, შეგიძლიათ გამოიყენოთ Ctrl + Alt + F9 მალსახმობი.

    არის უფრო მარტივი გზა? იმისათვის, რომ ფორმულა ხელახლა გამოითვალოს ყოველ ჯერზე სამუშაო ფურცლის ცვლილებისას, გჭირდებათ კოდის დამატებითი ხაზი. ჩასვით კოდის შემდეგი ნაწილი თქვენი ფუნქციის დასაწყისში:

    Application.Volatile

    ასე რომ, თქვენი კოდი ასე გამოიყურება:

    ფუნქცია WorkbookName() როგორც სტრიქონი Application.Volatile WorkbookName = ThisWorkbook.Name End ფუნქცია

    ახლა თქვენი UDF არის არასტაბილური, ამიტომ ის ავტომატურად ხელახლა გამოითვლება, თუ რომელიმე უჯრედი სამუშაო ფურცელზეგადაითვალა ან რაიმე ცვლილება მოხდა სამუშაო წიგნში. როგორც კი შეცვლით ფაილის სახელს, მაშინვე დაინახავთ ამ განახლებას.

    შენიშვნა. გთხოვთ, გახსოვდეთ, რომ ძალიან ბევრმა არასტაბილურმა ფუნქციამ შეიძლება შეანელოს თქვენი Excel. ყოველივე ამის შემდეგ, არსებობს ძალიან ბევრი მორგებული ფუნქცია, რომელიც ასრულებს რთულ გამოთვლებს და მუდმივად მუშაობს მონაცემთა დიდ დიაპაზონზე.

    ამიტომ, გირჩევთ გამოიყენოთ არასტაბილურობა მხოლოდ იქ, სადაც ეს ნამდვილად საჭიროა.

    რატომ მიუწვდომელია მორგებული ფუნქციები

    როდესაც თქვენ შეიყვანთ მორგებული ფუნქციის სახელის პირველ ასოებს, ის გამოჩნდება შეყვანის უჯრედის გვერდით ჩამოსაშლელ სიაში, ისევე როგორც Excel-ის სტანდარტული ფუნქციები.

    თუმცა, ეს ყოველთვის არ ხდება. რა შეცდომებმა შეიძლება გამოიწვიოს ეს სიტუაცია?

    თუ გაქვთ Excel 2003-2007, მაშინ UDF არასოდეს გამოჩნდება ჩამოსაშლელ სიაში. იქ შეგიძლიათ ნახოთ მხოლოდ სტანდარტული ფუნქციები.

    მაგრამ მაშინაც კი, თუ თქვენ იყენებთ Excel-ის ახალ ვერსიას, შეიძლება შემთხვევით დაუშვათ კიდევ ერთი შეცდომა.

    ხედავთ, მორგებული ფუნქცია უნდა იყოს სტანდარტული VBA მოდული სახელწოდებით Modules. როდესაც თქვენ დაამატებთ ახალ მოდულს ფუნქციის კოდის დასაწერად, ავტომატურად იქმნება Modules საქაღალდე, რომელშიც ყველა მოდული იწერება.

    მაგრამ ზოგჯერ ისეც ხდება, რომ ახალი მოდული არ არის იქმნება. შემდეგ ეკრანის სურათზე ხედავთ, რომ მორგებული ფუნქციის კოდი არის "Microsoft Excel Objects" მოდულში დაThisWorkbook.

    საქმე ის არის, რომ თქვენ არ შეგიძლიათ განათავსოთ მორგებული ფუნქცია სამუშაო ფურცლის ან სამუშაო წიგნის კოდის არეში. ამ შემთხვევაში ფუნქცია არ იმუშავებს. უფრო მეტიც, ის არ გამოჩნდება ფუნქციების ჩამოსაშლელ სიაში. ამიტომ, კოდი ყოველთვის უნდა იყოს საქაღალდეში Modules .

    Excel-ის მორგებული ფუნქციის დახმარების ტექსტი არ არის ნაჩვენები

    სხვა პრობლემა შეიძლება წარმოიშვას არის მინიშნება, რომელსაც ხედავთ ჩასმისას. მორგებული ფუნქცია. თუ იყენებთ სტანდარტულ ფუნქციას, ყოველთვის იხილავთ ინსტრუმენტს ფუნქციისა და მისი არგუმენტებისთვის. მაგრამ რაც შეეხება UDF-ებს?

    თუ თქვენ გაქვთ ბევრი მორგებული ფუნქცია, გაგიჭირდებათ გახსოვდეთ, რა გამოთვლებს აკეთებს თითოეული მათგანი. კიდევ უფრო რთული იქნება იმის დამახსოვრება, თუ რომელი არგუმენტები გამოვიყენოთ. ვფიქრობ, კარგი იდეა იქნება თქვენი მორგებული ფუნქციების აღწერა შეხსენების სახით.

    ამისთვის მე გირჩევთ გამოიყენოთ Application.MacroOptions მეთოდი. ის დაგეხმარებათ აჩვენოთ არა მხოლოდ ფუნქციის, არამედ მისი თითოეული არგუმენტის აღწერა Function Wizard ფანჯარაში. თქვენ ხედავთ ამ ფანჯარას, როდესაც დააწკაპუნებთ Fx ღილაკს ფორმულების ზოლში.

    მოდით ვნახოთ, როგორ დაამატოთ ასეთი მინიშნება თქვენს UDF-ებს. წინა სტატიაში ჩვენ გადავხედეთ GetMaxBetween საბაჟო ფუნქციას. ის პოულობს მაქსიმალურ რიცხვს მითითებულ დიაპაზონში და იღებს სამ არგუმენტს: რიცხვითი მნიშვნელობების დიაპაზონს და მაქსიმალურ და მინიმალურ მნიშვნელობასმოძებნეთ.

    ახლა ჩვენ დავამატებთ აღწერილობას ამ მორგებული ფუნქციისთვის. ამისათვის შექმენით და გაუშვით ბრძანება Application.MacroOptions . GetMaxBetween ფუნქციისთვის შეგიძლიათ გაუშვათ შემდეგი ბრძანება:

    Sub RegisterUDF () Dim strFuncName As String 'ფუნქციის სახელი, რომლის რეგისტრაცია გსურთ Dim strDescr As String' ფუნქციის აღწერა თავად Dim strArgs () როგორც სტრიქონი 'ფუნქციის არგუმენტების აღწერა' რეგისტრაცია GetMaxBetween ფუნქცია ReDim strArgs (1-დან 3-მდე) 'არგუმენტების რაოდენობა თქვენს ფუნქციაში strFuncName = "GetMaxBetween" strDescr = "მაქსიმალური რიცხვი მითითებულ დიაპაზონში" strArgs (1) "ციფრული მნიშვნელობების დიაპაზონი" strArgs (2) = "ქვედა ინტერვალის საზღვარი" strArgs (3) = "ზედა ინტერვალის საზღვარი" Application.MacroOptions მაკრო: = strFuncName, _ აღწერა: = strDescr, _ არგუმენტის აღწერა: = strArgs, _ კატეგორია: = " My Custom Functions " End Sub

    ან

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ აღწერა: = "მაქსიმალური რიცხვი მითითებულ დიაპაზონში" , _ კატეგორია: = "ჩემი მორგებული ფუნქციები" , _ არგუმენტის აღწერა: = მასივი (_ "რიცხობრივი მნიშვნელობების დიაპაზონი" , _ "ქვედა ინტერვალის bor der" , _ "ზედა ინტერვალის საზღვარი" ) End Sub

    ცვლადი str FuncName არის ფუნქციის სახელი. strDescr - ფუნქციის აღწერა. strArgs ცვლადები შეიცავს მინიშნებებს თითოეული არგუმენტისთვის.

    შეიძლება გაინტერესებთ რა არის მეოთხე არგუმენტი.აპლიკაცია.MacroOptions. ამ არასავალდებულო არგუმენტს ეწოდება კატეგორია და მიუთითებს Excel-ის ფუნქციების კლასს, რომელშიც განთავსდება ჩვენი მორგებული ფუნქცია GetMaxBetween () . თქვენ შეგიძლიათ დაასახელოთ იგი ნებისმიერი არსებული კატეგორიის მიხედვით: მათემატიკა და გაძლიერება ; Trig, Statistical, Logical და ა.შ. შეგიძლიათ მიუთითოთ სახელი ახალი კატეგორიისთვის, რომელშიც განათავსებთ თქვენს მიერ შექმნილ ფუნქციებს. თუ არ იყენებთ კატეგორიის არგუმენტს, მაშინ მორგებული ფუნქცია ავტომატურად განთავსდება "მომხმარებლის განსაზღვრული" კატეგორიაში.

    ჩასვით ფუნქციის კოდი მოდულის ფანჯარაში:

    <. 1>

    შემდეგ დააჭირეთ ღილაკს "გაშვება". ბრძანება შეასრულებს ყველა პარამეტრს Fx ღილაკის გამოყენებისთვის თქვენი GetMaxBetween() ფუნქციით.

    თუ ცდილობთ ფუნქციის ჩასმას უჯრედში GetMaxBetween() . 6>Insert Function ინსტრუმენტი, თქვენ ნახავთ, რომ თქვენი GetMaxBetween ფუნქცია არის "ჩემი მორგებული ფუნქციები" კატეგორიაში:

    თქვენ შეგიძლიათ უბრალოდ დაიწყოთ ფუნქციის სახელის აკრეფა უჯრედში და თქვენ იხილავთ თქვენს მორგებულ ფუნქციას ფუნქციების ჩამოსაშლელ სიაში, რომელთაგან უნდა აირჩიოთ.

    შემდეგ დარეკეთ ფუნქციის ოსტატი Fx ღილაკით.

    რჩევა. თქვენ ასევე შეგიძლიათ გამოიყენოთ კლავიშთა კომბინაცია CRTL + A ფუნქციების ოსტატის გასახსნელად.

    Function Wizard ფანჯარაში იხილავთ თქვენი ფუნქციის აღწერას, ასევე მინიშნებას პირველი არგუმენტისთვის. თუ კურსორს ზევით მოათავსებთმეორე ან მესამე არგუმენტი, თქვენ ასევე იხილავთ მინიშნებებს მათთვის.

    თუ გსურთ შეცვალოთ ამ მინიშნებების ტექსტი, შეცვალეთ strDescr და strArgs<მნიშვნელობები. 7> ცვლადები RegisterUDF () კოდში. შემდეგ კვლავ გაუშვით ბრძანება RegisterUDF () .

    თუ გსურთ გააუქმოთ ყველა შესრულებული პარამეტრი და გაასუფთავოთ ფუნქციის აღწერა, გაუშვით ეს კოდი:

    Sub UnregisterUDF () Application.MacroOptions მაკრო: = "GetMaxBetween" , _ აღწერა: = ცარიელი , არგუმენტირებული აღწერილობები: = ცარიელი , კატეგორია: = ცარიელი ბოლო ქვე

    არსებობს კიდევ ერთი გზა მინიშნების მისაღებად, როდესაც შედიხართ მორგებულ ფუნქციას. შეიყვანეთ ფუნქციის სახელი და შემდეგ დააჭირეთ Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    თქვენ ნახავთ ფუნქციის ყველა არგუმენტის ჩამონათვალს:

    სამწუხაროდ, აქ ვერ ნახავთ ფუნქციის აღწერას და მის არგუმენტებს. მაგრამ თუ არგუმენტების სახელები საკმაოდ ინფორმაციულია, ისინიც შეიძლება სასარგებლო იყოს. და მაინც, არაფერს ჯობია :)

    ცოტა მეტი შრომა დასჭირდება UDF-ებისთვის ინტელისენსის შექმნას, რომლებიც მუშაობენ Excel-ის სტანდარტული ფუნქციების მსგავსად. სამწუხაროდ, Microsoft არ გთავაზობთ რაიმე ვარიანტს. ერთადერთი ხელმისაწვდომი გამოსავალი არის Excel-DNA IntelliSense გაფართოება. დამატებითი ინფორმაციის ნახვა შეგიძლიათ დეველოპერის ვებსაიტზე.

    იმედია, ეს სახელმძღვანელოები დაგეხმარებათ პრობლემების მოგვარებაში, როდესაც თქვენი მორგებული ფუნქცია არ მუშაობს ან არ მუშაობსიმუშავე ისე, როგორც შენ გინდა. თუმცა, თუ თქვენი UDF მაინც ვერ მუშაობს, გთხოვთ, ზუსტად აღწეროთ თქვენი პრობლემა კომენტარების განყოფილებაში. ჩვენ ვეცდებით გავერკვეთ და ვიპოვოთ გამოსავალი თქვენთვის ;)

    მაიკლ ბრაუნი არის ტექნოლოგიის ერთგული ენთუზიასტი, რომელსაც აქვს გატაცება პროგრამული ინსტრუმენტების გამოყენებით რთული პროცესების გამარტივებისთვის. ტექნოლოგიურ ინდუსტრიაში ათწლეულზე მეტი გამოცდილებით, მან დახვეწა თავისი უნარები Microsoft Excel-სა და Outlook-ში, ასევე Google Sheets-სა და Docs-ში. მაიკლის ბლოგი ეძღვნება თავისი ცოდნისა და გამოცდილების სხვებს გაზიარებას, ადვილად მისაწვდომ რჩევებსა და გაკვეთილებს პროდუქტიულობისა და ეფექტურობის გასაუმჯობესებლად. მიუხედავად იმისა, გამოცდილი პროფესიონალი ხართ თუ დამწყები, მაიკლის ბლოგი გთავაზობთ ღირებულ შეხედულებებსა და პრაქტიკულ რჩევებს ამ აუცილებელი პროგრამული ხელსაწყოებიდან მაქსიმალური სარგებლობის მისაღებად.