Ünite 6: Kullanıcı Formları Oluşturma

Giriş

Kullanıcıların önceden belirlenmiş bir formatta işlem yapabilmesi için Excel VBA yazılımında formlar tasarlanabilir. Böylece kullanıcılar Excel hücreleri yerine tasarlanan formları kullanır. Bu durum fonksiyon ve yordamların tetiklenmesinde ve verilerin girişinde kolaylık sağlar.

Kullanıcı formlarında özellikler penceresi kullanılarak formun görünümü düzenlenebilir. Düzenlemeler ile kullanıcının ihtiyacına göre tasarımlar hazırlanır ve görsel uyum sağlanabilir. Görsel tasarımın yanında formların davranışları da özellikler penceresinden ayarlanabilir. Örneğin bir butonun tıklandığında tetikleyeceği fonksiyon veya hangi durumda hangi yordamın tetikleneceği davranış kategorisindeki öğeler ile ayarlanabilir. Ayrıca açılan pencerelerin kaynağının belirlenmesi vb. işlemlerde de form özledikleri kullanılır.

Kullanıcı Formları

Kullanıcı tarafından VBA yazılımında veri girişi için Excel hücreleri dışında önceden tasarlanmış formlar da kullanılabilmektedir. Kullanıcı formal bir yapıda verilerin girilmesini istiyor ise form tasarlayabilir. Kullanıcı tasarlanan form ile verileri Excel sayfalarından alabilir veya VBA yazılımında fonksiyonların ürettiği sonuçları Excel hücreleri ve/veya kullanıcı formlarına yazdırılabilir. Kullanıcı formu eklemek için öncelikle Excel sayfasında Geliştirici sekmesindeki Visual Basic butonuna tıklanarak VBA yazılım platformuna geçmelidir. S:109, Şekil 6.1’de görüldüğü gibi Insert sekmesine tıklandığında menü açılacaktır. Açılan menü içerisinden UserForm seçeneğine tıklanır. UserForm seçeneğine tıklandığında VBA kullanıcısının önüne S:110, Şekil 6.2’de görülen ekran gelir. Şekil 6.2’de kullanıcı tarafından oluşturulan VBA projesi Project penceresinde görülmektedir (1). Project penceresinde Forms klasörü ve içerisinde yeni bir kullanıcı formu oluşmuştur (2). Kullanıcı formunun tasarımının yapılabilmesi için VBA yazılımı; UserForm (3), Toolbox (4) ve Properties (5) pencerelerini varsayılan olarak açar.

Kullanıcı Formu Özellikleri

Kullanıcı formunun tasarım aşamasında görsel düzenlemeler yapılabilmesi için kullanıcı formu özellikleri (Properties) penceresi kullanılır. S:110, Şekil 6.3’te görüldüğü gibi kullanıcı formu özellikleri penceresi içerisinde kontrol nesnelerinin özellik öğeleri yer alır. Kullanıcı formu kontrollerinin özellik öğeleri, kullanım kolaylığı açısından alfabetik (1) veya sınıflandırılmış (2) şekilde görüntülenebilir. Alfabetik ve sınıflandırılmış özellik öğeleri aynı içeriğe sahiptir. Fakat pencere içerisindeki öğelerin sıralaması birbirlerinden farklıdır.

Kullanıcı formunda yer alan özelliklerin sınıflandırılmış içeriğinde ilk olarak görünüm (appearance) kategorisi yer alır. Kullanılan kontrollerin özelliklerine göre görünüm kategorisindeki öğeler değişir. Görünüm kategorisinin içerdiği sık kullanılan öğeler ve kullanım yöntemleri S:111, Tablo 6.1’de görüldüğü gibidir.

