Excel'de VBA ile veri giriş formu (UserForm) tasarlama rehberi
Excel VBA ile UserForm tasarlamayı, denetimleri adlandırmayı, doğrulama ve kayıt kodunu yazmayı ve sık hataları örnek kodla öğrenin.
UserForm nedir, ne zaman gerekir?
UserForm, Excel'in içinde açılan özel bir pencere ya da iletişim kutusudur. Microsoft'un tanımıyla bir uygulamanın kullanıcı arayüzünün parçası olan bir pencere veya diyalog kutusudur; üzerine metin kutusu, açılır liste, onay kutusu ve düğme gibi denetimler yerleştirilir. Kullanıcı hücrelere doğrudan yazmak yerine bu pencereden veri girer, makro da girişi doğru yere yazar.
UserForm şu durumlarda işe yarar: aynı tabloya birçok kişi veri giriyorsa ve girilen değerlerin kurallara uyması gerekiyorsa; tablonun yapısını kullanıcıdan saklamak istiyorsanız; sürekli aynı alanları dolduran kayıt işlerinde hız istiyorsanız. Tek seferlik küçük bir iş için formun kendisi gereksiz yüktür; bu durumda hücre doğrulama kuralları yeterli olabilir.
Tasarıma başlamadan önce: alanlar ve kurallar
Formu çizmeden önce kağıt üzerinde şu soruları yanıtlayın: • Hangi alanlar var ve hangileri zorunlu? • Her alanın türü nedir: serbest metin, listeden seçim, tarih, sayı? • Hangi değerler reddedilmeli? Örneğin boş ad, geçersiz tarih ya da listede olmayan bölüm. • Kayıt nereye yazılacak ve kayıt sonrası form açık mı kalsın, kapansın mı?
Alan sayısını düşük tutun. Her fazladan alan, kullanıcının hata yapma ihtimalini artırır. Listeden seçilebilen değerler için serbest metin kutusu yerine açılır liste kullanmak yazım farklarını (aynı bölümün birkaç farklı yazılışı gibi) baştan engeller.
Formu oluşturma: adım adım
Visual Basic Düzenleyicisi'ni açın (Geliştirici sekmesindeki Kod grubundan Makrolar ve Düzenle yolu, ya da Alt+F11). Proje ağacında çalışma kitabınızın adına sağ tıklayıp Insert menüsünden UserForm'u seçerek boş bir form ekleyin. Yanında araç kutusu (Toolbox) açılır; buradan denetimleri formun üzerine sürükleyin.
Her denetimi seçip Özellikler penceresinden Name ve Caption değerlerini ayarlayın. Microsoft'un belgesinde belirtildiği gibi form başlığı Caption özelliğiyle verilir. Adlandırma düzeni önemlidir: metin kutuları için txt, açılır liste için cmb, düğme için btn ön eki kullanın; örneğin txtAd, cmbBolum, btnKaydet. Formun kendisine de frmKayit gibi anlamlı bir ad verin. Birkaç hafta sonra kodu açtığınızda hangi denetimin ne olduğunu ön ekten okursunuz.
Örnek bir kayıt akışı şöyledir: kullanıcı düğmeye basar, form açılır, bölümü listeden seçer, adı yazar, Kaydet'e basar ve satır tabloya eklenir; imleç yeniden ad alanına döner ve sıradaki kişi girilebilir. Bu akışın her adımı ayrı bir denetime ve ayrı bir kod satırına karşılık gelir.
Tab sırasını, kullanıcı klavyeyle gezerken alanlar mantıklı bir sırayla sıralansın diye bir gözden geçirin. Düğmelerden birini Enter ile tetiklenecek varsayılan düğme olarak işaretlemek de hız kazandırır.
Kodu yazma: açılış, doğrulama ve kayıt
Form açılırken çalışan Initialize olayı, listeleri doldurmak için doğru yerdir. Microsoft belgesi de bu olayın, form görüntülenmeden önce değişkenlerin ilk değerlerini vermek için kullanılabileceğini belirtir:
Private Sub UserForm_Initialize() cmbBolum.AddItem "Satış" cmbBolum.AddItem "Finans" cmbBolum.AddItem "Operasyon" End Sub
Kaydet düğmesinin kodu şu işleri yapar: girişleri doğrular, tabloda sıradaki boş satırı bulur, değerleri yazar.
Private Sub btnKaydet_Click() Dim ws As Worksheet Dim satir As Long If Trim(txtAd.Value) = "" Then MsgBox "Ad alanı boş olamaz." txtAd.SetFocus Exit Sub End If Set ws = ThisWorkbook.Worksheets("Kayitlar") satir = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1 ws.Cells(satir, "A").Value = txtAd.Value ws.Cells(satir, "B").Value = cmbBolum.Value ws.Cells(satir, "C").Value = Date txtAd.Value = "" txtAd.SetFocus End Sub
Formu bir sayfadaki düğmeden açmak için tek satır yeter: frmKayit.Show. Belgeye göre Show yöntemi formu görünür kılar, Hide yöntemi ise gizler.
Doğrulama ve kullanıcı dostu davranış
İyi bir form, kullanıcıya ne yanlış yaptığını söyler ve imleci tam o alana götürür. Yukarıdaki örnekte MsgBox ile uyarı verildikten sonra SetFocus çağrısı imleci hatalı alana taşır. Birden fazla alan varsa tüm hataları tek mesajda toplamak, kullanıcıyı peş peşe uyarı pencereleriyle yormaktan iyidir.
Tür doğrulaması için: sayı beklenen alanda IsNumeric ile kontrol edin, tarih beklenen alanda IsDate ile kontrol edin. Listeden seçim zorunluysa açılır listenin boş olup olmadığına bakın. Kayıt başarılıysa, bir sonraki kaydı hızla girebilmesi için alanları temizleyin ve imleci ilk alana koyun; kayıt sonrası formu kapatmak ise tek seferlik işlerde doğrudur.
Kullanıcı formu sağ üstteki kapat düğmesiyle kapatabilir. Bu durumda yarım kalan işlem olmaması için, veri yazma işlemini tek bir düğme eylemine bağlayın ve kapatma sırasında yazılmamış veri bırakmayın.
Sık yapılan hatalar
- Denetimleri varsayılan adlarıyla bırakmak: kod büyüdükçe hangi kutunun hangisi olduğu anlaşılmaz.
- Sabit satır numarası kullanmak: kayıt hep aynı satırın üzerine yazılır. Sıradaki boş satırı her kayıtta yeniden hesaplayın.
- Doğrulamayı atlamak: boş ya da hatalı kayıtlar tabloyu kirletir; sonradan temizlemek, baştan engellemekten pahalıdır.
- Çok alanlı tek ekran: alan sayısı çoğaldığında formu bölümlere ayırmak ya da başka bir forma geçmek kullanımı kolaylaştırır.
- Dosyayı makrosuz biçimde kaydetmek: form ve kod kaybolur. Makrolu çalışma kitabı biçimini kullanın.
Dağıtmadan önce formu hiç bilmeyen birine verip beklenmedik girişler yapmasını isteyin. Kullanıcı sizin düşünmediğiniz şeyleri mutlaka dener.
Bu becerinin Mindset programlarındaki yeri
Mindset'in Excel Makroları ve VBA Temelleri programında Kullanıcı Arayüzü Geliştirme modülü bu konuya ayrılmıştır; öncesinde VBA Diline Giriş ve Hücreler, Aralıklar ve Sayfalar ile Çalışma modülleri formun arkasındaki kodu kurmak için gereklidir. Program, veri girişini birden fazla kişiye dağıtan operasyon, insan kaynakları ve finans ekipleri için uygundur: form, tablonun yapısını koruyup girişleri standartlaştırır.
İlgili Mindset programı
Excel Makroları ve VBA Temelleri
Sık sorulan sorular
UserForm ile hücreye veri girişi arasındaki fark nedir?
Hücreye doğrudan yazarken kullanıcı tablonun yapısına, formüllere ve biçimlere dokunabilir. UserForm ise girişi tek bir pencerede toplar, kuralları kod ile denetler ve veriyi doğru satıra yazar. Çok kişinin ortak kullandığı tablolarda bu fark, veri kalitesini belirgin biçimde korur.
UserForm'u Excel'de nasıl açarım?
Formu bir makroya bağlayıp makroyu sayfadaki bir düğmeye atarsınız. Makronun içinde formun adı ve Show yöntemi yeter. Form adı, Visual Basic Düzenleyicisi'nde formun Name özelliğinde yazan değerdir. Makroyu sayfadaki bir şekle ya da düğmeye atayınca kullanıcı tek tıklamayla formu açar; kodu görmesi gerekmez.
Açılır listeyi sayfadaki bir aralıktan doldurabilir miyim?
Evet. Listeyi kodla tek tek eklemek yerine bir sayfadaki aralığı döngüyle okuyup AddItem ile ekleyebilirsiniz. Böylece liste değerlerini kod değiştirmeden sayfadan güncellersiniz, ekipte kod bilmeyen biri bile listeye yeni seçenek ekleyebilir.
Form açıkken Excel'in diğer kısımlarını kullanabilir miyim?
Varsayılan olarak form modal açılır, yani siz formu kapatana kadar çalışma sayfasına dokunamazsınız. Modsuz açmak için Show yöntemine modsuz seçeneği verilir. Bu durumda form açıkken sayfada gezinebilirsiniz; ancak kod, kullanıcının sayfada ne yaptığını hesaba katmalıdır.
UserForm içeren dosyayı başkalarına göndermek güvenli mi?
Dosya makro içerdiği için Excel güvenlik uyarısı gösterir. Alıcının dosyayı tanıdığı bir kaynaktan aldığını bilmesi gerekir. Kurumsal ortamda makrolu dosyaların nasıl dağıtılacağı BT güvenlik politikalarına bağlıdır; dosyayı ortak bir klasörde tutup yalnızca güvenilen konuma izin vermek yaygın bir yoldur.
İlgili rehberler
Kategori: Veri Analitiği ve İş Zekası