USER FORMS

İÇİNDEKİLER

1 – User Forms Nedir?

2 – User Forms Nesnesinin İncelenmesi

  • VBA Editor’e User Form Eklenmesi
  • UserForm Özellikleri
  • UserForm Kod Ekranı ve Çalıştırılması
  • ToolBox
  • macronimbus.com’un Mesajı!

3- Excel Worksheet’e Eklediğimiz Bir Tuş Yardımıyla Makroyu ÇalıştırmakToolBox Üzerinde Bulunan Kontroller Nelerdir?

  • ToolBox Üzerinde Bulunan Kontroller Nelerdir?
  • Label
  • TextBox
  • ComboBox
  • ListBox
  • CheckBox
  • OptionButton
  • ToggleButton
  • Frame
  • TabStrip
  • MultiPage
  • ScrollBar
  • SpinButton
  • DateTime Picker

 

 

1- User Forms Nedir?

    User Form, aslında devamlı olarak karşımıza çıkan, internette sorgulama yapmamıza veya bir veritabanına veri girmemize yarayan bir ara yüzdür. Bu ara yüz ekranı sayesinde kullanıcının işini daha kolay gerçekleştirmesini sağlarız. Çünkü genellikle bir veya birden fazla işlem için tasarlanan User Forms, belirli işleri olduğundan daha kolay hale getirir. Bununla birlikte;

                   # Kullanıcıya çoktan seçmeli seçenekler sunabilir,

                   # Doğru veri tipinde veri giriş yapılmasını sağlar,

                   # Eksik veriler ile ilgili kullanıcıyı uyarar,

                   # Girilecek veriler sınırlandırılabilir,

                   # SpinBox ve ScrollBar ile beraber kullanıcıya seçenekleri gösterilir ve bir seçim yapması istenebilir…

    User Forms’un yukarıdaki maddelerle beraber şu anda yazmadığımız bir çok faydası ve avantajı vardır. Bu dersin sonunda User Forms ve User Forms üzerinde kullanılan nesnelere ait fazlasıyla bilgiye sahip olacaksınız. Bu sayfa çok uzun bir içeriğe sahiptir. Bu yüzden diğer sayfalardan farklı olarak ‘Tab’ yani sekmeler kullanılarak sayfa düzeni oluşturulmuştur. İyi çalışmalar…

2- User Forms Nesnesinin İncelemesi

     VBA Editor’e User Form ekleme işlemi, yeni bir Class Module ve Module ekleme işlemiyle aynı olup, Class Modul ve Module ile birlikte eklenebilecek 3 seçenekten biridir.

 

User Forms-Insert UserForm

User Form ekledikten sonra ekrana iki adet pencere gelecektir. Bunlardan biri ‘User Form’ hatta Sol üst köşede ‘UserForm1’ olarak Adı yazacaktır. Diğer pencere ise ‘ToolBox’ penceresidir. 

 

 

 

 

 

User Forms-User Form ve ToolBox Pencereleri

    UserForm ilk eklendiği zaman görüntüsü aynı bu şekilde boş bir penceredir. Üzerinde yer alan noktalar ise ekleyeceğimiz etiket vb. nesnelerin düzgün yerleştirilmesine olanak veren bağlantı noktaları, bir çeşit cetveldir. 

 

    User Form nesnesine ait özellikleri yine ‘Properties’ penceresinde inceleyebilirsiniz. Eğer ‘Properties’ penceresi kapalıysa F4 tuşuna basarak açabilirsiniz. 

 

User Forms-UserForm Properties Window    Gördüğünüz gibi ‘Properties’ yani özellikler penceresinde onlarca özelliklik görülmektedir. Biz bu özelliklerden sadece birkaç adetinden burada bahsedeceğiz.

*(Name): Bu isim satırı UserForm’un Project penceresinde görülen adıdır.

*BackColor: Arka plan rengi

*Caption: UserFrom’un üzerinde görünen isimdir.

*BorderStyle: Pencerenin kenarlık tipi

*Font: Yazı tipi

*ForeColor: Yazı rengi

*Height: Yükseklik

*Picture: PNG formatında bir resmi User Form arka planı olarak kullanabilirsiniz.

*PictureAlignment ve PictureSize: Resmin yeri ve boyutu ile ilgili ayarlamalar.

*StartUpPosition: User Formun çalıştırıldıktan sonra ekranın neresinde açılacağı seçilir.

*ShowModel: True olursa UserForm kapatıldıktan sonra tekrar kod ekranı açılır, False seçilirse kod ekranı açılmaz.

*WhatsThisButton: True yapılırsa, UserForm un sağ üst köşesinde ‘?’ işareti çıkar. 

*Width: UserForm’un genişliğidir.

*Zoom: User Formun daha yakından görülmesini sağlar. 

 

User Forms Kod Ekranı ve Default Event ‘Click’

User Form’un çalıştırılması da Sub-Routine gibi F5 veya Play tuşu ile sağlanır. Eğer User Form üzerinde çift tıklarsanız, User Form’a ait kod ekranı açılacaktır. Project penceresinde yer alan User Form’a ait isme de tıklarsanız kod ekranından çıkılarak tekrar User Form karşımıza gelecektir.  User Form bir nesne olduğu için, çift tıklandığında karşımıza Event Procedure’lerden alışık olduğumuz ekran çıkacaktır ve User Form’a ait Default Event olarak da Click() seçilmiş olacaktır. 

 

User Forms-ClickEvent

 

     Gördüğünüz gibi nesne yerinde UserForm ve Event kısmında ise Click default olarak atanmıştır.

User Forms-User Form Ekranını Secme

Tekrar istediğimiz User Form ismine tıklayarak User Form tasarım ekranına gelebiliriz. 

 

    Bu görselde çalıştırılmış(F5’e basmak yeterli) bir User Form görülmektedir. Gördüğünüz gibi ismi(Caption) default olarak UserForm1 olarak gelmiştir. İsterseniz bu ismi properties penceresin Caption satırından istediğiniz bir isimle değiştirebilirsiniz.

    Dikkat ettiyseniz VBA Ekranında User Form taslağı üzerinde gördüğünüz cetvel yerine geçen karelaj noktaları, User Form çalıştıktan kaybolmaktadır. 

User Forms-User Form-1

 

    Biz User Forms dersini işlerken, excel sayfamıza bir adet User Form’u tetikleyecek tuş atayacağız. Sonra da aynı şekilde bir tuşu User Form üzerine koyup o tuşun da User Form’u kapatmak için programlayacağız. Developer Tab açıkken Insert-ActiveX Controls- Command Button şekline atayacağımız bu tuş(lar)’da birer nesne olup, kendilerine ait event’leri ve Properties penceresinde görebileceğimiz özellikleri vardır. Kursun ilerleyen kısmında daha kapsamlı olarak ‘Command Button’ işleyeceğimiz için burada sadece bu tuşa ait ‘Click’ event’ini kullandığımızdan bahsederek konuyu geçiştireceğim. 

ActiveX Control Command Button ile Formun Açılması

User Forms-Calistir tusuKullanacağımız CommandButton(ActiveX Control)‘ı, adını da ‘ÇALIŞTIR’ yaparak worksheet üzerine yerleştiriyoruz. Unutmayın ActiveX Contol nesnelerini kullanabilmek için Design Mod’dan çıkmanız gereklidir. Aynı şekilde eğer bir ActiveX Control nesnesine ait kod ekranını açmak için bu sefer de tam tersi olarak Design Mod açılıp, nesneye çift tıklanmalıdır.

 

 

Worksheet üzerine eklediğimiz tuşa tıkladığımız zaman ‘User Form’un görünmesi için aşağıdaki çok basit kodu yazıyoruz. 

User Forms-Çalistır Kod

 

    Görseli dikkatli incelerseniz bu sefer nesnenin CommandButton1 olduğunu görürsünüz. Event ise tuşa tıklandığında yazılacak prosedürü tetikleyecek olan Click-Tıklama olayıdır. Kodumuz çok basit olarak User Forms’un ismi, ki biz değiştirmedik ve sonuna eklenen .Show metodundan ibarettir. Artık bu kodu yazdığımıza göre formu worksheet üzerinden bu tuşa tıklayarak çalıştırabiliriz. Ekranda User Form’un açıldığı bölgeyi, ilgili User Forms’un Properties penceresinde yer alan ‘StartUpPosition‘ özelliği ile oynayarak değiştirebilirsiniz.

 

ActiveX Control Command Button ile Formun Kapatılması

    Bu sefer de CommandButton’u User Form üzerine ekliyoruz. Nasıl eklendiğini ilgili derslerde göreceğimiz için şimdilik sadece içine yazılan koda dikkat etmeniz yeterlidir.

User Forms- User Form Kapat ActiveX Contol CommandButton User Form üzerine eklendi ve adı da ‘KAPAT’ olarak değiştirldi. Artık sadece ‘X’ işareti ile değil bu tuşu kullanarak da formu kapatabileceğiz. User Form’u kapatmak için yazdığımız Kod, formu açmak için kullandığımız koddan dahi daha basit.

 

    User Forms- UserForm Kapama Kodu

 

    Dikkat etmeniz gereken tek şey nesne kısmında yazan ismin farklı olduğu. Biraz önce CommandButton1 iken şimdi 2 oldu. Bu ismin değiştirilme işlemleri yine Properties penceresi kullanılarak yapılıyor. Unutmayın (Name) ve ‘Caption’ özellikleri aynı değildir. Kullandığımız kod ‘Unload Me’ kodunu tam anlamak için aslında .Show metodunu anlamak lazımdır. .Show metodu ilk önce UserForm1’i Load yapar sonra da gösterir. Yani ilk yaptığı UserForm’u belleğe yüklemektir. Bu nedenle biz UserForm’u kapatırken de Unload diyoruz. Kullandığımız ‘Me’ anahtar kelimesi ise o an çalışmakta olan görevi niteler. İsteğe bağlı olarak ‘Me’ anahtar kelimesinin( program tarafından tanımlı değişken) yerine çalıştırmış olduğunuz User Forms adını da yazabilirsiniz. Unutmayın yazdığınız isim, Project penceresinde yazan isim yani(name) olmalıdır. 

ToolBox Nedir?

ToolBox’ın tam olarak Türkçe karşılığı ‘Alet Çantası’dır. Bizim konumuza göre de içinde alet olarak User Forms üzerinde kullanacağımız nesneler ve ActiveX kontrolleri bulunur. Etiket, yazı kutusu vb bütün nesneler ‘ToolBox’ içerisinde tanımlı olarak gelir. İstenirse tabi ‘ToolBox’ içeriği istenildiği gibi değiştirilir. Yeni ‘Tool’lar yani, nesneler eklenip içeriği genişletilebilir veya tam tersi azaltılabilir. 

ToolBox’ın Açılması

User Form’un VBA Editor’e eklenmesi, beraberinde ToolBox’ı da açar. Ekranda hem UserForms taslağı hem de ToolBox görülür. 

User Forms-User Form ve ToolBox PencereleriGördüğünüz şekilde ekrana gelen ToolBox üzerinde, bizim kullanacağımız kontrol nesneleri bulunmaktadır. Bu nesnelerin çoğunu detaylı olarak inceleyeceğimiz için bu aşamada sadece ToolBox’tan bahsedeceğim. 

Toolbox, pencerenin üzerinde gördüğünüz ‘X’ işareti ile basitçe kapatılabilir, pencerenin dış kenarından fare ile tutularak istenilen yere taşınabilir. 

Kapattıktan sonra ise siz tekrar açıncaya kadar kapalı kalacaktır. Peki kapanan ‘ToolBox’ı tekrar nasıl açabilirsiniz? 

