Özellik ikonu

UserForm

İndirme izni yok

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.

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.
AB
1ÜrünStok
2Laptop14
3Monitör32
4Klavye75
Ürün ListesiExcelDepo v1.0.0
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.

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.
ABCD
1ÜrünAdetBirim FiyatTutar
2Laptop22450049000
3Monitör5620031000
4Klavye108508500
Sipariş KaydıExcelDepo v1.0.0
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.

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.
ABC
1SabitDeğerKullanıldığı yer
2vbModal1Show: modal form
3vbModeless0Show: modal olmayan form
4vbFormControlMenu0QueryClose: X düğmesi
5vbFormCode1QueryClose: Unload ile kapanma
Form SabitleriExcelDepo v1.0.0
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.

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.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
13
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst