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.
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.
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.
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.
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.
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.
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.| A | B | C | |
|---|---|---|---|
| 1 | Şehir | Bölge | Plaka Kodu |
| 2 | İstanbul | Marmara | 34 |
| 3 | Ankara | İç Anadolu | 6 |
| 4 | İzmir | Ege | 35 |
| 5 | Bursa | Marmara | 16 |
| 6 | Antalya | Akdeniz | 7 |
| 7 | Trabzon | Karadeniz | 61 |
Şehir ListesiExcelDepo v1.0.0
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.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Müşteri | Ürün | Adet | Tarih | Ödeme |
| 2 | Ayşe Yılmaz | Klavye | 3 | 04.03.2024 | Nakit |
| 3 | Mehmet Demir | Monitör | 2 | 05.03.2024 | Kredi Kartı |
| 4 | Elif Kaya | Fare | 10 | 06.03.2024 | Havale |
Sipariş KayıtlarıExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Personel | Departman | Şehir | Durum |
| 2 | Ayşe Yılmaz | Satış | İstanbul | Forma eklenir |
| 3 | Mehmet Demir | Muhasebe | Ankara | Atlanır |
| 4 | Elif Kaya | Satış | İzmir | Forma eklenir |
| 5 | Can Öztürk | Lojistik | Bursa | Atlanır |
| 6 | Zeynep Arslan | Satış | Antalya | Forma eklenir |
| 7 | Burak Şahin | İnsan Kaynakları | Adana | Atlanır |
Personel ListesiExcelDepo v1.0.0
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.