Doğrulamayı VBA'ya Yapıştırırken Oluşan Hata - Excel İpuçları

İçindekiler

Microsoft Excel için VBA ve Makrolar'ın ilk birkaç bölümünü okuduysanız, Excel makro kaydedicinin kullanılabilir kod kaydetme konusunda en büyük işi yapmadığından şikayet ettiğimi biliyorsunuzdur. Genellikle, kod iyi çalışır, ancak farklı boyuttaki veri kümeleri için o kadar kullanışlı olmayabilecek şekilde kaydedilir. Kod bugün iyi çalışabilir, ancak yarın çalışmayabilir.

Makro kaydedicinin gerçekten çalışmayan kodu kaydettiği gerçekten garip bir sorunla karşılaştım. Doğrulamayı bir hücreden bir hücre aralığına kopyalamaya çalışan bir makro yazıyordum. Excel 2002'de bu kod aşağıdaki gibiydi:

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

Bu kod Excel 2002'de iyi çalıştı, ancak Excel 2000 ile bir istemcinin makinesinde başarısız oldu. Ofisteki eski bilgisayarlardan birinde hala Excel 2000 var, bu yüzden kodu orada denedim. Sorun xlPasteValidation ile oldu. Ne zaman olağandışı bir şeyle karşılaşsam, makro kaydedicinin kodu nasıl kaydedeceğini görmek için makro kaydediciyi başlatırım. E5'te doğrulamayı kurdum, makro kaydediciyi açtım, E5'i kopyaladım ve Özel Yapıştır - Doğrulama kullandım. Makro kaydediciyi durdurduktan sonra, Excel 2000'in sabiti şu şekilde kaydettiğini fark ettim:

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

Bu yüzden istemci uygulamasına gittim, kodu xlDataValidation olarak değiştirdim ve tekrar çalıştırdım. Garip bir şekilde, aynı hatayı yarattı!

Excel 2000 makro kaydedicinin aslında bir hatası olduğu ortaya çıktı. XlDataValidation sabitini kaydedecek, ancak makro yorumlayıcısı ne xlDataValidation'ı ne de xlPasteValidation'ı tanımayacaktır. Excel 2000'deki Excel VBA Yardımı, yalnızca doğrulamaları yapıştırmanın bir yolu yokmuş gibi görünür.

Bunun işe yaraması için xlPasteValidation'ın altında yatan değeri keşfetmeniz gerekir. XL2002 makinemde VBA Editörüne gittim. Hemen pencereyi açmak için Ctrl + G tuşlarına basın ve bunu hemen bölmeye yazın:

Print xlPasteValidation

Enter tuşuna basın ve Excel 2002 size xlPasteValidation'ın "6" demenin kolay bir yolu olduğunu söyleyecektir. Excel 2000 makinesine geri döndüğümde, bu kodu denedim:

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

Neyse ki işe yarıyor. Aslında sabit yerine temel değeri kullanmak zorunda kalırsınız. Programın koda bakan bir sonraki kişi için okumasını gerçekten zorlaştırdığı için kitapta bu uygulamaya karşı uyarıyorum. Bu özel durumda, gerçekten başka seçeneğiniz yok. Neden bu şekilde kodladığınızı açıklayan bir yorum ekleyin:

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

Yani - bugünkü küçük ders, Excel 2000'de özel doğrulamanın nasıl yapıştırılacağına dair çok özel bir sorundur, ancak daha büyük ders, Excel VBA'da garip bir şey olduğunda ne olduğunu anlamak için gereken dedektiflik çalışmasıdır.

Ilginç makaleler...