Kullanıcı formunda yer alan özelliklerin sınıflandırılmış içeriğinin ikincisi Davranış (Behavior) kategorisidir. VBA form ve kontrollerinin çeşitli koşullar altında nasıl bir davranış sergileyeceği davranış kategorisi altında yer alan öğeler ile belirlenir. Tab ›| tuşuna basıldığında olacak eylem, kullanıcının metin içerisine yazı yazması durumunda otomatik kayma özelliği gibi öğeler Davranış kategorisi öğelerine örnek olarak verilebilir. Davranış kategorisinin içerdiği öğelerden sık kullanılanları S:112, Tablo 6.2’de açıklandığı gibidir.

Sadece veri girişine yarayan TextBox, ComboBox, ListBox, CheckBox, OptionButton, ToggleButton gibi kontrollerde veri kategorisi (Data) bulunur. Açılan bir menü içerisindeki metnin kaynağı ve sırası ile ilgili bilgiler veri kategorisi içerisinde yer alır. Veri kategorisinin içerdiği öğelerden sık kullanılanları S:113, Tablo 6.3’te açıklandığı gibidir.

Kullanıcı formu ve kontrolleri içerisindeki yazıların özellikleri Yazı Kategorisi (Font) altında yer alan aynı isimli (Font) öğe tarafından belirlenir. Kullanıcı formu ve kontrolleri içerisinde diğer sınıflar arasına konulamayan öğeler için Diğer Kategori Öğeleri (Misc.) oluşturulmuştur. Diğer Kategori Öğelerinin içeriği ve kullanımı S:113, Tablo 6.4’te özetlenmiştir.

Kullanıcı formu ve kontrolleri içerisine resim eklemek için Resim (Picture) Kategorisi Öğeleri ile işlem yapılır. Resim kategorisi öğeleri içerisinde yer alan Picture öğesi resmin bilgisayardaki yerinin belirlenmesi, PicturePosition ise resmin kontrol içerisine nasıl yerleştirileceğine karar verilmesi için kullanılır. VBA’da tasarlanmış yazılımda kaydet butonu içine metin yazmak yerine disket resmi konulması resim kategorisi öğelerinin kullanımına örnek verilebilir.

Kullanıcı kontrollerinin kullanıcı formu içerisindeki pozisyonunun belirlenmesi için Pozisyon (Position) Kategorisi Öğeleri ile işlem yapılır. Height kontrolün yüksekliğininin, Width ise kontrolün genişliğinin ayarlamasında kullanılır. Kontrolün form içerisindeki hizalamasında Left ve Top öğeleri ile işlem yapılır. Left kontrolün kullanıcı formunda soldan pozisyonunun ayarlanmasına, Top ise kontrolün kullanıcı formunda yukarıdan pozisyonunun ayarlanmasına yarar.

Kullanıcı formunda kaydırma çubuğu özelliklerinin belirlenmesi için Kaydırma (Scrolling) Çubuğu Kategorisi Öğeleri kullanılır. ScrollBars seçeneği kullanılarak form içerisine dikey veya yatay kaydırma çubuğu konulabilir.

Kullanıcı Formu Kontrolleri

Kullanıcı formlarının işlevsel tasarımında araç kutusu (Toolbox) penceresi içerisinde yer alan kontrol menüsü (Controls) kullanılır. Kontrol menüleri formların içeriğinin belirlenmesinde kullanılan temel araçlardan sadece biridir. Kontrol menüsü S:114, Şekil 6.4’te görüldüğü gibidir.

Kontrol menüsü içerisinde yer alan nesneler 3 bölümde özetlenecektir. Kontrol nesnelerinin 1. bölümünde Select Objects, Label, TextBox, ComboBox, ListBox nesnelerinin kullanımı S:114, Tablo 6.5’te verilmiştir.

S:111, Tablo 6.1’de yer alan kontrol nesnelerinin kullanımı için örnek anket formu hazırlanacaktır. Örnek anket formunun hazırlanması için ilk olarak Excel sayfası açılır. Geliştirici sekmesi veya Alt ve F11 tuşlarına basılarak VBA yazılımına geçilir.

Birinci aşamada VBA yazılımında Insert menüsüne basılarak UserForm tıklanır (S:115, Şekil 6.5).

