Özellik ikonu

UserForm_Initialize

İndirme izni yok

Genel Bakış

UserForm_Initialize (Initialize event), bir UserForm bellege yuklendiginde, form ekranda gorunmeden once calisan olay yordamidir. Acilir liste doldurma, metin kutularina varsayilan deger yazma ve baslik gibi ilk ayarlari yapma gorevlerinde kullanilir. Formun yasam dongusunde genellikle yalnizca bir kez tetiklenir.

Olay yordami nereye yazilir​

Bu olay yordami, UserForm'un kendi kod modulune yazilir; standart modulde ya da sayfa modulunde calismaz.
  • Alt+F11: Visual Basic Düzenleyicisi'ni (VBE) acin.
  • Proje Gezgini: Proje Gezgini'nde (Project Explorer) formu cift tiklayin ve formu sag tiklayip Kodu Görüntüle (View Code) secin.
  • Hazir iskelet: Kod penceresinin ustundeki sol listeden UserForm, sag listeden Initialize secin; Excel yordam iskeletini kendisi yazar.
Yordamin adi UserForm_Initialize olmalidir. Formun adini (ornegin frmSiparis) degistirseniz bile olay yordaminin adi degismez; her zaman UserForm_Initialize olarak kalir.

Söz dizimi​

Olay yordaminin genel yapisi su sekildedir:
VBA 3 satır
Private Sub UserForm_Initialize()
    ' Formun ilk ayarlari burada yapilir
End Sub
  • Parametre: Olayin parametresi yoktur; yordam bos parantezle yazilir.
  • Private: Yordam yalnizca form modulunde gecerlidir; Excel iskeleti bu sekilde olusturur.
  • Me: Form kendi kodundan Me anahtar sozcugu ile anilir; ornegin Me.Caption formun baslik metnidir.

Ne zaman calisir: Initialize, Activate ve Show farki​

Initialize, form bellege yuklenirken calisir. Bu, Load deyimiyle, formun Show yontemiyle ilk kez gosterilmesiyle ya da kodda formun bir ozelligine veya denetimine ilk kez basvurulmasiyla olur. Form yalnizca gizlendiyse (Hide) bellekte kalir; tekrar Show cagrildiginda Initialize yeniden calismaz. Form Unload ile bosaltilip yeniden yuklenirse Initialize tekrar calisir.
  • UserForm_Initialize: Bellege yuklenirken bir kez calisir; liste doldurma ve varsayilan degerler icin uygundur.
  • UserForm_Activate: Form her etkin oldugunda calisir; Hide sonrasi yeniden gosterildiginde de tetiklenir. Odak verme ve her gosterimde yenilenmesi gereken islemler icin uygundur.
  • UserForm_Terminate: Form bellekten kaldirilirken calisir.
Initialize calisirken form henuz gorunmez durumdadir; bu nedenle SetFocus gibi gorunurluk gerektiren islemler burada hata verebilir. Ilk odagi TabIndex sirasiyla ya da Activate olayinda ayarlayin.

1. ComboBox listesini sayfadan doldurma​

Sayfada A sutununda sehir adlari bulunuyor. Asagidaki kodu, cmbSehir adli bir ComboBox ve lblBilgi adli bir Label iceren UserForm'un kod modulune (VBE'de forma sag tiklayip Kodu Görüntüle) yapistirin. Form acilirken liste sayfadaki verilerle dolar.
VBA 19 satır
Option Explicit

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim son As Long, i As Long

    Set ws = ThisWorkbook.Worksheets("Şehir Listesi")
    ' A sutunundaki son dolu satiri bul
    son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    cmbSehir.Clear
    For i = 2 To son
        cmbSehir.AddItem ws.Cells(i, 1).Value
    Next i

    ' Liste bos degilse ilk ogeyi sec
    If cmbSehir.ListCount > 0 Then cmbSehir.ListIndex = 0
    lblBilgi.Caption = "Listede " & cmbSehir.ListCount & " sehir var."
End Sub
UserForm_Initialize
Formülünü incelemek için bir hücre seçin.
ABC
1ŞehirBölgePlaka Kodu
2İstanbulMarmara34
3Ankaraİç Anadolu6
4İzmirEge35
5BursaMarmara16
6AntalyaAkdeniz7
7TrabzonKaradeniz61
Şehir ListesiExcelDepo v1.0.0
Form ilk kez gosterildiginde (Show) Initialize calisir, ComboBox sayfadaki alti sehirle dolar ve ilk sehir secili gelir. Etiket, listedeki ogelerin sayisini gosterir. Sayfaya yeni sehir eklerseniz, form bir sonraki yuklenisinde listeye dahil olur. Form kodu oldugu icin bu ornek burada calistirilmaz.

2. Varsayilan deger ve secenekleri hazirlama​

Sayfa, formdan girilen siparisleri tutuyor. Asagidaki kodu, txtTarih, txtAdet, cmbOdeme ve optPesin adli denetimleri bulunan UserForm'un kod modulune yapistirin. Form acilirken bugunun tarihi, varsayilan adet ve odeme secenekleri hazirlanir.
VBA 20 satır
Option Explicit

Private Sub UserForm_Initialize()
    ' Form basligi
    Me.Caption = "Yeni Sipariş"

    ' Bugunun tarihini ve varsayilan adedi yaz
    txtTarih.Value = Format(Date, "dd.mm.yyyy")
    txtAdet.Value = "1"

    ' Odeme turu listesini hazirla
    cmbOdeme.List = Array("Nakit", "Kredi Kartı", "Havale")
    cmbOdeme.ListIndex = 0

    ' Varsayilan secenek
    optPesin.Value = True

    ' Tarih kutusu degistirilemesin
    txtTarih.Locked = True