User Forms-ToolBox Ac

    VBA Editor’un üst tarafında ToolBox işareti bulunur. Yukarıdaki resimde kırmızı çember ile işaretlenmiş olan seçenek ToolBox’ı açıp kapatmanızı sağlayan tuştur. Tam olarak işareti ise ‘Alet Kutusu’ adına yaraşır şekilde üst üste çapraz şekilde yerleştirilmiş çekiç ve anahtardır(somun sıkma anahtarı).  

Bütün Derslere Ait Liste ve Uzantıları https://macronimbus.com/egitim/ Sayfasından Ulaşibilirsiniz. 

3- ToolBox Üzerinde Bulunan Kontroller Nelerdir?

ToolBox Üzerinde Bulunan Kontroller Nelerdir?

ToolBox üzerinde yer alan nesnelerin ne işe yaradıklarından bahsedelim.

 


LABEL Nedir? User Forms-Label Sembolu

Label, ‘etiket’ demektir. ToolBox üzerindeki sembolü ‘A’ harfidir ve başlğın yanında görülmektedir. Görevi de aynı gerçek hayattaki etiket gibidir. UserForm üzerine genellikle bir yeri nitelemek amacıyla yerleştirilir. Mesela isim ve soyisim girilmesi gereken bir form oluşturduğumuzu varsayarsak, üzerinde ‘İsim:’ yazan bir etiket ve yanına da gerçekten ismin girildiği bir textbox kullanırız. 

User Forms-Label Etiket Ekleme

 #ToolBox’da yer alan ‘Label’ ve diğer bütün nesneler ilk önce ToolBox’daki sembole tıklayıp sonra da User Form’a tıklayarak eklenirler. Eklendikten sonra da istediğimiz gibi boyutlarını ve User Form üzerindeki yerlerini değiştirebiliriz. 

#Örnekte 2 adet Label’in kullanıldığını görüyorsunuz. Üstte yer alan label’in adını (Name) IsimEtiketi olarak, label’in üzerinde yazmasını istediğimiz değeri ise ‘İsim:’ olarak değiştirdik. Bu şekilde isim etiketini oluşturmuş olduk. 

#Eminim ki üye olduğunuz bir sürü internet sitesi vardır. Bu sitelere üye olurken de karşınıza bu şekilde yani isimle başlayan formları doldurmanızı isterler. İsim, Soyisim, E-posta Adres, Tel Numarası gibi.  Kayıt işlemlerini gerçekleştirdiğimiz bu ekranlar, size UserForm’ların ne kadar yaygın ve herkes tarafından kullanılan bir araç olduğunu anlamanız konusunda ipucu verecektir. 

#İnternet sitelerinde detaylı arama ekranları da yine User Form’dur ve kullanıcıların veri tabanlarında dolaşabilmelerini sağlarlar. 

 

TextBox Nedir?User Forms-TextBox Symbol

TextBox, User Forms ile kullanıcıdan bir veri temin edilmek istendiği zaman kullanılan araçlardır. Görev itibariyle InputBox ile aynıdır. TextBox’a girilen veri bir değişkene atanabilir, worksheet üzerinde bir hücreye yazdırılabilir, bir hesapta kullanılabilir veya sorgulama işleminde aranan metin olarak kullanılabilir. Kısaca aklınıza gelen bütün işlemler için TextBox kullanılabilir.

#ToolBox içerisinde yer alan bütün araçların birer nesne olduğunu ve bütün nesnelerin ortak ve kendilerine ait ‘Event‘ leri olduğunu aklınızdan çıkartmayın. 

#User Form tasarım ekranındayken, User Form üzerinde yer alan nesnelere tıklarsanız kendilerine ait, yani kendilerinin nesne olduğu ve default Event’in seçildiği kod ekranına gidersiniz. Sonra tekrar üzerinde çalıştığınız ve ‘Project‘ penceresinde yer alan User Form’a tıkladığınızda tasarım ekranına geri dönüş yapabilirsiniz.  TextBox nesnesine ait ‘default event’ _Change()‘dir. 

# Aynı zamanda TextBox.Value ile textbox’a istediğimiz değeri atayabiliriz. User Form’a ilk eklendiği zaman TextBox defalut değeri ‘Value‘ olarak geçer ve karşılığı da boştur. 

User Forms_TextBox Value Property

Sol tarafta gördüğünüz TextBox’a ait ‘Properties’ penceresinin alt bölümüdür. Burada ‘Value’ özelliğinin boş olduğunu rahatça görebilmektesiniz. 

Eğer ‘Value’ özelliğine default bir değer atamak istersek, Value özelliğinin yanına istediğimiz değeri yazabiliriz. İsterseniz ‘sadece rakam’ yazarak kullanıcıyı uyarabilir, isterseniz de doldurulmasının unutulduğu anlar için ‘1’ değerini yazabilirsiniz. Tamamen size kalmış. Örneklere geçtiğimiz zaman girilecek olan verinin nasıl kontrol edileceği konusunu da öğrenmek için fırsatınız olacak.

#Eğer TextBox ile kullanıcadan aldığınız verileri bir hesap içerisinde kullanmak istiyorsanız, kullanıcının yanlış veri girmesinin yanında, TextBox’ın boş olması durumu için de ‘Error Handling’ ile veya Koşullu Durumlar(If Else, Case ) kullanarak önlem almanız gerekir. Çünkü TextBox boş olduğu zaman ‘Null’ geri dönecektir ve bu değer de ‘String Tipi Veri‘ olduğu için hesaplama esnasında ‘Type MisMatch‘ hatası verecektir.

User Forms_TextBox #TextBox nesnesinin ismini(name) ‘IsimGirisi‘ olarak değiştirdik. Ancak sizin de farkına vardığınız gibi ”Properties‘ penceresinde Label nesnesinde olduğu gibi ‘Caption‘ özelliği yok. Sebebi ise TextBox’ın Value özelliğinin olmasıdır.  

 

 

User Forms_ComboBox SymbolComboBox nedir?

 

    ComboBox, daha önceden hazırlanmış seçeneklerin sunulduğu ve kullanıcının sadece bu seçenekleri seçmesine izin veren bir seçme ekranıdır(Drop Down Menu). Gezindiğiniz internet sitelerinde bir sorgulama yapmak istediğinizde veri giriş penceresinin yanında bir ok olur ve biz tıkladığımızda o küçük pencere açılır ve biz de seçenekler arasında seçimimizi yaparız. İşte User Forms’da bu görevi ComboBox yerine getirir.

    ComboBox’ın User Form üzerine eklenmesi de aynı ‘label’ ve ‘TextBox’ gibidir. Her zaman olduğu gibi ComboBox üzerine tıkladığımız anda, ComboBox’a ait ‘Properties’ penceresi açılır. Properties penceresinde yer alan en önemli özellik ise ‘RowSource’ özelliğidir.

ComboBox_NoValue#ComboBox tasarım anında ‘ok’ tıkladığımızda açılır ve gördüğünüz gibi içi de boştur. Yani kullanıcıya bir seçenek sunmamaktadır. 

ComboBox için İçerik Hazırlanması

#ComboBox için içerik hazırlama işlemi çok basit bir işlemdir. İçerik hazırlarken hem ilk derslerde işlediğimiz ‘Bir Alana İsim Verme’ işlemini hatırlayacağız hem de isimlendirilen bir alanın farklı bir şekilde kullanımını öğrenmiş olacağız.

#Örnek olarakj Label2 isimli etiketin şehir olduğunu düşenelim ve ComboBox ile de kullanıcıya şehir seçenekleri sunalım. İlk etapta yapmamız gereken şey, daha sonradan kullanılmayacak olan worksheet’in bir köşesine veya farklı bir worksheet’te alt alta şehirlerin adını yazmaktır. 

User Forms_ComboBox RowSource List# Sol taraftaki resim, worksheet2’de oluşturduğumuz bir şehirler listesini göstermektedir. Alanlara isim vermek konusunda gördük ancak tekrar hatırlamak için bu basit işlemi tekrarlayalım. Alanı seçtikten sonra ‘Name Box’ içerisine alana vermek istediğimiz ismi yazıyoruz ve bütün işlem bu kadar. Artık seçtiğimiz alanın bir adı var. Bizim örneğimizde ise bu alanın adı:’SehirlerListesi’. 

#Artık sadece bu alanı ComboBox nesnesine tanıtmaya geldi.

‘RowSource’ Property: ComboBox’a ait onlarda özellikten birisi olan bu özellik, hazırladığımız çoktan seçmeli listenin ComboBox tarafından kaynak olarak kullanılmasını sağlıyor. Yani RowSource özelliğinin karşısına sadece hazırlamış olduğumuz ‘SehirlerListesi’ adını girdiğimiz anda artık ComboBox, SehrilerListesi alanındaki verileri kullanıcıya sunabilir hale geliyor.

 

User Forms_ComboBox_List_RowSource

 

 

Sağ tarafta Properties penceresinde RowSource özelliğine SehilerListesi yazdıktan sonra ComboBox’ın yeni halini görebilirsiniz. Artık kullanıma hazır bir şekil almış duruma gelmiştir.

User Forms_ListBox SymbolListBox Nedir?

ListBox, birden fazla seçeneği alt alta görebilmenizi sağalayan bir penceredir. ComboBox ile aralarındaki genel olarak fark budur. Ayrıca ListBox içerisinde yer alan seçeneklerden tek seferde birden fazla seçme şansınız da vardır. Şimdi User Forms tasarım formunda ListBox’ı görelim.

User Forms_ListBox Placement#Sehirler etiketinin altına ‘İlceler’ adında yeni bir etiket açtık ve karşısına da ListBox yerleştirdik. 

# ListBox içerisinde gösterilecek seçeneklerin ListBox’a atanması ComboBox ile aynı şekilde yapılıyor. Yani daha önceden hazırlanan ve alt alta hücrelere yazıldıktan sonra bir alan olarak isimlendirilen alan ismi, ListBox’a ait RowSource özelliğine yazılıyor.(ComboBox konusunda detaylı görseller ile anlatılmıştır)

#ListBox’ta açılan listeden seçilen kellime v.b. ListBox’a ait Text özelliğine atanır.

#Örnekte ilçeleri listelemek için 2 farklı yöntem değerlendirilmiştir. İlk yöntemde bütün ilçeleri tek bir liste yapmak ve kullanıcıya uzun bir liste halinde sunmak. İkinici yöntem ise sadece ComboBox’ta seçilen ilin ilçelerini ListBox’ta göstermekti.  Tabi ki ikinici yöntemi tercih ettik. 

#İlk aşamada her ilin ilçe listesini(Bazıilçe listeleri tam değil) hazırladık Range olarak tanımlayıp, isimlendirdik. Bu şekilde RowSource için kaynak olarak uygun hale getirdik.  

 

 

 

İLLERE GÖRE İLÇE LİSTELERİ

User Forms_ListBox Content

#Sonrasında ise ComboBox ait _Click Event kullanarak, ComboBox her değiştiğinde ListBox nesnesine ait RowSource özelliğine, seçilmiş ilin ilçelerinin bulunduğu Range’i atadık. Bu sayede kullanıcının seçim yapma işlemini kolaylaştırmış olduk.

#Bu işlemde kullandığımız özellikler; ComboBox Text özelliği ve ListBox RowSource özelliğidir. 

#Daha sonradan bebraberce hazırlayacağımız örnekte bu aşamaları detaylı olarak işleyeceğimiz için şimdilik sadece koda ait görseli paylaşıyorum. Çok basit olarak hazırlanan kod, sadece ComboBox_Change Event ile Koşullu durumların birleşmesiyle oluşturuldu. 

 