İkinci aşamada UserForm üzerine kullanıcının anket girişi için kullanacağı kontrollerden Label, TextBox, ComboBox ve ListBox nesneleri eklenir.

Üçüncü aşamada Label türündeki kontrol nesnelerinin özelliklerinin düzenlenmesi için Proporties penceresinde işlem yapılır.

Dördüncü aşamada kullanıcı formu üzerinde TextBox kontrol nesnelerinin özelliklerinin ayarlanması için Properties penceresinde işlem yapılır. Daha önce tasarladığımız S:115, Şekil 6.6’da görülen Form üzerindeki B ve D harfleri ile kodlanan TextBox’larda, S:116, Şekil 6.8’de görüldüğü gibi B-a tb_adi, D-b tb_soyadi olacak şekilde isimlendirilir.

Beşinci aşamada açılan bir menü şeklinde bölümlerin sorulacağı ComboBox tasarımı yapılacaktır.

Altıncı aşamada öğrenci hobilerinin yazılabileceği S:117, Şekil 6.6’da H harfi ile kodlanmış ListBox ile ilgili işlem yapılacaktır. a harfi ile kodlanan Name öğesi lst_hobileri şeklinde düzenlenir.

Yedinci aşamada S:115, Şekil 6.6’da I harfi ile gösterilen CommandButton nesnesinin özellikleri ve VBA kodları hazırlanacaktır. CommandButton üzerine yüklenen işlemi yapması için kullanılan bir butondur.

Sekizinci aşamada kaydet butonun işlevi tasarlanacaktır. Butona tıklandığında buton bir dizi fonksiyonu çalıştırarak kullanıcı formundaki bilgileri Excel hücrelerine aktaracaktır. Excel sayfasındaki hücreler için S:119, Şekil 6.12’de görüldüğü gibi tasarım yapılmıştır.

Dozkuncu aşamada VBA kodlarına geçilerek btn_kaydet isimli CommandButton fonksiyonları hazırlanacaktır. Bunun için bir ana fonksiyon ve 2 alt fonksiyon tasarlanacaktır. Alt fonksiyonlardan birincisi Excel hücrelerinde dolu satırları kontrol ederek ilk boş satırı bulma fonksiyonudur. Excel sayfasında B sütununda Ctrl + Shift + End tuşuna basma işlemi VBA kodu kullanılarak yapılacaktır. Böylece kullanıcı formundan alınan bilgiler alt alta boş satır olmadan kayıt edilebilecektir.

Alt fonksiyonlardan ikincisi ListBox içerisinden seçilen hobileri tek satıra dönüştüren ve String formatında çıktı üreterek çıktı üreten bir fonksiyondur. seçilen_hobileri_bul fonksiyonu S:119, Şekil 6.14’te a ile gösterilen kısımda ListBox içerisinde kullanıcı tarafından ilk seçilen veri fonksiyondan geri dönüş için hazırlanır. ListBox nesnesi içerisinde kullanıcı tarafından seçilen diğer veriler için For Next döngüsü kullanılmıştır. İlk veriden sonra seçilen verilerin aralarına virgül konularak veriler birbirlerinin arkasına eklenir.

btn_kaydet isimli butona basıldığında VBA kodunun tetiklenmesi için btn_kaydet_ Click() fonksiyonu oluşturulmuştur. S:120, Şekil 6.15’te a bölümünde kullanıcı formundan alınacak verilerin konulması için değişken paketleri hazırlanır. b ile gösterilen bölümde VBA’daki hazır fonksiyonlardan IsEmpty() komutuyla formun içerisindeki verilerin boş olup olmadığı kontrol edilir. ListBox’ta kullanıcının seçim yapıp yapmadığı ise ListBox nesnesinde seçilen satır sayısı 0’a eşit ise (lst_hobileri.ListCount=0) deyimi ile kontrol edilir.

