Excel UDF tidak berfungsi: masalah dan solusi

  • Bagikan Ini
Michael Brown

Dalam artikel ini, kita akan melihat masalah yang mungkin Anda hadapi saat menggunakan fungsi kustom di buku kerja Anda. Saya akan mencoba menunjukkan kepada Anda apa yang menyebabkannya dan betapa mudahnya mereka dapat diselesaikan.

Inilah yang akan kita bicarakan:

    Sebelumnya kita telah membahas tentang apa itu fungsi kustom, bagaimana cara membuat dan menggunakannya. Jika Anda merasa perlu menyegarkan kembali pengetahuan dasar UDF sebelumnya, ambil jeda dan lihat artikel saya sebelumnya.

    Mengapa Excel UDF tidak menghitung ulang?

    Ketika Anda membuat perubahan apa pun di buku kerja Anda, Excel tidak akan menghitung ulang setiap rumus yang Anda miliki di sana. Ini akan memperbarui hasil untuk rumus-rumus yang ditautkan ke sel yang diubah saja.

    Tetapi ini menyangkut fungsi Excel standar. Sedangkan untuk yang kustom, Excel tidak dapat memvalidasi kode VBA dan mengidentifikasi sel lain yang juga dapat memengaruhi hasil fungsi kustom. Oleh karena itu, rumus kustom Anda mungkin tidak berubah saat Anda membuat perubahan pada buku kerja.

    Untuk memperbaiki masalah ini, Anda hanya perlu menggunakan Aplikasi.Volatile Lihat bab berikutnya untuk mempelajari petunjuk langkah demi langkah tentang cara menerapkannya.

    Fungsi kustom yang mudah menguap vs tidak mudah menguap

    Secara default, fungsi kustom di Excel tidak mudah berubah. Ini berarti UDF dihitung ulang hanya jika nilai salah satu sel yang dirujuknya berubah. Tetapi jika format sel, nama lembar kerja, nama file berubah, maka tidak ada perubahan yang akan terjadi pada UDF.

    Misalnya, Anda perlu menuliskan nama buku kerja Anda dalam sel. Untuk melakukan ini, Anda membuat fungsi kustom:

    Fungsi Nama Buku Kerja () Sebagai String Nama Buku Kerja = ThisWorkbook.Name End Function

    Sekarang bayangkan kasus berikut ini. Anda menulis rumus kustom =Nama Buku Kerja() ke dalam sel dan mendapatkan nama file di sana. Beberapa saat kemudian, Anda memutuskan untuk mengganti nama file dan menyimpannya dengan nama yang berbeda. Tetapi Anda melihat nilai dalam sel dan melihat bahwa itu tidak berubah. Masih ada nama file lama yang tidak lagi benar.

    Karena tidak ada argumen dalam fungsi ini, fungsi tidak dihitung ulang (bahkan jika Anda mengubah nama buku kerja, menutupnya, dan kemudian membukanya kembali).

    Catatan. Untuk menghitung ulang semua fungsi dalam file anda, anda bisa menggunakan shortcut Ctrl + Alt + F9.

    Apakah ada cara yang lebih mudah? Untuk membuat rumus menghitung ulang setiap kali lembar kerja berubah, Anda memerlukan baris kode tambahan. Tempelkan potongan kode berikut di awal fungsi Anda:

    Aplikasi.Volatile

    Jadi, kode Anda akan terlihat seperti ini:

    Fungsi Nama Buku Kerja () Sebagai String Aplikasi.Volatile Nama Buku Kerja = ThisWorkbook.Name End Function

    Sekarang UDFmu bersifat volatile, sehingga akan dihitung ulang secara otomatis jika ada cell di lembar kerja yang telah dihitung ulang atau ada perubahan yang terjadi di workbooknya. Segera setelah kamu mengubah nama file tersebut, kamu akan segera melihat update tersebut.

    Catatan Harap diingat bahwa terlalu banyak fungsi yang mudah menguap dapat memperlambat Excel Anda. Lagi pula, ada terlalu banyak fungsi kustom yang melakukan penghitungan kompleks dan beroperasi pada rentang data yang besar secara terus menerus.

    Oleh karena itu, saya sarankan untuk menggunakan volatilitas hanya jika benar-benar diperlukan.

    Mengapa fungsi kustom tidak tersedia

    Saat Anda memasukkan huruf pertama dari nama fungsi kustom, itu muncul di daftar drop-down di sebelah sel input, seperti fungsi Excel standar.

    Namun demikian, hal ini tidak selalu terjadi. Kesalahan apa yang bisa menyebabkan situasi ini?

    Jika Anda memiliki Excel 2003-2007, maka UDF tidak pernah muncul di daftar dropdown. Di sana Anda hanya dapat melihat fungsi standar.

    Tetapi bahkan jika Anda menggunakan versi Excel yang lebih baru, ada kesalahan lain yang mungkin Anda buat secara tidak sengaja.

    Anda lihat, fungsi kustom harus dalam modul VBA standar yang disebut Modul. Saat Anda menambahkan modul baru untuk menulis kode fungsi, folder Modul secara otomatis dibuat di mana semua modul ditulis.

    Tetapi terkadang terjadi bahwa modul baru tidak dibuat. Pada tangkapan layar berikutnya Anda dapat melihat bahwa kode fungsi kustom ada di modul "Microsoft Excel Objects" bersama dengan ThisWorkbook.

    Intinya adalah Anda tidak dapat menempatkan fungsi kustom di area kode lembar kerja atau buku kerja. Dalam kasus ini, fungsi tidak akan berfungsi. Selain itu, itu tidak akan muncul di daftar dropdown fungsi. Oleh karena itu, kode harus selalu berada di folder Modul .

    Teks bantuan fungsi kustom Excel tidak ditampilkan

    Masalah lain yang mungkin terjadi adalah petunjuk yang Anda lihat ketika Anda menempelkan fungsi kustom. Jika Anda menggunakan fungsi standar, Anda akan selalu melihat tooltip untuk fungsi dan argumennya. Tapi bagaimana dengan UDF?

    Jika Anda memiliki banyak fungsi kustom, akan sangat sulit bagi Anda untuk mengingat perhitungan apa yang dilakukan masing-masing fungsi tersebut. Akan lebih sulit lagi untuk mengingat argumen mana yang akan digunakan. Saya pikir akan lebih baik untuk memiliki deskripsi fungsi kustom Anda sebagai pengingat.

    Untuk ini, saya sarankan menggunakan Aplikasi.MacroOptions Ini akan membantu Anda menampilkan deskripsi tidak hanya fungsi tetapi juga setiap argumennya di jendela Function Wizard. Anda melihat jendela ini saat Anda mengklik tombol Fx di bilah rumus.

    Mari kita lihat cara menambahkan petunjuk seperti itu ke UDF Anda. Di artikel sebelumnya, kita melihat fungsi kustom GetMaxBetween. Ini menemukan angka maksimum dalam kisaran yang ditentukan dan mengambil tiga argumen: kisaran nilai numerik, dan nilai maksimum dan minimum untuk dicari.

    Sekarang kita akan menambahkan deskripsi untuk fungsi kustom ini. Untuk melakukan ini, buat dan jalankan fungsi Aplikasi.MacroOptions perintah. GetMaxBetween Anda bisa menjalankan perintah berikut ini:

    Sub RegisterUDF () Dim strFuncName As String 'nama fungsi yang ingin Anda daftarkan Dim strDescr As String 'deskripsi dari fungsi itu sendiri Dim strArgs () As String 'deskripsi argumen fungsi ' Daftarkan fungsi GetMaxBetween ReDim strArgs (1 To 3) 'Jumlah argumen dalam fungsi Anda strFuncName = "GetMaxBetween" strDescr = "Jumlah maksimum dalam rentang yang ditentukan" strArgs (1) ="Rentang nilai numerik" strArgs (2) = "Batas interval bawah" strArgs (3) = "Batas interval atas" Application.MacroOptions Macro: = strFuncName, _ Description: = strDescr, _ ArgumentDescriptions: = strArgs, _ Category: = "My Custom Functions" End Sub

    atau

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "Angka maksimum dalam rentang yang ditentukan" , _ Category: = "My Custom Functions" , _ ArgumentDescriptions: = Array (_ "Rentang nilai numerik" , _ "Batas interval bawah" , _ "Batas interval atas" ) End Sub

    Variabel str FuncName adalah nama fungsi. strDescr - deskripsi fungsi. strArgs variabel berisi petunjuk untuk setiap argumen.

    Anda mungkin bertanya-tanya apa argumen keempat untuk Application.MacroOptions. Argumen opsional ini bernama Kategori dan mengindikasikan kelas fungsi Excel yang menjadi custom kita GetMaxBetween () Anda bisa menamainya sesuai dengan salah satu kategori yang sudah ada: Math & Trig, Statistical, Logical, dsb. Anda bisa menentukan nama untuk kategori baru di mana Anda akan menempatkan fungsi-fungsi yang Anda buat. Jika Anda tidak menggunakan argumen Category (Kategori), maka fungsi kustom akan secara otomatis ditempatkan dalam kategori "User Defined" (Ditentukan Pengguna).

    Tempelkan kode fungsi ke dalam jendela modul:

    Kemudian klik pada tombol "Run". Perintah ini akan melakukan semua pengaturan untuk menggunakan Fx dengan tombol GetMaxBetween() fungsi.

    Jika Anda mencoba menyisipkan fungsi ke dalam sel menggunakan perintah Fungsi Sisipkan alat, Anda akan melihat bahwa ada GetMaxBetween berada dalam kategori "My Custom Functions" (Fungsi Kustom Saya):

    Anda cukup mulai mengetikkan nama fungsi ke dalam sel dan Anda akan melihat fungsi kustom Anda dalam daftar dropdown fungsi untuk dipilih.

    Kemudian panggil Wisaya Fungsi dengan tombol Fx.

    Tip. Anda juga dapat menggunakan kombinasi tombol CRTL + A untuk membuka Function Wizard.

    Dalam Wisaya Fungsi Anda akan melihat deskripsi fungsi Anda, serta petunjuk untuk argumen pertama. Jika Anda menempatkan kursor di atas argumen kedua atau ketiga, Anda juga akan melihat petunjuk untuk mereka.

    Jika Anda ingin mengubah teks petunjuk ini, ubah nilai dari strDescr dan strArgs variabel di dalam RegisterUDF () Kemudian jalankan kode RegisterUDF () perintah lagi.

    Jika Anda ingin membatalkan semua pengaturan yang dibuat dan menghapus deskripsi fungsi, jalankan kode ini:

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

    Ada satu cara lagi untuk mendapatkan petunjuk ketika Anda memasukkan fungsi kustom. Masukkan nama fungsi dan kemudian tekan Ctrl + Shift + A :

    =DapatkanMaxBetween( + Ctrl + Shift + A

    Anda akan melihat daftar semua argumen fungsi:

    Sayangnya, di sini Anda tidak akan melihat deskripsi fungsi dan argumennya. Tetapi jika nama-nama argumennya cukup informatif, jadi mungkin akan membantu juga. Namun, itu lebih baik daripada tidak sama sekali :)

    Perlu sedikit kerja keras untuk membuat intellisense untuk UDF yang bekerja seperti fungsi Excel standar. Sayangnya, Microsoft tidak menyediakan opsi apa pun. Satu-satunya solusi yang tersedia saat ini adalah ekstensi Excel-DNA IntelliSense. Anda dapat menemukan informasi lebih lanjut di situs web pengembang.

    Semoga panduan ini dapat membantu Anda menyelesaikan masalah ketika fungsi kustom Anda tidak berfungsi atau tidak berfungsi seperti yang Anda inginkan. Namun, jika UDF Anda masih gagal berfungsi, harap jelaskan masalah Anda secara akurat di bagian Komentar. Kami akan mencoba mencari tahu dan menemukan solusinya untuk Anda;)

    Michael Brown adalah penggemar teknologi berdedikasi dengan hasrat untuk menyederhanakan proses kompleks menggunakan perangkat lunak. Dengan pengalaman lebih dari satu dekade di industri teknologi, dia telah mengasah keahliannya di Microsoft Excel dan Outlook, serta Google Spreadsheet dan Dokumen. Blog Michael didedikasikan untuk berbagi pengetahuan dan keahliannya dengan orang lain, memberikan tip dan tutorial yang mudah diikuti untuk meningkatkan produktivitas dan efisiensi. Apakah Anda seorang profesional berpengalaman atau pemula, blog Michael menawarkan wawasan berharga dan saran praktis untuk mendapatkan hasil maksimal dari perangkat lunak penting ini.