User Forms_ListBox_ToolBox_Binding# ComboBox’ta bir seçim yaptığımız zaman, ki burada seçebileceklerimiz sadece şehirlerdir, seçilen şehirin adı ComboBox.Text özelliğine atanır.

#If bloğu oluştururken de çok basit bir şekilde ComboBox.Text özelliğinin değerine göre, ListBox.RowSource özelliğine farklı ilçeleri atadık.

#Bu şekilde ComboBox değerini her değiştirdiğimizde, ComboBox_Change() Event, içine yazmış olduğumuz prosedürü çalıştırarak, ListBox’ın içeriğini güncelleyebilmektedir.

 

 

 

 

 

 

 

 

 

 

 

 

 

#Aşağıda şehirlerin değişmesiyle beraber ilçelerin de değiştiğini gösteren örnekler yer almaktadır. Örneklerde de görüldüğü gibi ComboBox ve ListBox’ın beraber kullanılması güzel bir sorgulama, fitreleme örneğidir.

User Forms_ListBox_AnkaraIlcelerUser Forms_ListBox_IstanbulIlceler

User Forms_ListBox_VanIlceler

 

User Forms_CheckBoxCheckBox Nedir?

    CheckBox, sadece True veya False değeri alır. Yani BOOLEAN tipindedir. Sizin de tahmin edebileceğiniz gibi eğer tıklanırsa ‘TRUE’, boş bırakılırsa da ‘FALSE’ olarak değerlendirilir.

    Girdiğiniz bazı internet sitelerinde, alışveriş sitelerinde veya aklınıza gelebilecek her türlü sitede yer alan ‘CheckBox‘ uygulamalarıyla daha önceden onlarca kez karşılaştınız. Şimdi size sadece iki adet örnek vereceğim ve siz ‘CheckBox’ nesnesinin kullanım alanlarını tamamiyle kavramış olacaksınız.

               Örnek 1 : ‘Kullanıcı Sözleşmesini Okudum.’ cümlesinin önünde veya sonunda kesinlikle CheckBox kutucuğu bulunur.

               Örnek 2 : ‘ 18 Yaşından Büyüğüm.’ ve yine bu ibarenin önünde veya arkasında bir adet ‘CheckBox’ kutucuğu.

     Bu verdiğim örneklerle eminim hepiniz karşılaşmışsınızdır. Burada ‘CheckBox’a tıklayarak, websitesi yönetiminin sizin için hazırladığı bazı koşulları yerine getirdiğinizi temin ediyorsunuz. Tıklama ile beraber websitesi veya uygulama sizin yaptığınız her ne işse daha ileriye geçebilmenize müsade ediyor. Eğer tıklamazsanız yani ‘CheckBox’ değerini False olarak bırakırsanız da, yaptığınız işlemler son buluyor. 

    Bu verdiğim örnek sadece çok yaygın bir kullanımı size hatırlatmak amacıylaydı. Düşündüğünüzde sizin de ‘CheckBox’ın kullanılabileceği bir düzine nokta bulabileceğinizden eminim.

    Kullanım şekli aşağıdaki gibidir.

Private Sub CheckBox1_Click()

        If CheckBox1 Then

            MsgBox “ok”

        End If

End Sub

 

 

OptionButton Nedir?

OptionButton, kullanımı CheckBox gibidir. Görünümleri farklıdır. CheckBox ile aynı şekilde True veya False tipinde geri dönüşü vardır. Çok fazla metinle uğraşmadan ufak bir örnekle OptionButton konusunu işleyelim.

İlk başta yazdığımız çok basit kodu inceleyelim.

User Forms_OptionButton_Code#CommandButton’a ait Click Event’i içine aşağadaki kodu yazdık. Eğer istersek bu kod ile gerçekleştirdiğimiz işlemleri her bir OptionButton _Click event’i içine de yazarak gerçekleştirebilirdik.

#UserForm’a eklediğimiz OptionButton nesneleri Opt_A, B, C, D, E olarak isimlendirildi.

#Kod ile tipik bir teste ait çoktan seçmeli bir soru örneği oluşturuldu. 

#Yanlış seçenekle beraber, OptionButton arka planı kırmızıya dönerken aynı anda “Yanlış Cevap” ibaresi MsgBox ile kullanıcıya bildirecektir.

#Doğru cevap verildiğinde ise OptionButton yeşile dönerken “Doğru Cevap” ibaresi ekrana yansıtılacaktır.

# En alt kısımda BackColor özelliğinin renginin her soru ile eski rengine dönmesi sağlanıyor. Çünkü kırmızı ve yeşil olarak renklendirilen OptionButton arka planının her cevaptan sonra orjinal renge dönmesini sağlıyoruz.

*

*

#Şimdi de UserForm görünümünü ve doru ve yanlış cevap anında ortaya çıkan görüntüyü inceleyelim.

 

User Forms_OptionButton_Example_1Oluşturduğumuz örneğin görünümü.

 

Forms_OptionButton_Example_2

Yanlış Cevapta Karşımıza Çıkan Ekran

 

Forms_OptionButton_Example_3

Doğru Cevap ile Karşımıza Çıkan Ekran

 

    Örnekle daha iyi anlaşılabilir hale gelen OptionButton hem bu şekilde testler hazırlanırken hem de çok farklı amaçlar doğrultusunda kullanılabilir. İnternette çok fazla örnekte OptionButton kullanıldığını ve şimdi de hemen hemen nasıl hazırlandığını öğrendiniz. Diğer nesnelerle devam edelim.

ToggleButton Nedir?

    ToggleButton’ın görevi bir şeyi açma, kapatma veya  bir durumu değiştirmektir. Aslı itibariyle bir açma kapama düğmesidir. Hayatmızda fiziki olarak kullandığımız ToggleButton’lara örnek verecek olursak;

#Işık Açma Kapama Düğmesi(Switch)-Açık ve Kapalı

#Arabalarda ESP Açma Kapama Düğmesi

#Araç Klimalarında Hava Sıcaklığını Sıcak veya Soğuk Olarak Değiştiren Düğme. Kışın Sıcakta, Yazın Soğukta Bırakırız.

    Bu örnekler sadece il aşamda öne çıkan genel kullanımlar. Bunlara her türlü açma kapama düğmesini ve elektronik el frenlerini ve aklınza gelen her türlü örneği de ekleyebilirsiniz. ToggleButton’ın durumunu değiştirirsiniz ve siz tekrar değiştirene kadar aynı şekilde kalır. Siz kapatana kadar ışıklar açık kalır veya kapalı olan ışıklar siz açmadığınız sürece kapalı kalacaktır. Klimanızı da eğer kış aylarına geldiğinizde ayarını kış ayına getirmezseniz bütün kış soğuk üflemeye devam edecektir. 

    Şimdi, ToggleButton’ın User Forms üzerinde kullanımına dair ufak bir örnek üzerinde çalışalım. Biliyorsunuz ülkemizde satılan araçların çoğu ithal olduğu için bazen araba satıcıları araçlarının fiyatlarını döviz cinsinden listelemeyi tercih ediyor. Biz de kendimizi bu satıcılardan birinin yerine koyduk ve alıcılara tek tuşla araç fiyatını TL olarak görebilecekleri basit bir ekran ve tuş hazırladık.

    Burada ilk önce Toggle Button’ın nasıl kullanıldığı konusunu inceleyelim. ToggleButton’ın bir boolean yani True ve False değer geri döndürdüğünü biliyoruz. Bu durumda ToggleButton ilk eklendiğinde yani tıklanmadığı anda Default değeri yani ToggleButton.Value Değeri False’dur. (Artık ToggleButton’a Tuş diyeceğim)Bu tuşun basılı olmadığı anca taşıdığı değerdir. Tuşa bastığımız an tuşun değerini de True olarak değiştirmiş olursunuz. Biz yazdığımız kodları işte bu tuşun basılı olup olmama durumuna göre belirliyoruz. Yani koşullu durumlar kullanıyoruz.

User Forms_ToggleButton-Display

    Örneğimiz 3 bileşenden oluşuyor. 1 adet ToggleButton ve 2 adet etiket. Burada amacımız ToggleButton’a tıklayarak Etiket 2’de aracın değerini $ veya TL olarak görebilmek. Şimdi bu isteğimizi gerçekleştirmemize olanak veren kodu inceleyelim.

User Forms_ToggleButton-Code

    ToggleButton’ın True ve False değer aldığından bahsetmiştik. Burada da kodumuzu bu prensip çerçevesinde yazdık. 

#İlk olarak ToggleButton’a ‘DolarTL’ ismini verdik ve bu tuşa ait _Click ”Event”ini kullandık. 

#Sub-Routine’in ilk aşamasında VwPoloFiyat değişkenini tanımladık ve değer atadık.

#Kodun ikini bölümü ise tamamiyle If bloğundan oluşuyor. 

*İlk koşulumuz DolarTL tuşunun basılı olduğu durum. Eğer basılıysa bize 15000 dolar olan fiyatı 5.75 ile çarparak veriyor. Ve biz bu fiyatları da Adını Fiyatt olarak değiştirdiğimiz Etiket_2’de görüyoruz. Eğer ToggleButton True ise yani basılı ise; hem ToggleButton’ın üzerinde yazan yazıyı(Caption özelliği) ‘TL’ ye hem de Fiyatt isimli Etiket_2’nin Caption aracın fiyatı(15000*5.75) değerini alıyor.

If DolarTL Then—————————————————–>Eğer Tuşa Basılmışsa Yani ToggleButton.Value=True

    DolarTL.Caption=’TL’——————————————>ToggleButton üzerine TL yazdır.

    Fiyatt.Caption=VWPoloFiyat*5.75  & ” TL’dir.” ——>Fiyatt isimli Etiket 2 üzerine aracın TL değerini yazdır.

Bu sayede ToggleButton üzerinde TL görünürken, Etiket 2 üzeinde de aracın TL olarak fiyatı görünebilecektir. İkinci durumda ise tam tersi gerçekleşir ve ToggleButton üzerinde ‘Dolar’, Etiket 2 üzerinde de dolar olarak fiyat yazılacaktır.

 

*Else———————————————————————->Tuş Basılı Değilse yani ToggleButton.Value=False

        DolarTL.Caption = “Dolar”———————————-> ToggleButton üzerine Dolar yaz. 
        Fiyatt.Caption = VWPoloFiyat & ” $’dır.”—————>Fiyatt İsimli Etiket 2 üzerine direk olarak tanımlanan fiyatı yaz. 

End if 

 ToggleButton kullanımı bu şekilde. Eminim ki ToggleButton kullanım alanlarıyla ilgili aklınıza onlarca fikir gelmiştir. Umarım çalışmalarınızda ToggleButton’a da yer vererek, daha kullanıcı dostu formlar oluşturursunuz. 

 

  User Forms_Frame Frame Nedir?

    Frame, yani çerçeve User Forms üzerinde farklı işlevlere sahip olan nesneleri sınıflandırmak için kullanabileceğimiz özel alanları ifade eder. Frame’in User Form’a eklenmesi de diğer nesnelerle aynı şekildedir. ToolBox’ta frame üzerine tıkla ve sonra user form’da yerleştirmik istediğiniz yere tıkla, işte bu kadar. Sornasında ise istediğimiz gibi yerini ve boyutlarını ayarlayabiliriz. Frame’ler içerisinde yer alan nesneler frame’ler ile beraber hareket eder. Yani tasarım aşamasında frame’i User Form’da başka bir noktaya taşımak isterseniz, üzerinde yer alan nesne ve kontroller de frame ile beraber hareket edecektir. Bu da başlı başına frame kullanmanın avantajlarından sadece biridir. Şimdi aşağıdaki örneği inceleyelim.