Fonksiyonlardan secilen_hobileri_bul fonksiyonu bu aşamada çalıştırılır ve hobileri değişken paketine formda seçilen verilerin aktarılması sağlanır. d bölümünde son_satiri_bul fonksiyonu çalıştırılarak son satır numarası son_satir isimli değişken paketinin içerisine atılır. e bölümünde S:119, Şekil 6.12’de görülen Excel sayfalarının içerisine değişken paketlerinin içerisindeki veriler yazdırılır. Son olarak f aşamasında kullanıcı formu içerisindeki metin kutuları, açılan kutu ve liste kutusu temizlenerek yeni veri girişi için kullanıcı formu hazır hâle getirilir. Kontrol nesnelerinin 2. bölümünde CheckBox, OptionButton, ToggleButton, Frame, CommandButton nesnelerinin kullanımı S:120, Tablo 6.6’da verilmiştir.

Geliştirilen örnekte CheckBox, Frame, OptionButton, ToggleButton, CommandButton ve Label kullanılmıştır. S:121, Şekil 6.16’da UserForm üzerinde tıklanacak yerler bir önceki örnekte olduğu gibi alfabetik ve ToolBox menüsünde eklenecek kontrol nesneleri ise sayı ile kodlanmıştır.

Birinci aşamada sırasıyla önce ToolBox üzerinde 6 numaralı Frame kontrol nesnesine sonra UserForm üzerinde A harfi ile kodlanan yere tıklanarak form üzerinde bir çerçeve oluşturulur (6-A).

İkinci aşamada Frame ve Label türündeki kontrol nesne özelliklerinin düzenlenmesi için Proporties penceresinde işlem yapılır.

Üçüncü aşamada CheckBox türündeki kontrol nesnelerinin özellikleri ayarlanır. S:121, Şekil 6.16’da UserForm üzerinde E ile kodlanan 3 CheckBox kontrol nesnesinin özellik öğeleri S:122, Şekil 6.18’deki gibi düzenlenir.

Dördüncü aşamada kullanıcıdan yıllık anket sayısını öğrenmek için kullanılan S:121, Şekil 6.16’da F harfi ile kodlanan OptionButton kontrol nesnesinin özellik öğeleri ayarlanacaktır.

Beşinci aşamada S:121, Şekil 6.16’da G harfi ile gösterilen ToggleButton ve H harfi ile gösterilen CommandButton kontrol nesnelerinin özellik öğeleri düzenlenmiştir.

Altıncı aşamada VBA yazılım kodlarına geçilerek Kaydet butonuna basıldığında tetiklenecek fonksiyon ve yordamlar hazırlanır.

Kullanıcı Formu Nesne Olay İlişkisi

Kullanıcı formları üzerine eklenen kontrol nesnelerinin VBA yazılımındaki fonksiyon ve alt yordamlara bağlantısı olaylar ile sağlanır. Örneğin, kullanıcı formuna konulmuş bir CommandButton nesnesi VBA’da tanımlanmış bir fonksiyonu fare üzerine geldiğinde, tıklandığında, çift tıklandığında, klavyede belirli Enter tuşuna basıldığında vb. durumlarda çalıştırabilir. Tasarlanan kullanıcı formları ile VBA’daki fonksiyonlar arasında etkileşim ve etkileşimin başlama biçimi olaylar ile belirlenir. Bu anlamda olaylar bir tür tetik mekanizması görevi görür. S:126, Şekil 6.23’te kontrol nesneleri (bkz. a) ile VBA fonksiyonları arasındaki ilişkiyi sağlayan olay tanımlanması (bkz. b) işlemi gösterilmiştir. S:126, Şekil 6.23’te b ile gösterilen olaylar nesnelerin özelliklerine göre değişiklik gösterir. Örneğin, CommandButton bir tür komut düğmesidir. Bu komut düğmesine kullanıcı klavyeden karakter yazmaz. Kullanıcı fare veya klavye ile seçer veya tıklar. Bu nedenle komut düğmelerinde Change olayı bulunmaz.