Excel VBA Compile melempar " Tipe yang ditentukan pengguna tidak didefinisikan &" kesalahan tetapi tidak pergi ke baris kode yang menyinggung

Gejala

Ini adalah gejala khusus saat mengkompilasi proyek Excel VBA. Kesalahan berikut terjadi:

Tipe yang ditentukan pengguna tidak didefinisikan

Namun, kode yang menghasilkan kesalahan ini tidak disorot oleh kompiler sehingga saya tidak dapat mengidentifikasi masalahnya.

Apa yang sudah saya ketahui dan sudah saya coba

Ini adalah "User-defined type not defined" error yang pernah saya lihat sebelumnya dengan masalah sederhana seperti menamai sesuatu As Strig bukan As String. Namun, kesalahan khusus ini hanya muncul selama opsi menu Debug > Compile VBAProject dan ketika kotak pesan kesalahan muncul, itu tidak menyoroti baris kode yang terjadi kesalahan.

Setelah banyak penelitian, saya menemukan bahwa bug ini dapat dikaitkan dengan referensi yang hilang dan saya telah mengesampingkan hal ini karena saya telah menyertakan semua referensi dan objek Toolbox yang diperlukan.

Untuk memastikan saya tidak kehilangan pernyataan Dim yang jelas hilang, saya telah menambahkan Option Explicit ke semua halaman kode (termasuk formulir) untuk memastikan tidak ada yang hilang. Kesalahan masih muncul ketika menjalankan kompilasi.

Ada juga bug yang diketahui ini yang menyatakan bahwa masalah ini telah diketahui terjadi karena proyek VB6 menggunakan kompatibilitas biner:

Matikan Kompatibilitas Biner dan kompilasi proyek. Visual Basic akan menyorot baris kode yang berisi User Defined Type yang tidak didefinisikan. Setelah menyelesaikan masalah, Binary Compatibility dapat dihidupkan kembali.

Saya menemukan artikel ini melalui Tanya Jawab ini, namun, saya tidak dapat menemukan opsi ini di editor VBA Excel standar.

Bantu selamatkan kewarasan saya dan orang lain!

Saya tahu dari pencarian Google dan pertanyaan-pertanyaan lain bahwa saya bukan satu-satunya yang mengalami masalah ini.

Saya telah mencoba memeriksa kode secara manual tetapi ada terlalu banyak baris untuk melakukannya.

Apakah ada cara untuk mematikan Kompatibilitas Biner dalam proyek Excel VBA? Bagaimana orang menemukan baris kode yang menyinggung ini jika mereka tidak dapat men-debug apa yang perlu mereka ubah? Bantuan apa pun akan sangat menyenangkan!

Terima kasih sebelumnya.

Edit: Saya telah menemukan baris kode yang menyinggung dan masalah khusus saya telah terpecahkan Masalahnya masih ada di sini setelah menghapus baris tertentu - itu adalah nama kontrol yang salah eja pada formulir yang dirujuk dalam kodenya. Ini masih belum menyelesaikan masalah khusus tentang bagaimana Anda akan menemukan kode yang menyinggung ini adalah masalahnya. Apakah kita dapat menemukan cara yang baik untuk menemukan kode yang menyinggung ketika bug ini terjadi sehingga orang lain di masa depan dapat menghindari penderitaan ini?

Solusi saya bukanlah kabar baik, tetapi paling tidak, solusi ini akan berhasil.

Kasus saya adalah: Saya memiliki .xlsm dari rekan kerja. 1) Saya membukanya dan mengklik tombol: berfungsi dengan baik. 2) Saya menyimpan file, menutup excel, membuka file lagi: sekarang tidak berfungsi lagi. Kesimpulannya adalah: kodenya OK, tetapi excel tidak dapat mengelola referensi dengan benar. (Saya sudah mencoba menghapus dan menambahkan kembali referensi tanpa berhasil)

Jadi solusinya adalah mendeklarasikan setiap objek yang direferensikan sebagai Varian dan gunakan CreateObject("Foo.Bar") bukan New Foo.Bar.

Sebagai contoh:

Dim objXML As MSXML2.DOMDocument
Set objXML = New MSXML2.DOMDocument

Digantikan oleh:

Dim objXML As Variant
Set objXML = CreateObject("MSXML2.DOMDocument")
Komentar (1)

Karena kedengarannya Anda sudah mencoba berbagai solusi potensial yang berbeda, Anda mungkin harus melakukan ini dengan cara metodis yang panjang sekarang.

Buat buku kerja kosong baru. Kemudian sepotong demi sepotong salin buku kerja lama Anda ke dalamnya. Tambahkan referensi, tulis sedikit kode untuk mengujinya. Pastikan itu mengkompilasi, pastikan itu berjalan. Tambahkan sub atau fungsi, sekali lagi, tulis sedikit sub tes untuk menjalankannya, juga pastikan sudah terkompilasi. Ulangi proses ini secara perlahan-lahan menambahkan dan menguji semuanya.

Anda dapat mempercepat proses ini dengan mencoba potongan yang lebih besar terlebih dahulu, kemudian ketika Anda menemukan satu yang memicu masalah, hapus dan pecahkan menjadi bagian yang lebih kecil untuk pengujian.

Entah Anda akan menemukan pelaku, atau Anda akan memiliki buku kerja baru yang secara ajaib tidak memiliki masalah. Yang terakhir ini akan disebabkan oleh semacam korupsi tersembunyi di file buku kerja, mungkin di bagian vbproject biner.

Selamat datang di dunia debugging tanpa debugger atau alat bantu lainnya untuk melakukan pekerjaan berat untuk Anda!

Komentar (0)

Pengikatan Terlambat

Kesalahan ini dapat terjadi karena referensi yang hilang. Misalnya ketika mengubah dari early binding ke late binding, dengan menghilangkan referensi, beberapa kode mungkin tetap merujuk pada tipe data yang spesifik pada referensi yang dihilangkan.

Coba sertakan referensi untuk melihat apakah masalahnya hilang.

Mungkin kesalahan tersebut bukan kesalahan kompiler tetapi kesalahan linker, sehingga baris spesifiknya tidak diketahui. Memalukan bagi Microsoft!

Komentar (1)