Bug Saat Menempelkan Validasi di VBA - Tips Excel

Daftar Isi

Jika Anda telah membaca beberapa bab pertama dari VBA & Makro untuk Microsoft Excel, Anda tahu bahwa saya mengeluh bahwa perekam makro Excel tidak melakukan pekerjaan terbaik untuk merekam kode yang dapat digunakan. Biasanya, kode berfungsi dengan baik, tetapi direkam sedemikian rupa sehingga mungkin tidak berguna untuk kumpulan data ukuran yang berbeda. Kode tersebut mungkin berfungsi dengan baik hari ini, tetapi tidak besok.

Saya mengalami masalah yang sangat aneh di mana perekam makro sebenarnya merekam kode yang tidak berfungsi. Saya sedang menulis makro yang mencoba menyalin validasi dari satu sel ke berbagai sel. Di Excel 2002, kode ini adalah sebagai berikut:

Range(“E5”).Copy Range(“E6:E12”).PasteSpecial Paste:=xlPasteValidation

Kode ini bekerja dengan baik di Excel 2002, tetapi gagal pada mesin klien dengan Excel 2000. Salah satu komputer lama di kantor masih memiliki Excel 2000, jadi saya mencoba kode di sana. Masalahnya ada pada xlPasteValidation. Setiap kali saya mengalami sesuatu yang tidak biasa, saya memulai perekam makro untuk melihat bagaimana perekam makro akan merekam kode. Saya mengatur validasi di E5, menyalakan perekam makro, menyalin E5 dan menggunakan Tempel Spesial - Validasi. Setelah menghentikan perekam makro, saya mencatat bahwa Excel 2000 merekam konstanta sebagai:

Range(“E6:E12”).PasteSpecial Paste:=xlDataValidation

Jadi, saya pergi ke aplikasi klien, mengubah kodenya menjadi xlDataValidation dan menjalankannya lagi. Anehnya, itu menghasilkan kesalahan yang sama!

Ternyata perekam makro Excel 2000 sebenarnya memiliki bug. Ini akan merekam konstanta xlDataValidation, tetapi interpreter makro tidak akan mengenali xlDataValidation maupun xlPasteValidation. Bantuan VBA Excel di Excel 2000 berpura-pura tidak ada cara untuk menempelkan validasi saja.

Untuk membuat ini berfungsi, Anda perlu menemukan nilai yang mendasari xlPasteValidation. Di mesin XL2002 saya, saya pergi ke Editor VBA. Ketik Ctrl + G untuk membuka jendela langsung dan ketik ini di panel langsung:

Print xlPasteValidation

Tekan enter dan Excel 2002 akan memberitahu Anda bahwa xlPasteValidation adalah cara bersahabat untuk mengatakan "6". Kembali ke mesin Excel 2000, saya mencoba kode ini:

Range(“E6:E12”).PasteSpecial Paste:=6

Untungnya, ini berhasil. Anda sebenarnya dipaksa untuk menggunakan nilai yang mendasarinya, bukan konstanta. Saya memperingatkan praktik ini di buku karena membuat program sangat sulit dibaca untuk orang berikutnya yang melihat kode. Dalam kasus khusus ini, Anda benar-benar tidak punya pilihan. Tambahkan komentar yang menjelaskan mengapa Anda membuat kode seperti ini:

‘Bug in XL2000; need to use “6” instead of the constant Range(“E6:E12”).PasteSpecial Paste:=6

Jadi - pelajaran kecil hari ini adalah masalah yang sangat spesifik tentang cara menempelkan validasi khusus di Excel 2000, tetapi pelajaran yang lebih besar adalah pekerjaan detektif yang diperlukan untuk mencari tahu apa yang terjadi ketika sesuatu yang aneh terjadi di Excel VBA.

Artikel yang menarik...