SelectionChange, bunun için Excel Nesne modelinde yerleşik olan olaydır. Kullanıcının istediği zaman istediği zaman ateş etmesini sağlar ...
Burada global değişkenlere yönelik itirazlarınızı anladığımdan emin değilim, Application.SelectionChange olayını kullanırsanız sadece 1'e ihtiyacınız olacaktır. . Ancak, Workbook sınıf kodunu (Workbook.SelectionChange olayı kapmak için) veya çalışma sayfası sınıf kodunu (Worksheet.SelectionChange) olayının arkasında tutmak için kullanmanız gerekmez. (Sorununuz VBA'daki "global değişken sıfırlama" problemi olmadığı sürece, bunun için tek bir çözüm var: her yerde hata işleniyor. İşlenmemiş hatalara izin vermeyin, bunun yerine bunları günlüğe kaydedin ve/veya bir hatayı "soft-report" olarak bildirin user (kullanıcı) kutusu.
Ayrıca, Çalışma Sayfası.Activate() ve Worksheet.Deactivate() olaylarını (veya Workbook sınıfındaki karşılığı) ve/veya Workbook.Activate ve Workbook.Deactivate öğelerini de yakalamanız gerekebilir () olayları, kullanıcının çalışma sayfalarını ve/veya çalışma kitaplarını değiştirdiğinde bilmesini sağlayın. Pencereyi etkinleştirme ve devre dışı bırakma etkinlikleri bu yaklaşımı tamamlamalıdır. Hepsi aynı kesin prosedürü arayabilirler, ancak hepsi aynı şeyi gösterir: Kullanıcı yapacak olursanız, kullanıcı “odağı” değiştirdi.
VBA'dan hoşlanmıyorsanız, btw, VB.NET veya C# kullanarak aynısını yapabilirsiniz.
[Düzenle: Dbb, kullanıcı seçili olan hücre içinde tıklattığında bir tıklama almamak üzere SelectionChange olayı hakkında çok iyi bir nokta oluşturur. Bunu almak gerekiyorsa, o zaman subclassing kullanmak gerekir.] tuzak amacıyla
Mükemmel, teşekkürler :) – haslo