User Forms_Frame-Design

     Örnek olarak oluşturduğumuz Personel Kayıt Formu adındaki User Form’u incelediğinizde, form üzerinde yer alan 3 adet FRAME’i rahatça görebilirsiniz. Gördüğünüz gibi bu 3 adet çerçeveye yerine getirdikleri göreve göre isimler verilmiş. “Kişisel Bilgiler”, “Adres Bilgileri” ve  “Eğitim” olarak adlandırılan çerçevelerin içlerinde, aldıkları isimlere ait bilgilerin girileceği TextBox‘lar ve bu TextBox‘ları tanımlayan Label‘lar yer almakta. Bu çerçeveler sayesinde daha düzgün ve derli toplu bir görüntüye ulaşılmış ve de kullanıcılar için daha kullanıcı dostu bir form ortaya çıkmıştır. 

    Yaptığımız iş, filtrelemek istediğimiz veri sınıfı veya aklınıza gelebilecek her şey için ‘FRAME’ yani çerçeve kullanımı hem görüntü hem de kullanım açısından User Form’u bir üst seviyeye taşıayacaktır.

    Ek olarak, Frame’lere ait Properties penceresini incelemenizi, daha doğrusu sağını solunu kurcalamanızı tavsiye ediyorum. Arka plana resim vb ekleyerek kendinize ait özelleştirilmiş görünümler elde edebilirsiniz. 

 

 

    User Forms_TabStrip_SymbolTabStrip Nedir?

    TabStrip nesnesi, User Forms ile kullanılan bir sekmeler ekranıdır. Çerçeveye benzen bir yapısı vardır ancak üst kısmında farklı ekranlara ait sekme isimleri vardır.  Şu an bu yazıyı okuduğunuz ekran da bir nevi TabStrip’tir. 

User Forms_TabStrip-NewTab

     TabStrip User Form’a eklendikten sonra üst kısımda yer alan Tab’lara sağ tıklayarak mevcut bir Tab’ı silebilir, yenisini ekleyebilir veya altta yer alan resimdeki gibi Tab ismini değiştirebilirsiniz. 

User Forms_TabStrip-Rename-Tabs

    Rename seçeneğini seçtikten sonra gördüğünüz ekran gelecektir. Burada Caption özelliğin değiştirebilirsiniz. Çünkü TabStrip’e ait Properties penceresinde TabStrip veya Tab’lara ait bir ‘Caption’ yoktur. 

    Artık TabStrip üzerine istediğiniz nesneyi girebilirsiniz. Ancak TabStrip ile ilgili bilmeniz gereken ilk ve en önemli özellik, hangi tab’a yani sekmeye ne eklerseniz ekleyin, eklenilen nesne bütün sekmeler için ortak olacaktır. Yani eğer Tab1 seçiliyken bir ‘Label’ eklediniz diyelim, bu eklediğiniz Label’i bütün (Tab2, Tab3 veya Tabn) Tab’larda görebilirsiniz. Etiket kalır ancak siz Caption gibi özelliklerini değiştirebilirsiniz.  

    1-Tab Numaraları: Tab’ları isterseniz verdiğinz isimler ile de çağırabilir veya işlem yapabilirsiniz. Tabi çok fazla Tab kullanacağınuz projeler için uygun olan da budur ancak, eğer birkaç adet Tab ile işlem yapacaksanız daha basit ve kolay olan TabStrip—>Properties Window—>Value değerini kullanmanızı tavsiye ederim. Burada TabStrip Value değeri aslında Tab’lara ait sıra numarasıdır. Sıra numarası VBA’da ve çok dilde 0’dan başlar. Sonuç olarak;

TabStrip.Value=0 ise Tab1

TabStrip.Value=5 ise de Tab6 demektir. 

    2-TabStrip‘in ismini Properties Penceresindeki (name) özelliğini değiştirerek verebilirsiniz.

    3-TabStrip‘e ait birçok özellik diğer nesnelerle aynıdır. Farklı olarak Style özelliği ile Sekme tuşlarının şeklini, TabOrientation ile de sekmelerin bulunduğu yeri seçebilirsiniz. Bu kapsamda sekmeleri çerçevenin her 4 köşesine de yerleştirme seçeneğine sahipsiniz. 

Şimdi örnekler yardımıyla konuyu daha iyi anlamaya çalışalım.

Örnek 1: Bir Otomobil Markasının Modellerini ve Fiyatlarını Farklı Sekmelerde Görüntülemek

1.Aşama: Yeni Sekmeler Ekle ve İsimlendir.

User Forms_TabStrip-Ex_1_Visual_1

 İlk olarak TabStrip ekranına 2 adet daha sekme ekledik ve bu sekmelere yeni isimler verdik. 

    2.Aşama: Nesne Ekleme

    Aklımızda hayal ettiğimiz veya bir kağıt üzerine çizdiğimiz görünümü yakalamak için TabStrip penceresine nesneleri yerleştirdik. Burada ilk örnekte daha rahat olabilmek için bütün Nesneleri ‘Label’ yani etiket olarak seçtik. Etiketlerin tasarımımıza göre dağıtımını çerçeveye üzerinde gerçekleştirdikten sonra Caption özelliklerinin boş olmasını sağladık ve etiketlere bize görevlerini hatırlatacak isimler verdik. L ile başlayan etiketler tablo ismi ve sütun isimlerini, M ile başlayan etiketler modellere ait donanım seviyelerini, F ile başlayan etiketler ise fiyatları gösterecektir. 

    Bir de Ortu(Ortmek) adında bir Etiket oluşturduk. Bu etikete örtü adını vermemizin sebebi ise bütün nesnelerin üzerini örtecek şekilde boyut vermiş olmamızdan geliyor. Burada amaç; Marka sekmesine tıkladığımızda ekranda sadece bir adet yazının görünmesini sağlamak. Ancak etiketlerin Caption özelliği boş olsa bile, etiketlerin kenarlıkları(border) aktif edildiği için Marka sekmesinde boş boş diktortgenler görünmekteydi. Bu görüntüyü ortadan kaldırmak için bir adet büyük etiketi, L1 etiketi dışında bütün etiketleri kapsayacak şekilde yerleştirdik ve  “Mercedes Modellere Ait Fiyatları Sekmeler Arasında Gezinerek Öğrenebilirsiniz.” yazısını da Caption olarak yazdık. Ve label.Visible özelliğini kullanrak sadece Marka sekmesi seçiliyken bu etiketin görünebilir olmasını sağlayabiliyoruz. Bunun sonucunda ise sadece marka sekmesinde etiket görünür olarak diğer etiketleri kapatıyor, diğer sekmeleri seçtiğimizde ise görünmez oluyor ve alttaki etiketler görülebiliyor.

    3. Aşama: UserForm_Initialize Event’inin Kullanılması: 

    TabStrip nesnesine ait default event _Change’dir. Yani eğer siz sekmeler arasında geçiş yaparsanız yazdığınız kodlar çalışacaktır. Bu durum, TabStrip ilk açıldığı zaman, TabStrip kod ekranına yazdığımız kodların, değişikliklerin ekrana yansımamasına neden olur. Bu durumu düzeltmek daha doğrusu etrafından dolaşmak için de TabStrip’in üzerinde yer aldığı User Form’un _Initialize Event’ini kullanırız. Bu sayede user form çalışır çalışmaz, TabStrip’de bir değişikliğe gerek duymaksızın, TabStrip üzerindeki nesneler için yazdığımız değişiklikler çalışır. 

    Ayrıca TabStrip tasarım ekranında hangi Sekme seçiliyse, UserForm çalıştırıldığında da o sekme seçili olarak gelir. Ancak biz ilk sekmenin seçili olarak gelmesini istediğimiz için yine UserForm_Initialize Event içine bu konuyla ilgili de bir satır kod yazıyoruz. 

    4. Aşama: Kod Ekranı_UserForm_Initialize() 

User _Forms_TabStrip_Ex_1 UserForm Initialize

    Üst kısımda da bahsettiğim gibi UserForm_Initialize event’i kullanmamızın sebebi, TabStip de sekmeler arasında bir seçme işlemi yapmadığımızda(Change Event) yazdığımız kodların çalışmayacak olmasıdır. Bu nedenle User Form Initial Event i kullanarak, TabStrip’i istediğimiz gibi manipule edebiliyoruz. Şimdi UserForm_Initial Event içine yazdığımız kod satırlarını inceleyelim. 

    *TabStrip1.Value=0————————-> Bu kod ile 0 numaralı sekmenin yani ilk sekmenin TabStrip ekrana geldiğinde seçilmiş olmasını sağlıyoruz. Aksi durumda tasarım ekranında hangi sekme seçiliyse, o açılacaktır.  

    *L1.Caption=”Mercedes-Benz”————->Burada L1 etiketine değer atıyoruz. Bu değer sadece ‘Marka’ sekmesinde böyle kalacak, diğer sekmelerde ise ilgili modelin ismi yer alacaktır. Biz eğer bu kodu TabStrip_Change event içine yazmış olsaydık, farklı bir sekme seçilip tekrar ‘Marka’ sekmesi seçilmeden bu etiket aktif olmayacak ve bu yazı görünmeyecektir. Bence deneyip farkı görebilirsiniz.

    *Ortu.Visible=True ——————————> Bu kod, açılacak olan ‘Marka’ sekmesinde “L1” etiketi dışındaki bütün etiketleri örten bir etiketi aktif eder. Bu sayede boş olan etiketler görünmeyecek ve daha derli bir görünüm sağlanacaktır. ‘Marka’ sekmesi için boş olacak etiketleri gizlemek için farklı yöntemler de uygulanabilir. Mesela;

    -Kullanılmayan etiketlerin dış sınırlarının kaldırılması

    -Kullanılmayan etiketlerin .Visible özelliğinin True’dan False’a döndürülmesi   

bu yöntemlerden 2 tanesidir. Aşağıdaki görselde ‘Ortu’ Etiketi aktif olduğu için altında yer alan etiketlerin hiç biri görülememektedir.

User Forms_TabStrip_Marka_Tab

    *Ortu.Caption=”Mercedes Modellere Ait Fiyatları Sekmeler Arasında Gezinerek Öğrenebilirsiniz.”————>Burada hem sekmenin boş ekranı dolduruluyor hem de kullancıılara ufak bir yönlendirme yapılıyor. 

    *Ortu.TextAlign=fmTextAlignCenter———>Sadece örtü etiketi üzerine yazılmış olan yazının, etiketi ortalaması sağlanıyor. 

 

     5.Aşama: Seçili Olan Sekmeye Göre Etiketlerin Değerlerinin Değişmesi

    Bu kısımda yazdığımız kod tam anlamıyla bir Koşullu Durum oluşturulmasından ibarettir. Koşulumuz tamamiyle ;

TabStrip.Value değerinin  0, 1, 2, 3 değerlerinden biri olması olarak ayarlanmıştır[0_(‘Marka’), 1_(‘A Serisi’), 2_(‘C Serisi’), 3_(‘E Serisi’)]. Yazdığımız kod biraz uzun olduğu için parça parça değerlendireceğiz. 

    *Aşağıdaki resimde User Forms Initial_Event(), TabStrip_Change_Event()‘de 0 ve 1 Numaralı sekmelerin seçilmeleri durumları için yazılan kodları görebilirsiniz.

User Forms_Ex1 Code 1

1 numaralı kısım UserForms_Initial() event ve üst kısımda üstünden geçmiştik. 

2 numaralı kısımda UserTab.Value=0 olduğu durumu inceliyoruz. Gördüğünüz gibi sadece ana etiket ‘L1’e bir değer atanıyor ve, diğer etiketleri örten büyük ‘ortu’ etiketi aktifleşiyor. Şimdi zaten 1.Kısımda bu etiketi aktifleştirmiştiniz, neden tekrar burada görünür kılmaya ihtiyaç duydunuz diye düşünebilirsiniz. Sebebine gelince; sekmeler arasında gezerken 1, 2 ve 3 numaralı sekmeler seçildiğinde Ortu etiketinin görünme durumu değiştirilerek, görünmez yapılmaktadır. Diğer etiketlerde gezindikten sonra tekrar ‘Marka’ etiketine tıklanırsa ve eğer burada Ortu etiketinin .Visible özelliği True’ya çevrilmezse, altta yer alan etiketler görünecek ve ortaya daha az hoş olan bir görüntü çıkacaktır. Sebebi basitçe budur. 

3 numaralı kısım aslında sadece etiketlere değer atamaktan ibarettir. Yani eğer 1 numaralı Tab seçilirse(üzerinde A Serisi yazan) etiketlerin değerleri bu yazdığımız koddaki gibi olsun diyoruz. Etiketlere farklı isimler vermiştik zaten. L1-L2-L3 etiketleri ana başlık ve sütun başlıkları, M etiketleri modellerin yazıldığı etiketler ve F etiketleri ise Fiyatların olduğu etiketler. Sadece etiketlere değer atamanın yanısıra, yazılan değerlerin de etiketi ortalaması için her etiket tanmlama satırının altına “Etiket.TextAlign=fmTextAlignCenter” kodunu ekledik. Bu özelliği isterseniz TabStrip’e ait Properties penceresinden de müdehale edebilirsiniz. 

    Biz burada fiyatları ve modelleri örneğin daha anlaşılabilir olması açısından elle yazmayı tercih ettik. Ancak bütn bu değerleri isterseniz bir sheet üzerinden de okutabilirsiniz. (Örnek 2 değerlerin sheet’ten okunması üzerine hazırlanmıştır.)

4 Numaralı kod kısmı ise If bloğunun altında yer alan ve TabStrip.Value=2 olan yeni ‘C serisi’ ne ait verilerin ekrana yansıtılmasını sağlan bölümdür. Bütün kod 3 numara ile aynı, ancak etiketlerde yazdırılacak olan değerler farklıdır.

User Forms_TabStrip_Ex_1_Code_2

 

 

5 Numaralı kod kısmı ise If bloğunun altında yer alan ve TabStrip.Value=3 olan yeni ‘E serisi’ ne ait verilerin ekrana yansıtılmasını sağlan bölümdür. Bütün kod 3 ve 4 numara kod bölümüyle aynı, ancak etiketlerde yazdırılacak olan değerler farklıdır.

User Forms_TabStrip_Ex_1_Code_3

 

Örnek 2: Farklı İlçelerde Yer Alan Aynı Tip Ev Fiyatlarının Farklı Sekmelerde Görüntülenmesi
    Örnek 1’de işlediğimiz kod yazımı biraz fazla uğraştırıcıydı. Daha doğrusu her şeyi elle girmek zorundaydık. Bu işlemde ise yazacağımız Private_Sub ve bu Private_Sub’ı Event’ler tarafından kullanılır hale getirmek ile kod yazılımını biraz daha kısalttık. Elle girdiğmiz veriler artık worksheet’ler üzerinden otomatik olarak okunabiliyor. Farklı sekmelere göre farklı veriler okunuyor ve kullanıcının gözlemine sunuluyor. Şimdi hemen kodu incelemeye başlayalım. 

User Forms_TabStrip_Ex_2_Visual_1 #Örneğimiz, Ankara’nın birbiriyle sınır paylaşan ve çok yakın fiziksel özellikleri sahip Etimesgut, Bağlıca ve Yaşamkent ilçelerinde yer alan eşdeğer ev fiyatlarının farklı sekmelerde görüntülenebilmesini sağlayan bir User Form ve TabStrip uygulaması geliştirmektir. 
Çalıştırıldığı zaman solda yer alan ekran ortaya çıkacak ve ilçelerde yer alan ev fiyatları, TabStrip sekmelerinde gezinerek görüntülenebilecektir. 
Oluşturduğumuz bu basit ekran için sizler de alternatif tasarımlar oluşturabilirsiniz. 
Mesela üst sekmeleri ilçe isimleri değil de oda sayıları yapabilirsiniz. Bu sayede de oda sayısına göre ilçelerdeki ev fiyatlarını görebilirsiniz.
Bizim burada yaratmaya çalıştığımız örnek sadece konuya ilişkin bir temel oluşturma amaçlıdır. Konu ve kullanım iyice anlaşıldığı taktirde kullanılan veriler ve tasarım sayısı tamamiyle size kalmıştır.

1.Aşama:Worksheet üzerinde okunacak verilerin oluşturulması.

    İlk önce basit bir tablo ile ilçe isimleri, oda sayıları ve fiyatların yer aldığı bir tablo oluşturduk. Burada önemli noktalardan birisi; sekmelere vereceğiniz isim ile buradaki ilçe isimlerinin birebir aynı olmasıdır.

User Forms_TabStrip_Ex_2_HouseList

 

 2.Aşama:TabStrip Tasarımı

    İlk önce basit bir tablo ile ilçe isimleri, oda sayıları ve fiyatların yer aldığı bir tablo oluşturduk. Burada önemli noktalardan birisi; sekmelere vereceğiniz isim ile buradaki ilçe isimlerinin birebir aynı olmasıdır. TabStrip’e bir adet daha Tab ekledikten sonra Tab isimlerini listedeki isimlerle aynı olacak şekilde değiştiriyoruz. Sonra da Tab’lar üzerinde görmek istediğimiz her şeyi ‘Label’ nesnesi ile yapmaya karar veriyoruz. Mavi oklarla gösterilmiş olan bütün nesneler ‘Label’ yani etikettir. Üzerlerindeki yazılar da ‘Caption’ özelliklerinin karşılıklarıdır. 

ÖNEMLİ NOT: Eğer bir Tab’a sıra numarası yerine ismiyle hitap etmek veya ismine ulaşmak isterseniz(Seçili Olan Tab İçin);

TabStrip.SelectedItem.Caption ifadesini kullanabilirsiniz.

User Forms_TabStrip_Ex_2_Design

    3.Aşama: Private_Sub Oluşturma

    İlk önce seçilen Tab’ın adını worksheet’te bulup sonra da ilgili fiyatları etiketlerin Caption özelliğine atayan görevi inceleyelim. Ancak daha öncesinde bu subroutine in ne yaptığını açıklayalım. 

Subroutine çalıştırıldığı zaman ilk önce bizim worksheet üzerinde yer alan tablonun ilçeler sütununda(Range(“b3:b5”)) seçili olan Tab’ın ismini arayacak ve değerin yazıldığı hücreyi H değişkenine atayacak. 

Sonra da etiketlerin Caption özelliklerini sırayla H hücresinin sağdaki 3 hücresinin içindeki değerlere eşitleyecektir.

User FormsTabStrip_Ex_2_Private_Sub

A Kısmında .Find metodunun hücre referansını atayacağı değişkenin tanımını yapıyoruz. TabStrip üzerinde seçili olan Tab’ın adını arıyoruz ve bulduğumuz hücrenin referansını H değişkenine atıyoruz. 

B Kısmında ise H değişkenine atanan hücrenin sağdan 3 adet değerini sırayla etiketlere atıyoruz.

Ancak bu Private_SubRoutine’in çalışması için bir şekilde tetiklenmesi, çalıştırılması lazım. Bunun için 2 farklı Event’e ihtiyacımız var.

 

4.Aşama User Forms_Initiate() Event ve TabStrip_Change() Event

User Forms TabStrip_Ex_2_EventsA’ : User_Form_Initiate Event ile birlikte ilk önce 0 sıra numaralı Tab’ı seçiyoruz. Sonra da Yazmış olduğumuz DegerBulma Private Subroutine’ini çağırıyoruz. Bu sayede seçilmiş olan Etimesgut ilçesinin adı worksheet’te aranıyor, bulunuyor ve etiketlere fiyatlar atanıyor. 

B’:TabStrip_Change Event ile de direk DegerBulma Subroutine’ini çağırıyoruz. Yani her farklı Tab seçiminde DegerBulma Sub-Routine’i içerisindeki işlem tekrarlanıyor ve her seferinde farklı ilçe adı için farklı fiyatlar, Label4, 5 ve 6’nın ‘Caption’ özelliğine atanıyor. 

    Gördüğünüz gibi örnek 2 çok daha zekice yazılmış bir koddur. Siz de VBA kullana kullana kendinize ait fikirler geliştirerek farklı algoritmalar geliştirebilir seviyeye geleceksiniz.

 

 

 

 

    MultiPage Nedir?

    MultiPage nesnesi kullanım ve görüntü itibariyle TabStrip’e benzer ancak kapasitesi çok daha geniş bir nesnedir.  İlk başta şunu vurgulamak gerek; TabStrip’e eklenen nesneler her tab için sabitken, MultiPage nesnesinde her sayfa kendine ait nesnelere sahiptir. Sayfaların her birini ayrı ayrı seçip nesneleri sanki boş bir UserForm’a eklermiş gibi eklemelisiniz. Yani örnek vermek gerekirse, MultiPage nesnesinin her sayfasına farklı bir TabStrip, çerçeve veya kontrol grubu, textbox, label ekleyebilirsiniz. 

1-MultiPage Görünümü;

User Forms_MultiPage_Visual_1#MultiPage User Form ekranına eklendiği anda TabStrip ile aralarındaki benzerlik dikkat çekiyor. Aslına bakarsanız tek farklılık üst kısımda bulunan, sayfalar ve tablolar arasında geçiş yapabilmemize olanak sağlayan tışlar üzerindeki ‘Page 1’ yazılarıdır. TabStrip’te Tab1 iken MultiPage’de Page 1 olmuştur. 

#MultiPage nesnesinin Properties penceresine göz attığımızda yine ‘Caption’ özelliğini TabStrip’te olduğu gibi göremiyoruz. 

#Properties penceresinde gördüğümüz özellikler şimdiye kadar işlemiş olduğumuz nesnelerinkiyle hemen hemen orta olduğu için çok fazla üzerinde durmuyorum. 

#Önemli bir noktadan bahsetmek istiyorum. O da MultiPage nesnesine sadece kenarlarını tıklayarak ulaşabileceğinizdir. Çünkü eğer nesnenin kenarlığı dışında bir yerini tıklayacak olursanız, MultiPage içersinde yer alan Page, yani Sayfala tıklamış olursunuz. Hata yapmamak ve yanlış nesnenin özelliğini değiştirmemek adına, MultiPage’i seçtiğinizden Properties penceresindeki (name) özelliğini kontol ederek emin olmanızı tavsiye ederim.

2-MultiPage Sayfalar;

User Forms MultPage_Page_Visual#MultiPage nesnesi eklendiğinde 2 adet sayfa ile ekrana gelir. Şimdi MultiPage nesnesinin çok kullanacağınız bazı özelliklerini inceleyelim.

    1-Yeni Sayfa Eklemek:Eğer daha fazla sayfaya ihtiyac duyuyorsanız, TabStrip nesnesinde olduğu gibi, sayfa isimlerinin bulunduğu kısma sağ tıklayarak ‘New Page’ seçeneğini seçebilirsiniz. 

    2-Sayfa İsimlendirme: TabStrip’lere alternatif olarak 2 farklı yolla sayfalara isim verebilirsiniz. Birinci yol, sayfaların üstte yer alan isimlerine sağ tıkladıktan sonra ‘Rename’ seçeneğine tıklayarak, ikini yol ise ismini değiştirdiğiniz sayfanın Properties penceresinde yer alan ‘Caption’ özelliğini değiştirme yoluyla. 

    TabStrip dersinde ilgili Tab ismini değiştirmek istediğinizde sadece ilk yolu kullanabiliyordunuz. Çünkü Tab’lerin kendilerine ait Properties pencereleri yoktu. Burada ise her pencere farklı bir nesne gibi kendine ait Properties penceresine sahiptir. 

    3-Index: Properties penceresinde yer alan Index, o pencerenin bütün pencereler arasındaki sıra sayısını belirtir. TabStrip dersinden hatılayacağınız gibi orada Ornek1 de sayfaların Index’lerine göre bir koşullu durum oluşturmuştuk. Kısaca üzerinden geçmek istersek ilk sayfanın index’i 0’dan başlar ve devam eder. Yani 8 adet sayfa varsa, son sayfanın index numarası 7’dir. Şimdi bu konuyla ilgili çok ufak bir hatırlatma yapmak istiyorum. Eğer MultiPage ekranına çok sayıda sayfa eklemeniz gerekirse ve sayfalar arasında geçiş yapmakta zorlanıyorsanız muhtemelen ilk sayfaya ve son sayfaya gitmek için CommandButton’lar kullanmanız gerekecektir. İlk sayfaya gitme konusunda bir sıkıntı yaşamayacaksınız. Haliyle sadece sayfa index’ini 0 girmeniz yeter. Ancak diyelim ki sayfa sayınız fazla ve devamlı da değişim gösterebiliyor. Bu pozisyonda MultiPage.Pages.Count ile sayfa sayılarını öğrenebilirsiniz ancak eğer bulduğunuz değerden 1 çıkartmazsanız, kod hata verecekti. Ayrıca bu kodu, üzerinde çalışmakta olduğunuz User Form’un _Initialize() Event’ine yazacağınızı da unutmayın.

MultiPage1.Value = MultiPage1.Pages.Count – 1    —————————> Son Sayfayı seç

MultiPage1.Value = 0    —————————————————————-> İlk Sayfayı Seç

    4-Picture: İsterseniz MultiPage nesnesini resim defteri gibi dahi kullanabilirsiniz. Properties sayfasında yer alan Picture özelliğine bir resim ekleyebilir, hemen altında yer alan PictureAllignment ile resmin sayfadaki yerini ve PictureSizeMode ile de resmin ekranı kaplamasına, yakınlaşmaya veya olduğu görünmesini sağlayabilirsiniz. Burada mantıklı seçenekler sırayla ‘fmPictureAllignmentCenter’ ve ‘fmPictureSizeModeStrech’ olacaklardır. Bu sayede resim ekranın ortasından başlayacak şekilde ekranın boyutu değişse dahi bütün sayfayı kaplayacaktır.

User Forms MultiPage_PictureProperty

    Gördüğünüz gibi User Forms göze hoş gelen şeyler için de kullanılabilmektedir.

    MultiPage’e ait özelliklerden yeteri kadar bahsettik. Şimdi MultiPage nesnesinin kullanımını görelim. Bu amaç doğrultusunda Frame nesnesi için oluşturduğumuz örneği kullanacağız. İlk önce Frame örneğinde tasarlamış olduğumuz örneğe ait görseli hatırlayalım.

User Forms_Frame-Design     Frame nesnesine ait tasarımımızda 3 adet çerçeve oluşturmuştuk. Gördüğünüz gibi Kişisel Bilgiler, Adres Bilgileri ve Eğitim pencereleri User Forms üzerini kapsamakta. 

MultiPage bize etkin alan kullanımı bakımından büyük bir avantaj sağlamaktadır. Çünkü normal koşullarda bütün User Form’u kapsayan bu çerçeveleri, tek bir  çerçeve alanına MultiPage’de yer alan sayfalar yardımıyla sıkıştırabiliriz. 

    Bu işlemi daha önceden hazırlamış olduğumuz çerçeveleri kopyalayıp MultiPage’de farklı sayfalara yapıştırarak gerçekleştiriyoruz. Siz isterseniz yeni çerçeveler oluşturarak da bu işlemi gerçekleştirebilirsiniz. Şimdi sırayla görsellerde bütün bir User Form’u kaplayan çerçevelerin nasıl çok dar bir alana yerleştirildiğini göreceksiniz.

User Forms MultPage_UserForm

    Tabi çerçeveleri MultiPage içerisine alırken boyutlarını birbirlerine eşitledik, Frame’lere ait ‘Caption’ özelliğini kaldırdık ama aynı ismi Sayfa ‘Caption’ına verdik. MultiPage kullanmanın User Form üzerinde ne kadar alanı boşa çıkarttığını görebilirsiniz. Çünkü bu User Form’un boyutu ile Frame nesnesi örneğimizde kullandığımız User Form’un boyutu aynı.

    Diğer sayfaları inceleyelim.

Page 1

User Forms MultiPage_Picture

Page 2

User Forms MultiPage_KisiselEgitim

Page 3

User Forms MultiPage_Adres

Page 4

User Forms MultiPage_Egitim

    Multipage kullanımı ve bazı avantajlarından bahsetmeye çalıştım. Umarım konuyla alakalı aklınızda bir soru kalmamıştır. 

    User Forms ScrollBarScrollBar Nedir?

    ScrollBar nesnesi, değerler veya sayfalar arasında daha rahat gezinmemizi sağlayan bir çeşit alettir. Bazen kilomuzu girmemiz istenilen bir formda bazen de çoklu menüler arasında geçiş yapmamız gereken yerde karşımıza çıkar. Ama en bariz örneği internet sayfalarında sağ tarafta yer alan ve bizim alt sayfalara veya üst sayfalara daha rahat ulaşmamızı sağlamasıdır. Aslı itibariyle ScrollBar’ın anlamı kayan, kaydırılan, kaydırmalı çubuktur. Kendisine ait bir alanda kimi zaman aşağı yukarı kimi zamanda yatay olarak karşımıza çıkar. Bu esnada ScrollBar nesnesinin değeri, bir içeriğe bağlıdır ve bağlı olduğu içeriği hem değiştirir hem de bağlı olduğu içerik tarafından değiştirilir. 

User Forms ScrollBar_Visual_1#ScrollBar nesnesinin veri tipi ‘Long Integer’dır ve maksimum alabileceği değer buna bağlı olarak 2 147 483 647’ dir. Ayrıca bir ScrollBar nesnesi sadece tam sayı değeri alabilir, ondalık değerler almaz. 

#Şimdi Eklemiş olduğumuz ScrollBar Nesnesine göz atalım. Bu ilk örnekte User Form üzerinde bir adet TextBox ve bir Adet de ScrollBar yer almaktadır. Bu iki nesne bir birleriyle henüz bağlanmamış olduğu için textbox içerisinde herhangi bir değer görememekteyiz. 

#Ancak şimdiden size bir hatırlatma yapmak istiyorum.  Eğer ScrollBar için maksimum sınır belirleyecek olursanız, insanların TextBox içerisine ya elle müdehale ederek, ScrollBar içerisindeki değeri, ScrollBar maksimum değerinin üzerinde yazabilmelerine karşı ‘Enable’ ve ya ‘Locked’ özelliklerini kullanarak kapatın veya textbox’ın Change() Eventi içerisine ScrollBar’ın maksimum alacağı değer geçildiğinde aktif olacak bir koşul yerleştirin. Aksi durumda ‘Run-Time Error’ oluşacaktır.  Yine farklı bir hata, Type Mismatch’, kullanıcının yanlışlıkla TextBox içerisindeki değeri bütünüyle silmesiyle de yaşanabilir. Çünkü textbox’tan gelen değeri bir matematiksel işlem içerisinde kullanıyor olabilirsiniz ve textbox içerisindeki değerin silinmesi, Integer tipindeki değeri String’e çevirir ve bu hataya sebebiyet verir.  

Şimdi, ufak örneğimize geçmeden önce ScrollBar’a özgü birkaç özelliği Properties Penceresi üzerinden inceleyelim. 

User Forms ScrollBar_PropertiesWindow

 # Delay= Bu özellik yön tuşlarıyla ScrollBar’ın değerini değiştirirken, ki yön tuşuna basılı tuttuğunu zamandan bahsediyorum, değişim hızını ifade eder. Buradaki değeri ne kadar büyütürseniz, değer o kadar artacak veya azalacaktır.

#Enables= Elle müdehala edilip edilememesini kontrol eder. Eğer bu özelliğin değerini ‘False’ seçerseniz, User Form çalıştırıldığında sadece bağlı olduğu textbox nesnesinin değeri değiştirildiğinde ScrollBar hareket eder. Bağlı olduğu değeri kontrol edemez, bağlı olduğu değer tarafından kontrol ediliri. 

#Height= Enine yükseklik

#Left= Üzerinde yerleştirilmiş olan nesnenin sol kenarına olan uzaklık.

#Max-Min= ScrollBar’ın hareket edeceği veya ifade edebileceği maksimum ve mininmum değerlerdir.

# MousePointer= Buradaki seçenkeler, fare imlecinin ScrollBar üzerinde geldiği zaman almasını istediğiniz şekle ait alternatiflerdir.

#Orientation= ScrollBar’ınızın yatay veya dikey yönünü belirtir. İlk kez bir ScrollBar eklerken, mouse yardmıyla zaten ScrollBar’a yön verebiliyoruz. 

#SmallChange= Değer artış miktarıdır. Normalde 1 gelir, ancak 5 yaparsanız, her tıkla değer 5 değişir.

#Value=Başlangıçta ScrollBar’ın aldığı değerdir. 

#Width= Yatayda Genişlik, Dikine Yüksekliktir.

 

     ScrollBar’ın özelliklerine göz attığımıza göre, artık sıra bir örnekle ScrollBar’ın işleyişini görmekte. Örnek için yarattığımız senaryoda bir sulama sistemini çalıştıran pompaya ait kontrol panelini kullandığımızı hayal edelim. Bu duruma göre yaptığımız tasarım ve kabuller;

    -Pompa % 50 performans ile çalışmaya başlıyor,

    -Pompanın çalışma gücünü sadece ‘ScrollBar’ nesnesi kullanarak ayarlayabiliyoruz,

    -Yüzde değerini gösteren TextBox’ın altında bir adet Label var ve çalışma performansına göre azdan çoğa doğru rengini maviden kırmızıya değiştiriyor, aynı zamanda da boyu uzuyor,

   -Diğer bir Label’da yazı ile kullanıcıya bilgi veriliyor. Performans 0 iken yeşil renge bürünüp sistemin durduğunu, 100 performans değerindeyken de kırmızıya bürünüp tam performansta çalışıldığını kullanıcıya bildiriyor. 

User Forms ScrollBar_PumpControl_V1 Ulşmak istediğimiz görüntü tam olarak bu.

Şimdi ilk önce User Form üzerinde eklediğimiz nesneleri inceleyelim sonrasında ise 

arka planda bu görüntüyü yakalamamızı sağlayan Event ve Procedure’lerden 

oluşan kodu detaylı bir şekilde inceleyelim. 

 

Nesnelerin yer aldığı ekranı, User Form’u inceleyelim.

User Forms ScrollBar Design    1 -User Form İsimini ‘Pompa Kontrol Birimi’ olarak değiştirdik.

    2-‘txtYuzde’: Gördüğünüz gibi bu TextBox’ın içinde default değer olarak 50 yazıyor ve elle müdehaleye kapalı. 50 olan Default değeri, TextBox’a ait properties penceresindeki Value değerini değiştirerek elde ettik.  50 değerini seçmemizin nedeni ise performansın 100 üzerinden değerlendirilmesi ve bizim orta değerden başlamak istememiz. İsteyen bu değeri, ScrollBar’ın alabileceği değerler arasında kalmak şartıyla, istediği değere çekebilir. Tek şart boş bırakmamak. 

    Sonrasında ise üst kısımda açıklamış olduğum gibi Textbox içerisine ScrollBar’ın alabileceği değerden fazlasının yazılması veya yazan değerlerin silinmesini engellemek amacıyla TextBox’ın elle müdehale özelliğini kapattık. Sebebi ScrollBar’ın alabileceği değerin üzeri bir değer elle girilirse ve de matematiksel işlemlerde kullanılan TextBox.Value silinirse makro hata verecektir.(Değer silinirse, boş olan değer empty string olarak değerlendirilir ve eğer matematiksel işlemlerde kullanılıyorsa ‘Type Mismatch’ hatası verir.)

3-‘GucAyarı’ Scrollbar: İlk olarak ScrollBar’ın minimum değerini 0, maksimum değerini ise 100 olacak şekilde, Properties penceresinde ayaraldık. Normalde User Form çalıştırıldığında bir ScrollBar ekrana sola dayalı şekilde gelir. Ancak biz GucAyarı adını verdiğimiz ScrollBar’ın değerini ‘txtYuzde’ TextBox’ının değerine yani 50’ye eşitledik. 50 değeri de ScrollBar’ın makismum değerine eşit olduğu için ScrollBar’ın çubuğu, ortada olacak şekilde görülmektedir.  Bu işlemi UserForms_Initialize Event’i altına textbox ile scrollbar değerlerini birbirlerine eşitleyerek gerçekleştirdik. 

4-‘lblIlerlemeGostergesi’ Etiketi: Tamamiyle görsel amaçlı olarak yerleştirdiğimiz bir nesnedir. 0’dan 100’e kadar olan performansa göre bu etiketin boyu uzuyor veya kısalıyor. Aynı zamanda da rengi, performans arttıkça maviden kırmızıya dönüşüyor.

5-‘lblBildirimEkrani’ Etiketi: Yine tamamiyle görsel özellikte olup, textbox değerini biraz süsleyerek kullanıcıya iletiyor. Ayrıca performans yüzdesi 0 olduğu zaman sistemin durduğunu, 100 olduğunda ise tam güçte çalıştığını ekranda yazıyor. Bunlara ek olarak User Form ilk çalıştığında ise sistemin yüzde 50 güç ile çalışmaya başladığını kullanıcıya bilgi olarak aktarıyor. 

Şimdi de yazdığımız kodu inceleyelim. Kodumuzu ve her satırını numaralandırdık. Umarım aklınıza takılan en ufak bir şey bile bu aşamada yanıt bulabilecektir.

User Forms ScrollBar_PumpControlCode

 

1) User Form ilk çalıştırıldığında nesneler default olarak, yani hiçbir özellikleri(Caption değerleri varsa görünmezler) yomuş gibi ekrana gelirler. Bunun sebebi ise genellikle bizim yazdığımız kodların daha doğrusu procedure’lerin çalışmaları için ilk önce tıklama(Click()) veya değiştirme(Change()) gibi event’ler tarafından tetiklenmeye ihtiyaçları vardır. UserForm_Initialize() Event in içinde bulunan procedure’ler ise sadece User Form’un çalışması ile tetiklenirler. Biz de bu durumu kullanarak istediğimiz nesne için istediğimiz kodu UserForm_Initialize event içine yazarak nesnelerin, kendi event’lerinin tetiklenmesini beklemeden, istediğimiz şekilde ekrana gelmesini sağlıyoruz. Bu kapsamda;

1.1) GucAyarı ScrollBar değerini TxtYuzde TextBox değerine eşitliyoruz. Bu sayede TextBox’ın Default değeri olan 50 değeri ScrollBar’a atanmış oluyor.

1.2) Burada lblIlerlemeGostergesi adını verdiğimiz etiketin rengini RGB fonksiyonu ile değiştiriyoruz. Bu aşamada RGB ile ufak bir hatırlatma yapalım. RGB fonksiyonu Red-Kırmızı, Green-Yeşil ve Blue-Mavi renklerinin 255’şer farklı tonunu bir araya getirerek yeni renkler üretir. Yazım şekli de ;

RGB(255,0,0)=Tamamiyle Kırmızı

RGB(0,255,0)=Tamamiyle Yeşil

RGB(0,0,255)=Tamamiyle Mavi 

olarak sırayla kırmızı, yeşil ve mavi renklere ait rakamlar yazılır. Bu tonların karışımı ise 16 777 216 (256x256x256 (0-255 yani 256 adet)) adet renk ortaya çıkartır. 

Biz de burada RGB yazma kuralında kırmızı ve mavi için (Yani ilk ve üçüncü parametrelere) bir fomül geliştirdik ve bu sayede 100 performans anında etiket renginin tamamiyle kırmızı, performansın 0 olduğu anda ise mavi olmasını sağladık. 

Formül çok basit aslında sadece kırmızıyı ifade eden sayının yani ilk parametrenin yerine; txtYuzde*2,55 yazdık. Bu sayede txtYuzde değeri 100 olduğunda kırmızının değeri de 100*2,55=255 maksimum değerine ulaşmasını, aynı anda da mavi rengin olduğu kısma (255 – txtYuzde * 2,55) yazarak, performans değerinin 0’a yaklaştığı anlarda etiket renginin maviye, performans değerinin de 100’e yaklaşmasıyla etiket renginin kırmızıya kademeli olarak dönmesini sağladık. 

Hatta ilk açılışta performan değeri yani ‘txtYuzde’ değeri 50 olduğu için mavi ve kırmızıya ait renk değerleri birbiriyle aynı olmakta sonuç olarak da etiketin rengi mükemmel bir mor rengini almaktadır.  Aşağıda ilk açılış anında etiketin rengini görebilirsiniz.

1.3)  ‘lblIlerlemeGostergesi’ etiketinin rengini bir üst maddede  performans seviyesine göre ayarlamıştık ve hatta yukarıdaki görselde görebileceğiniz gibi  performans seviyesi 50 olduğunda, bizim ilerleme çubuğumuzun boyu da yarım. User Form ilk açıldığı zaman yazdığımız kod sayesinde hem etiketin rengi mor oluyor hem de boyu yarım oluyor. Şimdi bu maddede etiketin boyunu performansa göre değiştiren kodu inceleyelim.

‘lblIlerlemeGostergesi.Width = txtYuzde.Value * (84 / 100)’——-> Yaptığımız işlem aslında gayet basit. Sadece etiketin ‘width’ değerini yani genişliğine bir değer atıyoruz. burada kullandığımız değeri hesap ederken, o anki performans ile etiketin genişliğinin 100’de 1’ini çarpıyoruz. Burada 100 e böldüğümüz 84 değeri User Form üzerinde lblIlerlemeGostergesi etiketinin alabileceği maksimum değerdir. Altında ve üstünde yer alan ‘txtYuzde’ ve ‘GucAyari’ scrollbar’ının genişliğine göre lblIlerlemeGostergesi de 84 birim olarak ayarlanmıştır. 

Yani eğer performans txtYuzde değeri 20 ise lblIlerlemeGostergesi’nin genişliği de = 20 x (84 / 100) =16.8 birim olacaktır. 

UserForm_Initialize() event ile txtYuzde değeri 50 olduğu için biz de bu formülü ekleyerek lblIlerlemeGostergesi etiketinin de yarıda olmasını sağlayabiliyoruz. Her performans değeri için bu ‘Width’ değerini değiştiren kod da aynı olup farklı bir Event içine yazılmıştır(Madde 3.3). İlgili maddede tekrar üzerinde kısaca duralacaktır. 

1.4 ) Burada yine ‘lblBildirimEkrani’ etiketinin, UserForm ilk açıldığı zaman txtYuzde etiketi değeri ile sistemin çalışmaya başlandığı kullanıcıya bildiriliyor. 

2 ) GucAyari ScrollBar’ına ait Change() Event bölümüdür. 

2.1 ) Burada txtYuzde değeri txtYuzde değeri, GucAyarı ScrollBar’ın aldığı değere atanıyor. Eğer bu kod olmazsa, ScrollBar(GucAyarı) değeri değiştiğinde txtYuzde değeri değişmeyecektir. 

3 ) Bu bölüm txtYuzde Change() Event e ait procedure lerin yazıldığı bölümdür. Bu yazdığımız kodları biraz değiştirerek 2 numaralı ScrollBar içerisine de yazabilirdik .

3.1 ) Bu kısımda ScrollBar’ın değerini txtYuzde değerine eşitliyoruz. Amacımız txtYuzde değeri değiştiği zaman ScrollBar’ın da değişmesini sağlamak. Bu kod satırını silersek bu aşamada bir sıkıntı yaşatmaz. Sebebi ise txtYuzde TextBox’ını elle değiştirmeye karşı kapalı tutuyor olmamız. 

3.2 ) Burada 1.2 kısmında anlatmış olduğumuz etiketin rengini değiştirme kodunun aynısıdır. Artık txtYuzde etiketinin değeri her seğiştiğinde, etiket rengi de değişecektir. 

3.3 ) Burada 1.3 bölümünde yazmış olduğumuz kodun aynısını kullanıyoruz. Yani etiket boyunu ayarlıyoruz. Artık bu kod txtYuzde Change() event içersinde olduğu için txtYuzde değeri her değiştiğinde lblIlerlemeGostergesi etiketinin boyu da değişecektir. 

3.4 – 3.5  ve 3.6 numaralı kısımlarda ise sadece lblBildirimEkrani’na yazı yazdırıyoruz. 

txtYuzde değeri 100 olursa hem Sistemin maksimumda çalıştığın belirtip uyarı için etiket rengini kırmızıya boyuyoruz, 

txtYuzde değeri 0 olduğu zaman sistemin kapalı olduğunu belirtiyoruz ve etiketin rengini açık bir yeşile çeviriyoruz. 

Diğer anlarda ise sistemin kaç performansta çalıştığını yine etiket yardımı ile bildiriyoruz ve etiket rengini gri yapıyroz. Eğer bu bölüme yani ‘Else’ kısmına etiket rengini gri  gri(vbButtonFace User Form’un rengidir) yapacak kodu girmezsek etiketin rengi, txtYuzde değeri 100 olursa kırmızı, 0 olursa da yeşil olarak kalacaktır. Bu yüzden değiştirmek zorundayız.  

Şimdi görselleri inceleyebiliriz.

1- Pompa Kapalıyken 

User Forms ScrollBar_Pump_Closed

2-Pompa %20 performansta çalışrken

ScrollBar_Pump_20

3-Pompa %80 performansta çalışrken

User Forms ScrollBar_Pump_80

 4-Pompa maksimum performansta çalışırken
User Forms ScrollBar_Pump_Max
 
 
    Bu yaptığımız örnekle beraber ScrollBar nesnesi ile ilgili gerekli her şeyi gördüğünüzü düşünüyorum ancak her zaman aklınza takılan herhangi bir şey için bana ulaşabilirsiniz. İletişim adresimiz: ‘[email protected]’. Görüşmek üzere.

User Forms SpinButton SpinButton Nedir?

     SpinButton nesnesi ScrollBar gibi çalışır ve diğer bir nesnenin değerini değiştirmemize olanak verir. Örneğin bir TextBox değeri istediğimiz değerde azaltabilir veya arttırabilir. Aynı şekilde bir etiketin ‘Caption’ değerini de değiştirebilir. 

    ScrollBar nesnesinde olduğu gibi, TextBox nesnesi ve SpinButton nesnesi birbirlerine bağlandıktan sonra eğer SpinButton’ın maksimum alabileceğinden daha fazla bir değer TextBox içerisinde girilirse, kod hata  verecektir. 

    Run-Time Error ‘380’: “Could not set the Value propery. Invalid property value”=Value özelliğine değer atanamadı, Geçersiz Value özelliği. Bunun anlamadı, value özelliğinin alabileceği değerin dışında bir değer, Value özelliğine atanmak istenmiştir. 

    ScrollBar nesnesi ile çoğu özelliğinin ortak olmasından dolayı, SpinButton özelliklerine değinilmeden, bir örnekle TextBox ve SpinButton’un kullanımını göreceğiz. 

    Konumuza hazırladığımız örnek ile devam edelim. 

    Örnek 1- Antraman Programı Hazırlamak

     Daha önceden bir spor salonuna kayıt yaptırdıysanız bilirsiniz, herkes elinde bir kağıtla gezer. Kağıtın üzerinde de hangi hareketten kaç set yapmanız ve her setin kaç tekrardan oluşacağı yazar. İşte biz de bu antraman programını hazırlamak için kullanabileceğiniz basit bir kullanıcı ekranı, User Form hazırladık. 

User Forms SpinButton_NewWorkOutProgram

 

    Şimdi adım adım bu görüntüyü elde etmek için ne yaptığımızı görelim. Size benim tavsiyem ilk aşamada kendiniz de deneyin ve aynı görüntüyü elde etmeye çalışın, arka plana istediğiniz fotoyu koyabilirsiniz tabi ki. Şimdi başlayalım,

    1 ) User Form içerisine bir adet Frame ekledik ve ‘Caption’ özelliğini sildik. 

    2 ) Sonrasında Frame’e arka plan olarak bir resim ekledik. https://www.pexels.com/ adresinde ücretsiz indirip kullanabileceğiniz güzel resimler bulabilirsiniz.  Aşağıda Frame ve Resime ait değiştirdiğim özellikleri bulup, kendiniz de aynı şekilde uygulayabilirsiniz. Ama tavsiyem kesinlikle bir seçim yapmadan önce biraz kurcalamanız. 

         -PictureAlignment=2-frmPictureAlignmentCenter

         -PictrureSizeMode=1-frmPictureSizeModeStretch

         -SpecialEffect=frmSpecalEffectRaised

    3 ) En üstte mavi arka planlı olarak görünen etiketi oluşturdum ve Başlık olarak kullandım. (lblBaslik)

    4 ) Mekiğe ait etiketleri oluşturdum bu kapsamda;

          -lblMekik, lblMekikSet, lblMekikTekrar etiketleri ile ‘Mekik’-‘Set’-‘Tekrar’ yazılarını oluşturdum. Sonrasında ise txtMekikSet ve txtMekikTekrar Textboxlarını ve yanlarını da spnMekikSet ve spnMekikTekrar SpinButton’larını ekledim. Biraz karışık gibi görünsede aslında verdiğimiz isimler nesnelerin görevlerini az çok anlatıyor. Yine de bi görsel sizi baya rahatlatacaktır.

User Forms SpinButton_WorkOut_Objects

    5)Diğer Şınav ve Koşu ile ilgili veri girdiğimiz bölgelere yine aynı şekilde isimler verdik. Onun için 4 numaralı maddeyi tekrarlamayacağım.

    Daha önceden de bahsettiğim gibi veri giriş ekranınızda etiketler, tuşlar, veri giriş kutucukları gibi nesnelerin sayısı arttıkça ilk başta nesnelerinize isim verirken harcadığınız zamana değdiğini göreceksiniz. Çünkü kodlama işleminde hep bu isimleri kullanacaksınız. Eğer düzgün isimlendirme yapmadıysanız sizi büyük bir kamaşa bekliyor olacaktır.

    6 ) TextBox’ların Locked özelliği elle müdehalenin önüne geçmek amacıyla ‘True’ seçilmiştir. 

    7 ) Set sayılarını değiştiren SpinButton’ların değer arttırma özelliğini 1, Tekrar ve Dakika değerlerini değiştiren SpinButton’ların değer arttırma özelliği de 5 olarak değiştirilmiştir (Properties penceresinde SmallChange =1 ve SmallChange=5).

Şimdi de kodu inceleyelim.

*Mekik

User Forms SpinButton_Ex_Mekik_Code

*Şınav

User Forms SpinButton_Ex_Sinav_Code

*Koşu

User Forms SpinButton_Ex_Kosu_Code

    Gördüğünüz gibi yaptığımız tek şey, TextBox ve SpinButton değerlerini birbirine bağlamak. Bu noktada TextBox nesnesinin elle müdehale edebilme özelliği kapalı olduğu için, her ne kadar da SpnButton bütün işlevi yerine getirse de, biz tersi durumda kodun çalışması için yine de ekstra satırları kodumuzun içine yazdık. 

    Umarım konu ile alakalı aklınızda herhangi bir şey kalmamıştır. Eğer kaldıysa her zaman e-posta yoluyla iletişime geçebilirsiniz. Herkse kolay gelsin. 

 


User FormsDateTime Picker Nedir?

    DateTimePicker nesnesi, bizim takvim gibi bir ara yüzden tarih seçebilmemize olanak verir. İlk olarak söylemem gereken şey, bu nesnenin sadece Windows’un 32bit olan versiyonunda çalıştığı. Lütfen bilgisayarınızın System-Type ile karıştırmayın. 

    Bu nesne sadece excel’e ait bir nesne olmadığı için, Office yüklü bilgisayarlarda dahi hazırda yüklü olmayabilir. Onun için ilk yapmamız gereken, bu nesnenin olup olmadığını kontol etmektir. Bu işlemin nasıl yapıldığını anlatmıştım ancak kısa bir şekilde üzerinden geçmemizin bir sakıncası olmaz diye düşünüyorum. ToolBox’a sağ tıklayarak ‘AdditionalControls’ seçeneğine tıkladığınızda ToolBox’a ekleyebileceğiniz bütün kontrolleri görebilirsiniz. İşte eğer bu listede MicrosoftDateTimePicker varsa zaten yüklüdür demektir. Yanındaki kutucuğa tik işareti koyarak ToolBox üzerine sabitleyebilirsiniz. Ancak eğer yoksa indirip, yüklemeniz gerekecektir. Bu işlemi aşağıdaki adımları izleyerek gerçekleştirebilirsiniz.

    1) DateTime Picker Dosyasının Yüklenmesi

1-Ilk olarak ‘mscomct2.ocx’ isimli dosyayı bilgisayarınıza inidirin. Arama motorunda ilk harfleri girdiğinizde ne kadar popüler bir dosya olduğunu göreceksiniz.

2-Dosya zip içinde inecektir, zipten çıkartın.

3-Windows kalasörünü açın

4-Eğer 32 bitlik Window kullanıyorsanız ‘System32’ dosyasına, 64 bit kullanıyorsanız da ‘SysWOW64’ dosyası içerisine zipten çıkarttığınız dosyayı kopyalayın. 

5-Dosya kopyalandıktan sonra son işlem olarak kaydedilmesi(‘Register’) gerekiyor. Bu işlem için;

    *Bilgisayarda program aradığımız yere, genellikle windows tuşuna basarak ulaştığınız ve allta yer alan arama çubuğuna ‘cmd’ yazıyoruz ve çıkan ‘commandPrompt’ dosyasına sağ tıklayıp ‘Run As Administator’ seçeneğini tıklıyoruz. 

User Form DateTimePicker_Registration1

    *İkini olarak açılan ekranda            ‘c:\windows\system32>’ yanına bitişik şekilde ‘cd c:\windows\syswow64’ yazıyoruz ve ‘ENTER’a basıyoruz

    *Alta yeni gelecek satıra ise ‘regsvr32 mscomct2.ocx’ yazdıktan sonra ‘ENTER’ a basıyoruz. Aşağıda yer alan resimdeki gibi bir onay almamız gerekir.

User Forms DateTimePicker_Register2

    Tam olarak resimdeki kodları yazmış olmanız gerekiyor. Enter’a bastıktan sonra da eğer hata yapmadıysanız ekrandaki mesajı görürsünüz. 

Dikkat bu işlemi 64 bit için gerçekleştiriyoruz. 

    Register işlemini gerçekleştirdikten sonra, ToolBox’a sağ tıkladıktan sonra, ‘Additional Control’ seçeneğini tıklıyoruz. Açılan pencerede ‘Microsoft Date And Time Picker Control 6.9..’ seçeneğini bulup yanına tik koyuyoruz. Eğer isterseniz aynı şekilde listenin alt kısımlarında yer alan ‘Microsoft MonthView Control 6.0’ nesnesini de ekleyebilirsiniz. ‘OK’ tuşuna basın ve artık bu nesneleri ToolBox üzerinde görebilirsiniz.

User Forms DateTimePicker_Add

 

    1) DateTime Picker Nesnesinin Kullanımı

    DateTimePicker, takvimden tarih seçmemizi mümkün kılan çok kullanışlı bir nesnedir. Sadece User Form, Frame, TabStrip veya Page üzerine yerleştirin ve değerini excel de bir hücreye atayın işte bu kadar. 

User Forms DateTimePicker Display     #DateTime Picker görseldeki gibi tek bir satır olarak yer kaplar ancak eğer üzerine tıklarsanız, resimde gördüğünüz gibi açılacak ve takvim görünümünde olacaktır. 

     # MonthlyView ise, hiç tıklamadan takvim görünümünde ekranda yer kaplamaktadır. Onun kullanışı da aynıdır sadece bir gün seçmeniz yetrlidir. Ayları da üst kısımda ‘ay’ isminin yanında olan oklarla sağa sola doğru hareket ettirebilirsiniz. 

     #Value özelliği tarih değerini belirtir. 

     #Daha önceden söylediğim gibi DateTime Picker sadece excel veya office’de kullanılan bir nesne değildir. Hal böyle olunca bazı özellikleri Excel ile uymaz. Bu konuda başınızı ağrıtacak bir adet özellik var o da  Date&Time Picker’a ait MinDate özelliğine ait olan 01.01.1601 değeridir. Eğer herhangi bir şekilde 1900’lü yıllardan önce bir tarihi DateTime  Picker ile girmeye çalışırsanız, bu işlem hataya yol açacaktır. Sebebi ise Excel VBA için son tarih değerinin 01.01.1901 gibi bir değer olmasıdır.  

    #Format özelliğinin değerini değiştirirseniz, tarih görünümünü ekrandaki kısa formattan uzun, özelleştirilmiş(Custom) ve sadece saat olarak değiştirebilirsiniz.

    1-dtpShortDate———–>Yukarı görseldeki formattır. ‘01.01.1910’

    2-dtpLongDate————>Uzun Formatta Rakamla Gün, Yazıyla Ay Rakamla Yıl ve Son Olarak Yazıyla Gün yazar. ‘ 28 Kasım 2019 Çarşamba’ gibi. 

    3-Time———————–>Sadece Saati Gösterir

    4-dtpCustom————–>Kendinizi Bir Format Belirleyebilirsiniz

 

Bu noktadan sonra tasarım ve bu değerin nereye aktarılacağına siz karar vereceksiniz. Kolay gelsin.

 

Dünya Çapında Araştırmacılara Ait Çalışmaları Okumak İsterseniz https://www.researchgate.net/profile/Ender_Dagdelen adresini Ziyaret Edebilirsiniz. Ana Sayfaya Dönmek İsterseniz De Aşağıdaki Tuşu Tıklayınız.

 

Herkese Kolay Gelsin, İyi Çalışmalar

 Soru ve Öneriler İçin;

[email protected]