Excel UDF teu tiasa dianggo: masalah sareng solusi

  • Bagikeun Ieu
Michael Brown

Dina artikel ieu, urang bakal ningali masalah anu mungkin anjeun hadapi nalika nganggo pungsi khusus dina buku kerja anjeun. Kuring bakal nyobian nunjukkeun ka anjeun naon anu nyababkeunana sareng kumaha gampangna aranjeunna tiasa direngsekeun.

Kieu anu bakal urang bahas:

    Tadi urang ngobrol ngeunaan naon a fungsi custom nyaeta, kumaha carana nyieun sarta ngagunakeun éta. Upami anjeun ngarasa anjeun kedah nga-refresh pangaweruh dasar ngeunaan UDF sateuacana, jeda sareng tingali tulisan kuring sateuacana.

    Naha Excel UDF henteu ngitung deui?

    Nalika anjeun ngalakukeun parobahan dina workbook Anjeun, Excel moal recalculate unggal sarta unggal rumus anjeun boga dinya. Ieu gé ngamutahirkeun hasil pikeun rumus nu numbu ka sél robah wungkul.

    Tapi ieu masalah fungsi Excel standar. Sedengkeun pikeun anu khusus, Excel henteu tiasa nga-validasi kodeu VBA sareng ngaidentipikasi sél-sél sanés anu ogé tiasa mangaruhan hasil tina fungsi khusus. Ku alatan éta, rumus khusus anjeun moal robih nalika anjeun ngarobih buku kerja.

    Pikeun ngalereskeun masalah, anjeun ngan ukur kedah nganggo pernyataan Application.Volatile . Pariksa bab salajengna pikeun neuleuman parentah hambalan-demi-hambalan ngeunaan cara nerapkeun eta.

    Volatile vs non-volatile fungsi custom

    Sacara standar, fungsi custom di Excel henteu volatile. Ieu ngandung harti yén UDF diitung ulang ngan lamun nilai salah sahiji sél eta nujul kana parobahan. Tapi lamun format sél, ngaran tinalembar kerja, nami file robah, teras moal aya parobahan dina UDF.

    Hayu urang gentos tina kecap kana conto. Salaku conto, anjeun kedah nyerat nami buku kerja anjeun dina sél. Jang ngalampahkeun ieu, anjeun nyieun pungsi custom:

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

    Ayeuna bayangkeun kasus di handap ieu. Anjeun nyerat rumus khusus =WorkbookName() kana sél sareng ngagaduhan nami file di dinya. Sakedapan, anjeun mutuskeun pikeun ngaganti nami file sareng disimpen kalayan nami anu sanés. Tapi nu katingali dina nilai dina sél tur tingal yen eta teu robah. Masih aya nami file lami anu henteu leres deui.

    Kusabab teu aya argumen dina pungsi ieu, fungsina henteu diitung deui (sanaos anjeun ngarobih nami buku kerja, tutup, teras buka deui. éta).

    Catetan. Pikeun ngitung deui sadaya fungsi dina file anjeun, anjeun tiasa nganggo potong kompas Ctrl + Alt + F9.

    Naha aya cara nu leuwih gampang? Pikeun nyieun rumus recalculating unggal waktos LKS robah, anjeun peryogi hiji garis tambahan kode. Tempelkeun potongan kode di handap ieu di awal fungsi anjeun:

    Application.Volatile

    Jadi, kode anjeun bakal siga kieu:

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

    Ayeuna UDF anjeun volatile, ku kituna éta bakal diitung deui sacara otomatis upami aya sél dina lembar kerja.geus diitung ulang atawa parobahan naon geus lumangsung dina workbook. Pas anjeun ngaganti ngaran koropakna, anjeun bakal langsung ningali apdet éta.

    Catetan. Punten émut yén seueur teuing fungsi anu teu stabil tiasa ngalambatkeun Excel anjeun. Barina ogé, aya loba teuing pungsi custom nu ngalakukeun itungan kompléks tur beroperasi dina rentang data badag terus.

    Ku alatan éta, kuring nyarankeun ngagunakeun volatility ngan dimana eta bener diperlukeun.

    Kunaon fungsi custom teu sadia

    Nalika anjeun ngasupkeun hurup mimiti ngaran pungsi custom, eta mucunghul dina daptar turun-handap gigireun sél input, kawas fungsi Excel standar.

    Tapi, ieu teu salawasna kajadian. Kasalahan naon anu tiasa nyababkeun kaayaan ieu?

    Upami anjeun gaduh Excel 2003-2007, maka UDF henteu pernah muncul dina daptar turun-handap. Di dinya anjeun ngan ukur tiasa ningali pungsi standar.

    Tapi sanaos anjeun nganggo vérsi Excel anu langkung énggal, aya kasalahan sanés anu anjeun teu kahaja.

    Nu katingali, pungsi khusus kedah aya dina modul VBA baku disebut modul. Sawaktos Anjeun nambahkeun modul anyar pikeun nulis kode fungsi, polder Modules otomatis dijieun dimana sakabeh modul ditulis.

    Tapi kadang aya kajadian nu modul anyar teu. keur dijieun. Dina layar salajengna anjeun tiasa ningali yén kode fungsi khusus aya dina modul "Microsoft Excel Objects" sarengThisWorkbook.

    Intina nyaeta anjeun teu bisa nempatkeun pungsi custom di wewengkon kode lembar kerja atawa workbook. Dina hal ieu, fungsina moal jalan. Leuwih ti éta, éta moal muncul dina daptar turun-handap fungsi. Ku alatan éta, kode kudu salawasna aya dina folder Modul .

    Teks pitulung fungsi custom Excel teu ditémbongkeun

    Masalah sejen bisa lumangsung nyaéta hint nu katingali nalika anjeun nempelkeun. hiji fungsi custom. Upami anjeun nganggo fungsi standar, anjeun bakal salawasna ningali tooltip pikeun fungsi sareng argumen na. Tapi kumaha upami UDF?

    Upami anjeun gaduh seueur fungsi khusus, anjeun bakal sesah pisan pikeun nginget itungan naon anu dilakukeun ku masing-masing. Éta bakal langkung hese pikeun nginget dalil mana anu dianggo. Jigana bakal jadi ide nu sae pikeun boga pedaran fungsi custom anjeun salaku panginget.

    Kanggo ieu, Abdi nyarankeun make metoda Application.MacroOptions . Éta bakal ngabantosan anjeun nunjukkeun déskripsi sanés ngan ukur fungsi tapi ogé unggal argumen na dina jandela Wizard Fungsi. Anjeun tiasa ningali jandela ieu nalika anjeun ngaklik tombol Fx dina bar rumus.

    Hayu urang tingali kumaha carana nambihan petunjuk sapertos kitu kana UDF anjeun. Dina artikel saméméhna kami kasampak di GetMaxBetween fungsi custom. Éta mendakan jumlah maksimum dina rentang anu ditangtukeun sareng nyandak tilu argumen: sauntuyan nilai numerik, sareng nilai maksimum sareng minimum pikeunmilarian.

    Ayeuna kami bakal nambihan pedaran pikeun fungsi khusus ieu. Jang ngalampahkeun ieu, jieun tur ngajalankeun paréntah Application.MacroOptions . Pikeun pungsi GetMaxBetween , anjeun tiasa ngajalankeun paréntah di handap ieu:

    Sub RegisterUDF () Dim strFuncName As String 'ngaran fungsi anu anjeun hoyong ngadaptarkeun Dim strDescr As String ' pedaran fungsi sorangan Taram strArgs () Salaku String 'deskripsi argumen fungsi ' Ngadaptar GetMaxBetween fungsi ReDim strArgs (1 ka 3) 'Jumlah argumen dina fungsi Anjeun strFuncName = "GetMaxBetween" strDescr = "Jumlah maksimum dina rentang dieusian" = strArgs (1) = "Rentang nilai numerik" strArgs (2) = "Wates interval handap" strArgs (3) = "Wates interval luhur" Application.MacroOptions Macro: = strFuncName, _ Description: = strDescr, _ ArgumentDescriptions: = strArgs, _ Category: = " My Custom Functions " End Sub

    or

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Katerangan: = "Jumlah maksimum dina rentang anu ditangtukeun" , _ Category: = "My Fungsi Kustom" , _ ArgumentDescriptions: = Array (_ "Rentang nilai numerik", _ "Bor interval handap der" , _ "Wates interval luhur") ) End Sub

    Variabel str FuncName nyaeta nami fungsi. strDescr - pedaran fungsi. Variabel strArgs ngandung pitunjuk pikeun tiap argumen.

    Anjeun tiasa heran naon argumen kaopat pikeunApplication.MacroOptions. Argumen opsional ieu dingaranan Kategori sarta nuduhkeun kelas pungsi Excel nu custom urang GetMaxBetween () bakal ditempatkeun di. ; Trig, Statistical, Logical, jsb Anjeun tiasa nangtukeun ngaran pikeun kategori anyar dimana anjeun bakal nempatkeun fungsi nu Anjeun jieun. Upami anjeun henteu nganggo argumen Kategori, maka fungsi khusus bakal otomatis disimpen dina kategori "Pamaké Ditetepkeun".

    Tempelkeun kodeu fungsi kana jandela modul:

    Lajeng klik tombol "Run". Paréntah bakal ngalakukeun sagala setélan pikeun ngagunakeun tombol Fx sareng fungsi GetMaxBetween() anjeun.

    Upami anjeun nyobian nyelapkeun pungsi kana sél nganggo Selapkeun Fungsi alat, anjeun bakal nempo yén aya fungsi GetMaxBetween anjeun dina kategori "Fungsi Kustom abdi":

    Anjeun ngan saukur tiasa mimiti ngetik nami fungsi kana sél sareng anjeun bakal ningali pungsi khusus anjeun dina daptar turun-handap fungsi anu kedah dipilih.

    Teras nelepon ka Wizard Fungsi. nganggo tombol Fx.

    Tip. Anjeun ogé tiasa nganggo kombinasi konci CRTL + A pikeun muka Wizard Fungsi.

    Dina jandela Function Wizard anjeun bakal nempo pedaran fungsi anjeun, kitu ogé pitunjuk pikeun argumen kahiji. Lamun nempatkeun kursor anjeun dinaargumen kadua atawa katilu, anjeun ogé bakal ningali pitunjuk pikeun aranjeunna.

    Upami anjeun hoyong ngarobih téks pitunjuk ieu, robih niléy tina strDescr sareng strArgs variabel dina kode RegisterUDF () . Teras jalankeun deui paréntah RegisterUDF () .

    Upami anjeun badé ngabatalkeun sadaya setélan anu dilakukeun sareng mupus pedaran fungsi, jalankeun kode ieu:

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

    Aya hiji deui cara pikeun meunangkeun hint mun anjeun ngasupkeun pungsi custom. Lebetkeun nami fungsi teras pencét Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Anjeun bakal ningali daptar sadaya argumen fungsi:

    Hanjakal, di dieu anjeun moal ningali katerangan fungsi sareng argumenna. Tapi upami nami-nami dalilna cukup informatif, janten aranjeunna tiasa ngabantosan ogé. Nanging, éta langkung saé tibatan nanaon :)

    Peryogikeun sakedik deui pikeun nyiptakeun intellisense pikeun UDF anu tiasa dianggo sapertos fungsi Excel standar. Hanjakalna, Microsoft henteu masihan pilihan naon waé. Hiji-hijina solusi anu sayogi ayeuna nyaéta extension Excel-DNA IntelliSense. Anjeun tiasa mendakan langkung seueur inpormasi dina situs wéb pamekar.

    Mudah-mudahan, pedoman ieu tiasa ngabantosan anjeun ngarengsekeun masalah nalika fungsi khusus anjeun henteu jalan atanapi henteu.damel sakumaha anu anjeun pikahoyong. Upami kitu, UDF anjeun masih gagal jalan, mangga jelaskeun masalah anjeun sacara akurat dina bagian Koméntar. Kami bakal nyobian ngartos sareng milarian solusi pikeun anjeun ;)

    Michael Brown mangrupakeun enthusiast téhnologi dedicated kalawan gairah pikeun nyederhanakeun prosés kompléks ngagunakeun parabot software. Kalayan langkung ti dasawarsa pangalaman dina industri téknologi, anjeunna parantos ngasah kaahlianna dina Microsoft Excel sareng Outlook, ogé Google Sheets sareng Docs. Blog Michael dikhususkeun pikeun ngabagi pangaweruh sareng kaahlianna ka batur, nyayogikeun tip sareng tutorial anu gampang pikeun ningkatkeun produktivitas sareng efisiensi. Naha anjeun profésional berpengalaman atanapi pamula, blog Michael nawiskeun wawasan anu berharga sareng naséhat praktis pikeun ngamangpaatkeun alat parangkat lunak penting ieu.