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() As String Application.Volatile WorkbookName = ThisWorkbook.Name End Function

    Одоо таны UDF тогтворгүй байгаа тул ажлын хуудасны нүд байвал автоматаар дахин тооцоолно.дахин тооцоолсон эсвэл ажлын дэвтэрт өөрчлөлт орсон. Та файлын нэрийг өөрчилсөн даруйдаа тэр шинэчлэлтийг харах болно.

    Анхаарна уу. Хэт олон тогтворгүй функц нь таны Excel-ийг удаашруулж болзошгүйг санаарай. Эцсийн эцэст нарийн төвөгтэй тооцоолол хийдэг, том өгөгдлийн мужид байнга ажилладаг дэндүү олон захиалгат функцууд байдаг.

    Тиймээс би хэлбэлзлийг зөвхөн шаардлагатай үед л ашиглахыг зөвлөж байна.

    Яагаад захиалгат функцүүд байхгүй байна

    Та захиалгат функцийн нэрний эхний үсгийг оруулахад энэ нь гарч ирнэ. стандарт Excel функцүүдийн нэгэн адил оролтын нүдний хажууд унадаг жагсаалтад.

    Гэхдээ энэ нь үргэлж тохиолддоггүй. Ямар алдаанууд ийм нөхцөл байдалд хүргэж болох вэ?

    Хэрэв танд Excel 2003-2007 байгаа бол UDF хэзээ ч унадаг жагсаалтад харагдахгүй. Тэнд та зөвхөн стандарт функцуудыг харах боломжтой.

    Гэхдээ та Excel-ийн шинэ хувилбарыг ашиглаж байгаа ч санамсаргүй байдлаар өөр нэг алдаа гаргаж болзошгүй.

    Таны харж байна уу, захиалгат функц дотор байх ёстой. Модули гэж нэрлэгддэг стандарт VBA модуль. Функцийн код бичихийн тулд шинэ модуль нэмэхэд бүх модулиуд нь бичигдсэн Modules хавтас автоматаар үүснэ.

    Гэхдээ заримдаа шинэ модуль байхгүй байх тохиолдол гардаг. бий болж байна. Дараагийн дэлгэцийн агшин дээр та тусгай функцийн код нь "Microsoft Excel Objects" модулийн хамт байгааг харж болно.Энэ ажлын ном.

    Гол санаа нь та ажлын хуудас эсвэл ажлын дэвтрийн кодын талбарт захиалгат функцийг байрлуулах боломжгүй юм. Энэ тохиолдолд функц ажиллахгүй болно. Түүнээс гадна, энэ нь унждаг функцүүдийн жагсаалтад харагдахгүй. Иймд код нь үргэлж Модулиуд хавтсанд байх ёстой.

    Excel-ийн захиалгат функцийн тусламжийн текст харагдахгүй байна

    Өөр нэг асуудал бол таныг буулгах үед харагдах зөвлөмж юм. захиалгат функц. Хэрэв та стандарт функц ашигладаг бол функц болон түүний аргументуудын зөвлөмжийг үргэлж харах болно. Харин UDF-ийн талаар юу хэлэх вэ?

    Хэрэв танд олон тооны захиалгат функц байгаа бол тэдгээр нь ямар тооцоолол хийдгийг санахад танд маш хэцүү байх болно. Аль аргументыг ашиглахыг санах нь бүр ч хэцүү байх болно. Би өөрийн тохируулсан функцүүдийн тайлбарыг сануулах нь зүйтэй байх гэж бодож байна.

    Үүний тулд би Application.MacroOptions аргыг ашиглахыг зөвлөж байна. Энэ нь Функцын шидтэн цонхонд зөвхөн функц төдийгүй түүний аргумент бүрийн тайлбарыг харуулахад тусална. Томъёоны мөрөн дэх Fx товчийг дарахад та энэ цонхыг харна.

    Өөрийн UDF-д ийм зөвлөмжийг хэрхэн нэмэхийг харцгаая. Өмнөх нийтлэлд бид GetMaxBetween захиалгат функцийг үзсэн. Энэ нь заасан муж дахь хамгийн их тоог олох бөгөөд гурван аргумент авдаг: тоон утгуудын муж, хамгийн их ба хамгийн бага утга.хайх.

    Одоо бид энэ тусгай функцийн тайлбарыг нэмнэ. Үүнийг хийхийн тулд Application.MacroOptions командыг үүсгэн ажиллуулна. GetMaxBetween функцийн хувьд та дараах тушаалыг ажиллуулж болно:

    Дэд БүртгэлUDF () Dim strFuncName String 'бүртгүүлэхийг хүсэж буй функцийн нэр Dim strDescr As String' функцийн тайлбар. өөрөө Dim strArgs () As String 'функцын аргументуудын тайлбар ' GetMaxBetween функцийг бүртгэх ReDim strArgs (1-ээс 3) 'Таны функц дэх аргументын тоо strFuncName = "GetMaxBetween" strDescr = "Хамгийн их тоо" (заасан муж) str 1) "Тоон утгын хүрээ" strArgs (2) = "Доод интервалын хүрээ" strArgs (3) = " Дээд интервалын хүрээ " Application.MacroOptions Макро: = strFuncName, _ Тайлбар: = strDescr, _ ArgumentDescriptions: = strArgs, _ Ангилал: = " My Custom Functions " End Sub

    or

    Sub RegisterUDF () Application.MacroOptions Макро: = "GetMaxBetween" , _ Тайлбар: = "Заасан муж дахь хамгийн их тоо" , _ Ангилал: = "Миний Custom Functions" , _ ArgumentDescriptions: = Массив (_ "Тоон утгын хүрээ" , _ "Доод интервал der" , _ "Дээд интервалын хүрээ" ) Төгсгөлийн Дэд

    Хувьсагч str FuncName нь функцийн нэр юм. strDescr - функцийн тайлбар. strArgs хувьсагч нь аргумент бүрийн зөвлөмжийг агуулна.

    Та дөрөв дэх аргумент юу вэ гэж гайхаж магадгүй.Програм.MacroOptions. Энэ нэмэлт аргументыг Ангилал гэж нэрлэсэн бөгөөд бидний захиалгат GetMaxBetween () функцийг байрлуулах Excel функцуудын ангиллыг заана. Та үүнийг одоо байгаа ангиллын аль нэгээр нь нэрлэж болно: Math & ; Trig, Statistical, Logical гэх мэт. Та үүсгэсэн функцүүдээ байрлуулах шинэ категорийн нэрийг зааж өгч болно. Хэрэв та Ангилал аргументыг ашиглахгүй бол захиалгат функц автоматаар "Хэрэглэгчийн тодорхойлсон" ангилалд орно.

    Функцийн кодыг модулийн цонхонд оруулна уу:

    Дараа нь "Run" товчийг дарна уу. Энэ тушаал нь таны GetMaxBetween() функцээр Fx товчийг ашиглах бүх тохиргоог хийнэ.

    Хэрэв та <ашиглан нүдэнд функц оруулахыг оролдвол 6>Insert Function хэрэглүүрийг ашигласнаар таны GetMaxBetween функц "Миний захиалгат функцууд" ангилалд байгааг харах болно:

    Та Нүдэнд функцийн нэрийг бичиж эхлэхэд л та өөрийн тохируулсан функцийг сонгох функцүүдийн унадаг жагсаалтаас харах болно.

    Дараа нь Функцийн мастер руу залгана уу. Fx товчлууртай.

    Зөвлөгөө. Та мөн CRTL + A товчлуурын хослолыг ашиглан Function Wizard-ийг нээж болно.

    Функцийн шидтэн цонхонд та өөрийн функцийн тайлбар, мөн эхний аргументийн зөвлөмжийг харах болно. Хэрэв та курсороо дээр байрлуулбалХоёр эсвэл гурав дахь аргументыг ашиглавал та тэдгээрт зориулсан зөвлөмжийг харах болно.

    Хэрэв та эдгээр зөвлөмжийн текстийг өөрчлөхийг хүсвэл strDescr болон strArgs<-ын утгыг өөрчил. RegisterUDF () кодын 7> хувьсагч. Дараа нь RegisterUDF () командыг дахин ажиллуулна уу.

    Хэрэв та хийсэн бүх тохиргоог буцаах, функцийн тайлбарыг арилгахыг хүсвэл дараах кодыг ажиллуулна уу:

    Дэд бүртгэлийг UnregisterUDF () Application.MacroOptions Макро: = "GetMaxBetween" , _ Тайлбар: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    Та захиалгат функцийг оруулах үед зөвлөмж авах өөр нэг арга бий. Функцийн нэрийг оруулаад Ctrl + Shift + A товчийг дарна уу:

    =GetMaxBetween( + Ctrl + Shift + A

    Та функцийн бүх аргументуудын жагсаалтыг харах болно:

    Харамсалтай нь та функцийн тайлбар болон түүний аргументуудыг харахгүй. Гэхдээ хэрвээ аргументуудын нэрс нэлээд мэдээлэлтэй байвал тэдгээр нь бас тустай байж болох юм. Гэсэн хэдий ч энэ нь юу ч биш байснаас дээр юм :)

    Стандарт Excel функцүүд шиг ажилладаг UDF-д зориулсан intellisense үүсгэхийн тулд бага зэрэг ажиллах шаардлагатай болно. Харамсалтай нь Microsoft ямар ч сонголт өгдөггүй. Одоогоор боломжтой цорын ганц шийдэл бол Excel-DNA IntelliSense өргөтгөл юм. Та хөгжүүлэгчийн вэб сайтаас дэлгэрэнгүй мэдээлэл авах боломжтой.

    Эдгээр удирдамж нь таны захиалгат функц ажиллахгүй эсвэл ажиллахгүй байгаа асуудлыг шийдвэрлэхэд тусална гэж найдаж байна.хүссэнээрээ ажилла. Хэрэв таны UDF ажиллахгүй хэвээр байвал Сэтгэгдэл хэсэгт асуудлаа үнэн зөв тайлбарлана уу. Бид үүнийг олж, танд тохирох шийдлийг олохыг хичээх болно ;)

    Майкл Браун бол програм хангамжийн хэрэгслийг ашиглан нарийн төвөгтэй процессуудыг хялбаршуулах хүсэл эрмэлзэлтэй, технологид дуртай хүн юм. Технологийн салбарт арав гаруй жил ажилласан туршлагатай тэрээр Microsoft Excel, Outlook, мөн Google Sheets болон Docs дээр ур чадвараа дээшлүүлсэн. Майклын блог нь өөрийн мэдлэг, туршлагаа бусадтай хуваалцах, бүтээмж, үр ашгийг дээшлүүлэхэд хялбар зөвлөмж, зааварчилгаа өгөх зорилготой юм. Та туршлагатай мэргэжилтэн эсвэл анхлан суралцаж байгаа эсэхээс үл хамааран Майклын блог нь эдгээр чухал програм хангамжийн хэрэгслээс хамгийн их ашиг хүртэх талаар үнэ цэнэтэй ойлголт, практик зөвлөгөөг санал болгодог.