End Sub
UserForm_Initialize
Formülünü incelemek için bir hücre seçin.
ABCDE
1MüşteriÜrünAdetTarihÖdeme
2Ayşe YılmazKlavye304.03.2024Nakit
3Mehmet DemirMonitör205.03.2024Kredi Kartı
4Elif KayaFare1006.03.2024Havale
Sipariş KayıtlarıExcelDepo v1.0.0
Form her yuklendiginde tarih kutusu o gunun tarihini, adet kutusu 1 degerini gosterir; odeme listesinde ilk secenek secili gelir. Tarih kutusu kilitlendigi icin kullanici onu degistiremez. Form kodu oldugu icin bu ornek burada calistirilmaz.

3. Initialize mantigini standart modulde sinama​

Form listesini doldurmadan once hangi satirlarin listeye gireceginden emin olmak isteyebilirsiniz. Asagidaki kodu standart module (Ekle > Modül) yapistirin. Ayni suzme mantigini Initialize icinde de kullanabilirsiniz: ListeyeGirerMi islevini cagirip uygun satirlari AddItem ile ekleyin. Makro, Durum sutununa her personelin forma eklenip eklenmeyecegini yazar.
VBA 22 satır
Option Explicit

' Initialize icinde de kullanilabilecek ortak suzme islevi
Function ListeyeGirerMi(dep As String) As Boolean
    ListeyeGirerMi = (dep = "Satış")
End Function

Sub ListeDurumuYaz()
    Dim ws As Worksheet
    Dim son As Long, i As Long

    Set ws = ThisWorkbook.Worksheets("Personel Listesi")
    son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To son
        If ListeyeGirerMi(CStr(ws.Cells(i, 2).Value)) Then
            ws.Cells(i, 4).Value = "Forma eklenir"
        Else
            ws.Cells(i, 4).Value = "Atlanır"
        End If
    Next i
End Sub
UserForm_Initialize
Formülünü incelemek için bir hücre seçin.
ABCD
1PersonelDepartmanŞehirDurum
2Ayşe YılmazSatışİstanbulForma eklenir
3Mehmet DemirMuhasebeAnkaraAtlanır
4Elif KayaSatışİzmirForma eklenir
5Can ÖztürkLojistikBursaAtlanır
6Zeynep ArslanSatışAntalyaForma eklenir
7Burak Şahinİnsan KaynaklarıAdanaAtlanır
Personel ListesiExcelDepo v1.0.0
Makro her satirin departmanini ListeyeGirerMi islevine sorar. Ayse Yilmaz icin D2 hucresinde Forma eklenir, Mehmet Demir icin D3 hucresinde Atlanır yazar. Ayni islevi UserForm_Initialize icinde dongu icinde cagirirsaniz, forma yalnizca Satis departmanindaki kisiler eklenir. Elif Kaya icin D4 hucresi Forma eklenir degerini tasir.

Kullanırken dikkat edin​

  • Yalnizca form modulunde calisir: UserForm_Initialize adli bir Sub'i standart module yazarsaniz Excel onu olay olarak tanimaz; hicbir zaman otomatik calismaz. Yordamin, ilgili UserForm'un kendi kod modulunde olmasi gerekir.
  • Hide Initialize'i tekrar calistirmaz: Form Hide ile gizlenip yeniden Show ile gosterildiginde Initialize yeniden calismaz; form bellekte kalmistir. Her gosterimde yenilenmesi gereken islemleri UserForm_Activate olayina, formu tamamen sifirlamak istiyorsaniz Unload Me ile kapatip yeniden yuklemeyi tercih edin.
  • SetFocus ve gorunurluk gerektiren islemler: Initialize sirasinda form henuz ekranda degildir. Bir denetime odak vermek icin SetFocus kullanmaya calisirsaniz hata alabilirsiniz. Ilk odak icin denetimlerin TabIndex sirasini ayarlayin ya da SetFocus cagrisini UserForm_Activate icine koyun.
  • Formun beklenmedik yuklenmesi: Kodda formun adiyla bir ozelligine veya denetimine basvurmak (ornegin frmSiparis.Caption), formu sessizce bellege yukler ve Initialize'i tetikler. Formu gostermeden baska bir yerden degerini okurken bu durumu goz onunde bulundurun; gereksiz yuklemeler beklenmedik yan etkilere yol acabilir.
  • Hatalar ve bos listeler: Initialize icindeki hatalar formun acilmasini engelleyebilir. Kaynak sayfanin adini dogru yazdiginizdan ve veri aralaginin bos olmadigindan emin olun; listeyi doldurmadan once ListCount ya da son satir kontrolu yapmak guvenlidir.
  • Büyük listelerde hiz: Binlerce satiri tek tek AddItem ile eklemek yavas olabilir. Bu durumda bir diziye okuyup ComboBox ya da ListBox icin List ozelligine atamak veya RowSource kullanmak daha hizlidir.
  • İlgili konular:
    • UserForm_Activate: Form her etkin oldugunda calisan olay.
    • UserForm_QueryClose: Form kapanmadan once calisan olay.
    • UserForm_Terminate: Form bellekten kaldirilirken calisan olay.
    • Show, Hide, Load ve Unload: Formun yasam dongusunu yoneten yontem ve deyimler.
    • AddItem, List, ListIndex ve RowSource: ComboBox ve ListBox denetimlerini doldurma ozellikleri.
    • Workbook_Open: Formu dosya acilirken gostermek icin kullanilan olay.
Ö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
14
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst