Excel VBA UserForm Nedir?
Aşağıdaki örneği ele alalım:


VBA kodu, butona tıkladığımızda “Label1”deki başlığı “Button Clicked” olarak değiştirir. VBA kodunu çalıştırırsak, aşağıda gösterilen çıktıyı alırız:

UserForm Nasıl Oluşturulur?
VBA UserForm oluşturmak için aşağıdaki adımları inceleyelim:
- Araç çubuğundaki “Geliştirici” bölümüne gidin ve “Visual Basic” seçeneğine tıklayın. Şimdi, işlevler ve alt prosedürler eklemek için VBA Düzenleyicisi açılır. Yeni bir UserForm veya boş sayfa oluşturmak için “Ekle” ve “Kullanıcı Formu” düğmelerine tıklayın.



- UserForm’u tercihlerinize göre özelleştirin.

VBA UserForm, özelleştirebileceğiniz bir ToolBox sağlar.
Burada, yukarıdaki kullanıcı formu için üç etiket, üç metin kutusu ve bir Komut Düğmesi seçtik ve kullanıcı girdisini kabul etmek için bunları yukarıda gösterildiği gibi aralıklı yerleştirdik.
- Etiket'i sürükleyip bırakırsanız, yalnızca Etiket1'i elde edersiniz. Etiket adını değiştirmek için, sağ tıklayıp verilen etiketin "Özellikler"ini seçiyoruz.

Burada “Başlık” seçeneğini seçip Özellikler kısmından ismi düzenleyerek etiketin ismini değiştirebiliriz.
Benzer şekilde diğer elemanların etiket değerlerini de değiştirin. - UserForm'umuzu oluşturduğumuzda, "Gönder" düğmesinin parametresini tanımlamak için bir alt rutin tanımlamalıyız. Düğmenin özelliklerini tanımlamak için öğeye çift tıklayın, bu otomatik olarak bir alt rutin tanımlayacaktır.

- İsim, yaş ve cinsiyet değerlerini kabul etmek için üç değişken tanımlayın.

- Kullanıcının verdiği değerleri, kullanıcının sağladığı textbox'lar ile VBA'in okumasını sağlayalım.

TextBox1.Text komutuyla TextBox'tan değerleri alabiliriz, burada TextBox1 belirli textbox öğesinin adıdır.
Textbox'taki tüm veri tipleri VBA String olarak verildiğinden age'i bir tam sayıya dönüştürüyoruz. - Değerleri bir mesaj kutusuna yazdırın ve vbCrLf fonksiyonunu kullanarak Ad, Yaş ve Cinsiyet'i farklı satırlarda tanımlayın.

Private Sub CommandButton1_Click()
Dim name As String
Dim age As Integer
Dim gender As String
name = TextBox1.Text
age = Val(TextBox2.Text)
gender = TextBox3.Text
MsgBox “Name: ” & name & vbCrLf & “Age: ” & age & vbCrLf & “Cinsiyet: ” & gender, vbInformation, “User Information”
End Sub- VBA kodunu çalıştırın. UserForm'u çalıştıracaktır.

Ayrıntıları girin ve “Gönder”e tıklayın.
UserForm'u Biçimlendirme
Excel VBA'da bir UserForm'u biçimlendirmek için, Özellikler penceresini kullanarak formun ve denetimlerinin görünümünü ve davranışını değiştirebilirsiniz. Bunu yapmak için, UserForm Oluştur düğmesine tıklayın.

Yepyeni bir kullanıcı formu yaratacaktır. Kullanıcı formunu sürükleyerek boyutunu ayarlayabilirsiniz. Öğeyi seçip sağ tıklayarak özelliklerini görüntüleyin.

Bununla birlikte özellikler penceresini düzenleyerek penceredeki isimleri değiştirebiliriz.

UserForm’un rengini değiştirmek için UserForm “BackColor” özelliğini seçin.


Gördüğünüz gibi UserForm rengi değişti. Benzer şekilde, elemanların rengini değiştirmek için elemanın özelliklerini seçin ve rengini değiştirin.
Yazı tipini değiştirmek için özellikler penceresine gidin ve yazı tipi seçeneğini seçin.

Yazı tipini, boyutunu (kalın, italik vb.) ve harfin boyutunu değiştirebileceğiniz yeni bir pencere açılacaktır.

UserForm'un ne kadar dinamik ve özelleştirilebilir olduğunu gösterir. Şimdi VBA UserForm'larını biçimlendirmenin ve kullanmanın bazı yollarına bakalım.
Örnek 1
Diyelim ki, kullanıcı adı ve parolayı girdi olarak kabul eden bir oturum açma UserForm'u oluşturmak istiyorsunuz. Doğruysa, "Oturum Açma Başarılı" döndürür. Aksi takdirde, erişimi reddeder.
- Adım 1: Yeni bir UserForm oluşturun.

- Adım 2: Gerekli öğeleri ekleyin. Bir VBA UserForm etiketi ve bir VBA UserForm TextBox oluşturuyoruz.


- Adım 3: UserForm'un ve elemanlarının Özellikler bölümünü düzenleyerek metin kutularını ve Etiket adlarını özelleştirin.

Aşağıdaki sonucu elde edeceksiniz.

Not: Bu sadece bir örnektir. Excel VBA projenizde kullanıcı formunuzu istediğiniz gibi özelleştirebilirsiniz.
- Adım 4: Kullanıcı formunun oturum açmayı kabul etmesi veya reddetmesi için parametreleri tanımlayacak bir alt rutin oluşturmak üzere “Gönder” düğmesine çift tıklayın.

- Adım 5: Doğru kullanıcı adı ve parolayı kaydetmek için iki dize değerini başlatın.

- Adım 6: Kullanıcının verdiği değerleri kabul etmek için başka bir dize kümesi başlatın.

Kullanıcının UserForm textbox'ında verdiği kullanıcı adı ve şifre değerlerini alır.
- Adım 7: Girilen kullanıcı adı ve parolanın veritabanında saklanan kullanıcı adıyla eşleşip eşleşmediğini kontrol etmek için bir If-Else ifadesi başlatın. İstek günlüğünü kabul eder veya reddeder.

vbExclamation, “Oturum Açma Durumu” başlıklı ünlem işareti simgesine sahip bir Mesaj Kutusu sağlar.

Doğru olduğunda “Oturum Açma Durumu” başlığı ve kullanıcı adı olan bir Mesaj Kutusu döndürür. vbInformation yaygın olarak kullanılan bilgi simgesini sağlar.

Kod:
Private Sub CommandButton1_Click()
Dim correctUsername As String
Dim correctPassword As String
correctUsername = “user”
correctPassword = “XXXXX”
Dim enteredUsername As String
Dim enteredPassword As String
enteredUsername = TextBox1.Text
enteredPassword = TextBox2.Text
Eğer enteredUsername = correctUsername Ve enteredPassword = correctPassword Then
MsgBox “Giriş başarılı! Hoş geldiniz, ” & correctUsername & “!”, vbInformation, “Giriş Durumu”
Else
MsgBox “Giriş başarısız. Yanlış kullanıcı adı veya parola.”, vbExclamation, “Giriş Durumu”
End If
End Sub
- Adım 8: Kullanıcı formunu çalıştırın.

"Gönder" butonuna tıkladıktan sonra şunu alıyoruz

Örnek 2
Diyelim ki kişilerin adlarını içeren bir tablonuz var ve VBA Arama işlevini uygulamak istiyorsunuz. Bir adın listede kaç kez göründüğünü yazdırabilirsiniz ve ad yoksa listede ad yok iletisini döndürebilirsiniz.

UserForm'a bir arama fonksiyonu yerleştirerek uygulanabilir. Aşağıda bunu nasıl yapabileceğimizi görelim.
- Adım 1: Yeni bir UserForm oluşturun.

- Adım 2: Gerekli öğeleri ekleyin. Burada bir VBA UserForm etiketi, bir VBA UserForm ListBox ve bir VBA UserForm TextBox oluşturuyoruz.



Ortaya çıkan UserForm aşağıdaki gibi olacaktır:

- Adım 3: Özellikler sekmesine giderek UserForm'u tercihlerinize göre biçimlendirin.

Öğeleri seçtikten sonra, özellikler penceresinde renk, yazı tipi boyutu ve yazı tipi görünümünü seçerek tüm öğeleri özelleştirebilirsiniz.
- Adım 4: Özelleştirmeden sonra UserForm aşağıdaki gibi görünecektir.

- Adım 5: Editörü açmak ve arama fonksiyonunu uygulamak için UserForm'a çift tıklayın.

- Adım 6: Listbox’ta nelerin görüntülenmesini istediğinizi tanımlayın.

- Adım 7: Metin girildiğinde Arama alt rutinini çağıracak olan TextBox fonksiyonunu tanımlayın.

- Adım 8: Excel'de belirli bir tabloda arama yapmak için PerformSearch alt rutinini başlatın.

- Adım 9: Önceki ListBox değerlerini temizleyin ve tablonun boyutunu tutacak bir aralık değeri tanımlayın.

- Adım 10: Tablonun aralığını bulmak için Sayfa adı ve aralık değerini seçip "A" sütunundaki son boş olmayan satırı xlUp fonksiyonu ile bulun.

- Adım 11: Metin kutusu girişindeki dize değerini aramak için bir For döngüsü başlatın.

Burada,
If InStr(1, cell.Value, searchTerm, vbTextCompare) > 0 Then
ListBox1.AddItem cell.Value
Harf değerlerini kontrol etmek için InStr fonksiyonunu kullanarak 0'dan büyük bir değer döndürüp döndürmediğini kontrol ediyoruz ve bu değeri AddItem kullanarak VBA UserForm ListBox'a ekliyoruz.
Listedeki harflerle eşleşen harf yoksa, "Eşleşen sonuç bulunamadı." mesajı döndürülür.
Private Sub TextBox1_Change()
PerformSearch TextBox1.Text
End Sub
Private Sub UserForm_Click()
ListBox1.ColumnCount = 1
ListBox1.ColumnWidths = “20”
ListBox1.List = Array(“Search results will appear here.”)
End Sub
Private Sub PerformSearch(ByVal searchTerm As String)
ListBox1.Clear
Dim dataRange As Range
Set dataRange = ThisWorkbook.Sheets(“Sheet1”).Range(“A1:A10” & ThisWorkbook.Sheets(“Sheet1”).Cells(Rows.count, “A”).End(xlUp).row)
Dim cell As Range
For Each cell In dataRange
If InStr(1, cell.Value, searchTerm, vbTextCompare) > 0 Then
ListBox1.AddItem cell.Value
End If
Next cell
If ListBox1.ListCount = 0 Then
ListBox1.AddItem “No matching results found.”
End If
End Sub
- Adım 12: UserForm'u çalıştırın ve çıktıyı görüntüleyin.

VBA Kodu
Benzer şekilde UserForm'un biçimlendirmesi VBA kodunu şu ek ile düzenleyerek yapılabilir:
Me.propertyname
Burada propertyname seçili öğenin özelliğidir ve “Me” UserForm'u tanımlamak için kullanılır.
İsteğe bağlı olarak UserForm'un arka plan rengini seçtiğimiz renge değiştirebildiğimiz bir örneği ele alalım.

VBA Kodu şu şekilde düzenlenebilir:

Burada UserForm'un rengini değiştirmek için VBA kodunda Me.BackColor özelliğini seçiyoruz ve Switch-Case konseptinin yardımıyla bunu değiştirmek için birden fazla seçenek sunuyoruz.
VBA kodunu çalıştırdığımızda aşağıdaki sonucu elde ederiz:



Bu şekilde UserForm'u biçimlendirmek için VBA kodunun nasıl kullanılacağını gösterebiliriz .
VBA UserForm Show işlemini gerçekleştirmek için şu komutu kullanırız
: • UserForm1.Show
“UserForm1”i VBA UserForm'unuzda uyguladığınız özel isimle değiştirebilirsiniz.
VBA UserForm Close işlemini gerçekleştirmek için aşağıdaki kodu kullanırız.
• Unload Me
Bir VBA UserForm Close fonksiyonunu boşaltır veya tetikler.
• UserForm, VBA düzenleyicisinde düzgün bir şekilde oluşturulmamış veya adlandırılmamış.
• UserForm, yanlış ayarlar nedeniyle gizli veya görünür değil.
• UserForm'u gösteren kod yürütülmemiş veya doğru zamanda çağrılmamış.
• UserForm adında veya kodun kendisinde bir yazım hatası veya hata var.
• UserForm.Show ifadesinden önceki kodda bir hata olabilir.
VBA UserForm Close tetiklendiğinde, “UserForm_QueryClose” olayı tetiklenir.
