Bug Semasa Membuat Pengesahan di VBA - Petua Excel

Isi kandungan

Sekiranya anda membaca beberapa bab pertama VBA & Makro untuk Microsoft Excel, anda tahu bahawa saya mengadu bahawa perakam makro Excel tidak melakukan tugas terbaik untuk merekodkan kod yang boleh digunakan. Biasanya, kod berfungsi dengan baik, tetapi ia direkodkan sedemikian rupa sehingga tidak semestinya berguna untuk set data ukuran yang berbeza. Kodnya mungkin berfungsi dengan baik hari ini, tetapi tidak esok.

Saya menghadapi masalah yang sangat pelik di mana perakam makro sebenarnya merekodkan kod yang tidak berfungsi. Saya sedang menulis makro yang cuba menyalin pengesahan dari satu sel ke pelbagai sel. Dalam Excel 2002, kod ini adalah seperti berikut:

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

Kod ini berfungsi dengan baik di Excel 2002, tetapi gagal di mesin pelanggan dengan Excel 2000. Salah satu komputer lama di pejabat masih mempunyai Excel 2000, jadi saya mencuba kod di sana. Masalahnya adalah dengan xlPasteValidation. Setiap kali saya menghadapi sesuatu yang tidak biasa, saya memulakan perakam makro untuk melihat bagaimana perakam makro akan merekodkan kod tersebut. Saya menetapkan pengesahan di E5, menghidupkan perakam makro, menyalin E5 dan menggunakan Tempel Khas - Pengesahan. Setelah menghentikan perakam makro, saya perhatikan bahawa Excel 2000 mencatatkan pemalar sebagai:

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

Oleh itu, saya pergi ke aplikasi pelanggan, menukar kod ke xlDataValidation dan menjalankannya lagi. Anehnya, ia menghasilkan kesalahan yang sama!

Ternyata perakam makro Excel 2000 sebenarnya mempunyai pepijat. Ia akan merakam pemalar xlDataValidation, tetapi jurubahasa makro tidak akan mengenali xlDataValidation atau xlPasteValidation. Bantuan VBA Excel di Excel 2000 berpura-pura seolah-olah tidak ada cara untuk menampal hanya pengesahan.

Untuk membuat ini berfungsi, anda perlu mengetahui nilai asas xlPasteValidation. Pada mesin XL2002 saya, saya pergi ke Editor VBA. Ketik Ctrl + G untuk membuka tetingkap segera dan ketik ini di panel segera:

Print xlPasteValidation

Tekan enter dan Excel 2002 akan memberitahu anda bahawa xlPasteValidation adalah cara yang mesra untuk mengatakan "6". Kembali pada mesin Excel 2000, saya mencuba kod ini:

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

Nasib baik, ia berfungsi. Anda sebenarnya terpaksa menggunakan nilai asas dan bukannya pemalar. Saya memberi amaran terhadap amalan ini dalam buku ini kerana program ini menjadikannya sukar dibaca untuk orang seterusnya yang melihat kodnya. Dalam kes ini, anda sebenarnya tidak mempunyai pilihan. Tambahkan komen yang menerangkan mengapa anda mengkodkannya dengan cara 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 menampal pengesahan khas di Excel 2000, tetapi pelajaran yang lebih besar adalah kerja detektif yang diperlukan untuk mengetahui apa yang sedang berlaku ketika sesuatu yang aneh berlaku di Excel VBA.

Artikel menarik...