Genel Bakış
UserForm (Kullanıcı Formu), Visual Basic Düzenleyicisi'nde tasarladığınız ve üzerine metin kutusu, açılan liste, düğme gibi denetimler yerleştirebildiğiniz özel iletişim kutusudur. Kullanıcıdan veri almak, seçenek sunmak ya da sayfaya doğrudan dokunmadan kayıt girişi yaptırmak için kullanılır. Form bir sınıf gibi çalışır; kendi özellikleri, yöntemleri ve olayları vardır.
Form eklemek için şu adımları izleyin:
Bu örnek form tasarımı gerektirdiği ve MsgBox kullandığı için burada çalıştırılmaz. Makro çalışınca form modal olarak açılır ve kod kullanıcı işlemini bitirene kadar bekler. Kullanıcı Tamam düğmesine basarsa form gizlenir, Tag değeri okunur ve girilen ürün adı bir ileti kutusunda gösterilir. Okuma işi bittikten sonra Unload ile form bellekten kaldırılır. Kullanıcı X düğmesiyle kapatırsa Tag boş kalır ve ileti gösterilmez; sayfadaki veriler değişmez.
Deneme yordamı KayitEkle'yi üç kez çağırır ve her çağrı bir sonraki boş satıra kayıt yazar. İlk kayıt A2 hücresinde Laptop ürünüyle başlar, tutarı D2 hücresinde 49000 olarak hesaplanır. İkinci kayıtta Monitör için tutar 31000, üçüncüsünde Klavye için tutar 8500 olur. Formunuzda düğmenin Click olayı yalnızca bu yordamı TextBox değerleriyle çağırır; TextBox içeriği metin olduğundan sayısal alanlarda CLng ve CDbl ile dönüştürme yapmalısınız.
Makro çalışınca B sütununa sabitlerin gerçek değerleri yazılır. vbModal için 1, vbModeless için 0, vbFormControlMenu için 0 ve vbFormCode için 1 değeri görülür. Kodda sayı yazmak yerine sabit adını kullanmak okunabilirliği artırır.
UserForm nedir ve nasıl eklenir
UserForm, çalışma sayfasından bağımsız bir pencere olarak açılır. Kullanıcı verileri sayfa hücreleriyle uğraşmadan form üzerinden girer, kodunuz da bu verileri doğrulayıp sayfaya yazar.Form eklemek için şu adımları izleyin:
- Visual Basic Düzenleyicisi'ni açın: Alt+F11 tuşlarına basın ya da Geliştirici > Visual Basic (Developer > Visual Basic) komutunu kullanın.
- Formu ekleyin: Ekle > UserForm (Insert > UserForm) komutunu seçin. Proje Gezgini'nde Forms klasörü altında UserForm1 adlı yeni bir form oluşur.
- Denetimleri yerleştirin: Araç Kutusu (Toolbox) penceresinden Label, TextBox, ComboBox, ListBox, CheckBox, OptionButton, CommandButton gibi denetimleri forma sürükleyin. Araç Kutusu görünmüyorsa Görünüm > Araç Kutusu (View > Toolbox) komutunu kullanın.
- Özellikleri ayarlayın: F4 tuşuyla Özellikler (Properties) penceresini açıp Name ve Caption gibi değerleri düzenleyin. Okunaklı olması için frmUrun, txtUrun, btnTamam gibi önekli adlar verin.
- Kod yazın: Forma ya da bir denetime çift tıklayınca ya da F7 tuşuna basınca formun kod modülü açılır. Olay yordamları bu modüle yazılır.
- Deneyin: Form tasarım görünümündeyken F5 tuşu formu çalıştırır.
Söz dizimi
Formu görüntülemek ve kapatmak için şu yapılar kullanılır:
VBA
4 satır
nesne.Show [Modal]
nesne.Hide
Load nesne
Unload nesne
- nesne: UserForm'un adı (ör. frmUrun) ya da formu tutan değişken. Formun kendi kodundan Me ile de başvurabilirsiniz.
- Modal: Show yönteminin isteğe bağlı parametresidir. vbModal (1) varsayılandır; form kapanana kadar başka işlem yapılamaz ve kod beklemeye geçer. vbModeless (0) ise form açıkken sayfada çalışmaya izin verir ve kod hemen devam eder.
- Show: Form bellekte değilse önce yükler, sonra gösterir.
- Hide: Formu gizler ama bellekte tutar; denetimlerdeki değerler okunabilir kalır.
- Load: Formu görüntülemeden belleğe yükler. Böylece denetimleri önceden doldurabilirsiniz.
- Unload: Formu bellekten kaldırır; denetimlerdeki değerler kaybolur.
Önemli özellikler
- Name: Kodda kullanılan ad (ör. frmUrun).
- Caption: Başlık çubuğunda görünen metin.
- Width ve Height: Formun genişliği ve yüksekliği (punto cinsinden).
- StartUpPosition: Açılış konumu. 0 Manual, 1 CenterOwner (Excel penceresinin ortası), 2 CenterScreen (ekranın ortası), 3 Windows Default değerlerini alır.
- ShowModal: True ise form modal açılır. Özellikler penceresinden ayarlanır; Show yönteminin parametresi bu ayarı geçersiz kılar.
- Tag: Kullanıcının serbestçe yazabildiği metin alanı. Formu kapatan düğmenin hangisi olduğunu kodun öbür tarafına bildirmek için kullanışlıdır.
- Controls: Formdaki tüm denetimlerin koleksiyonu. Döngüyle denetimleri topluca temizlemek için kullanılır.
- ActiveControl: Odağı o an taşıyan denetim.
- BackColor: Form arka plan rengi.
- Enabled: False yapılırsa form kullanıcı girişine kapanır.
Önemli yöntemler ve olaylar
Form olayları formun kod modülüne (UserForm modülü) yazılır. Bunun için kod penceresinin üstündeki nesne kutusundan UserForm'u, olay kutusundan istediğiniz olayı seçin. Excel yordamın iskeletini kendisi oluşturur:
VBA
4 satır
Private Sub UserForm_Initialize()
Private Sub UserForm_Activate()
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Private Sub UserForm_Terminate()
- Initialize: Form ilk yüklenirken bir kez çalışır. ComboBox ve ListBox listelerini doldurmak, başlangıç değerlerini yazmak için en uygun yerdir.
- Activate: Form her etkinleştiğinde çalışır.
- QueryClose: Form kapanmadan hemen önce tetiklenir. Cancel değerini 1 (ya da True) yaparsanız kapanma iptal edilir. CloseMode kapanma nedenini verir: vbFormControlMenu (0) kullanıcının sağ üstteki X düğmesine basması, vbFormCode (1) koddan Unload çağrılması demektir.
- Terminate: Form bellekten kaldırıldığında çalışır.
- Resize: Form yeniden boyutlandığında çalışır.
- Show ve Hide: Formu gösteren ve gizleyen yöntemlerdir.
- Click olayları: Düğmelerin Click olayı formdaki işlemin asıl kodunu taşır (ör. btnTamam_Click).
1. Formu kodla açmak ve sonucunu okumak
Projenizde frmUrun adında bir UserForm olduğunu varsayın. Formda txtUrun adlı bir TextBox ve btnTamam adlı bir CommandButton bulunsun. btnTamam düğmesinin Click olayına Me.Tag = "TAMAM" ve ardından Me.Hide satırlarını yazın. Aşağıdaki kodu standart modüle (Ekle > Modül) yapıştırın.
VBA
15 satır
Option Explicit
' frmUrun adlı UserForm projede bulunmalıdır
Sub FormuAc()
Dim frm As frmUrun
Set frm = New frmUrun
frm.Caption = "Ürün Girişi"
frm.Show vbModal
' Düğme kodu Tag = "TAMAM" yazıp formu gizlediyse
If frm.Tag = "TAMAM" Then
MsgBox "Girilen ürün: " & frm.txtUrun.Value
End If
Unload frm
Set frm = Nothing
End Sub
UserForm
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Ürün | Stok |
| 2 | Laptop | 14 |
| 3 | Monitör | 32 |
| 4 | Klavye | 75 |
Ürün ListesiExcelDepo v1.0.0
2. Form düğmesinin çağıracağı kayıt yordamı
Formdaki Ekle düğmesinin işini, formdan bağımsız bir yordama devretmek kodu düzenli ve sınanabilir tutar. Aşağıdaki kodu standart modüle yapıştırın. Form tarafında düğmenin Click olayından KayitEkle yordamını txtUrun, txtAdet ve txtFiyat değerleriyle çağırırsınız. Burada formun yerine Deneme yordamı örnek değerlerle aynı çağrıyı yapar.
VBA
23 satır
Option Explicit
' Formdaki Ekle düğmesinin çağıracağı yordam
Public Sub KayitEkle(ByVal urun As String, ByVal adet As Long, ByVal fiyat As Double)
Dim ws As Worksheet
Dim sonSatir As Long
Set ws = ThisWorkbook.Worksheets("Sipariş Kaydı")
' A sütunundaki son dolu hücrenin altındaki satır
sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(sonSatir, 1).Value = urun
ws.Cells(sonSatir, 2).Value = adet
ws.Cells(sonSatir, 3).Value = fiyat
ws.Cells(sonSatir, 4).Value = adet * fiyat
End Sub
' Form yerine örnek değerlerle deneme
Sub Deneme()
KayitEkle "Laptop", 2, 24500
KayitEkle "Monitör", 5, 6200
KayitEkle "Klavye", 10, 850
End Sub
UserForm
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar |
| 2 | Laptop | 2 | 24500 | 49000 |
| 3 | Monitör | 5 | 6200 | 31000 |
| 4 | Klavye | 10 | 850 | 8500 |
Sipariş KaydıExcelDepo v1.0.0
3. Form açma ve kapanma sabitlerinin değerleri
Show yönteminin modal parametresi ile QueryClose olayının CloseMode parametresi sabit adlarıyla kullanılır. Aşağıdaki makro bu sabitlerin sayısal değerlerini sayfaya yazar. Kodu standart modüle yapıştırın.
VBA
14 satır
Option Explicit
Sub SabitleriYaz()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Form Sabitleri")
' Show yönteminin modal parametresi
ws.Range("B2").Value = vbModal
ws.Range("B3").Value = vbModeless
' QueryClose olayının CloseMode değerleri
ws.Range("B4").Value = vbFormControlMenu
ws.Range("B5").Value = vbFormCode
End Sub
UserForm
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Sabit | Değer | Kullanıldığı yer |
| 2 | vbModal | 1 | Show: modal form |
| 3 | vbModeless | 0 | Show: modal olmayan form |
| 4 | vbFormControlMenu | 0 | QueryClose: X düğmesi |
| 5 | vbFormCode | 1 | QueryClose: Unload ile kapanma |
Form SabitleriExcelDepo v1.0.0
Kullanırken dikkat edin
- Hide ile Unload farkı: Hide formu yalnızca gizler, denetim değerleri bellekte kalır; formdan veri okuyacaksanız önce Hide kullanın, okuma bittikten sonra Unload ile kaldırın. Unload sonrasında forma ya da denetimlerine başvurursanız form yeniden yüklenir ve değerler boş gelir.
- X düğmesini denetleyin: Kullanıcı sağ üstteki X düğmesiyle formu kapatırsa form bellekten kaldırılır. İstemediğiniz durumlarda QueryClose olayında CloseMode değerini vbFormControlMenu ile karşılaştırıp Cancel = True yazarak kapanmayı engelleyin ve kullanıcıyı düğmelere yönlendirin.
- TextBox değerleri metindir: TextBox ve ComboBox içindeki değer her zaman metin olarak gelir. Sayıya ya da tarihe çevirmeden hesapta kullanmayın; IsNumeric ile kontrol edip CLng, CDbl ya da CDate ile dönüştürün. Ondalık ayracının Windows bölgesel ayarına bağlı olduğunu unutmayın.
- Initialize olayını doğru kullanın: Liste doldurma ve varsayılan değer atama işlemlerini UserForm_Initialize olayına yazın. Form Hide ile gizlenip tekrar gösterildiğinde bu olay yeniden çalışmaz; her açılışta yenilenmesi gereken işlemleri Activate olayına koyun.
- Modal ve modal olmayan form: Varsayılan modal formda Excel penceresi kullanılamaz. Formu açık tutarak sayfada çalışmak istiyorsanız Show vbModeless kullanın. Modal olmayan formda kod beklemez; Show satırından sonraki komutlar hemen çalışır.
- Dosya türü ve ortam sınırları: UserForm kodu içeren çalışma kitabını makro içerebilen biçimde (.xlsm) kaydedin; aksi halde form ve kodlar kaybolur. UserForm'lar Excel'in web sürümünde çalışmaz; masaüstü Excel gerekir.
- İlgili konular: MsgBox işlevi, InputBox işlevi, TextBox, ComboBox, ListBox, CheckBox, OptionButton ve CommandButton denetimleri, Load ve Unload deyimleri, Me anahtar sözcüğü, Worksheet nesnesi, Cells ve End(xlUp) ile son satırı bulma, Geliştirici sekmesi ve Visual Basic Düzenleyicisi. Form verisini sayfada aramak için DÜŞEYARA ve İNDİS ile KAÇINCI işlevleri de işinize yarar.