Özellik ikonu

MultiPage

İndirme izni yok

Genel Bakış

MultiPage (Çok Sayfalı Denetim), UserForm üzerine yerleştirilen ve birden çok sayfayı (sekmeyi) tek bir denetim içinde toplayan ActiveX denetimidir. Her sayfanın kendi denetim alanı vardır; bu sayede çok alanlı formları kişisel bilgiler, iş bilgileri, notlar gibi mantıklı bölümlere ayırabilirsiniz. Sekmeler arasındaki geçiş kullanıcı tıklamasıyla ya da kodla yapılır.

MultiPage nedir ve forma nasıl eklenir​

MultiPage yalnızca UserForm üzerinde kullanılır; çalışma sayfasına eklenen bir denetim değildir. Visual Basic Düzenleyicisi'nde (VBE) bir UserForm açın, Görünüm > Araç Kutusu (View > Toolbox) ile araç kutusunu görüntüleyin ve MultiPage simgesini form üzerine sürükleyin. Varsayılan olarak adı MultiPage1 olan ve iki sayfa (Page1, Page2) içeren bir denetim oluşur.

Sayfa eklemek, silmek, yeniden adlandırmak ya da taşımak için sekme başlığına sağ tıklayın ve Yeni Sayfa (New Page), Sil (Delete), Yeniden Adlandır (Rename) ya da Taşı (Move) komutunu kullanın. Bir sayfanın içine denetim koymak için önce o sekmeyi seçin, sonra araç kutusundan denetimi sayfa alanına bırakın. Sayfaya konan denetimler o sayfaya aittir; başka bir sekmeye geçildiğinde görünmez olurlar.

MultiPage ile TabStrip karıştırılmamalıdır: TabStrip yalnızca sekme şeridi sunar ve denetimler formda ortak durur; MultiPage'de ise her sekmenin kendine ait denetim kümesi vardır.

Temel kullanım ve söz dizimi​

Sayfalara iki yoldan erişilir: Pages koleksiyonunun dizini (0'dan başlar) ya da sayfanın adı. Etkin sayfa Value özelliğiyle okunur veya değiştirilir; bu değer de 0'dan başlayan sayfa dizinidir. Yeni sayfa Pages.Add yöntemiyle eklenir.

VBA 4 satır
MultiPage1.Value = 1
MultiPage1.Pages(0).Caption = "Kişisel Bilgiler"
Set pg = MultiPage1.Pages.Add(Name, Caption, Index)
MultiPage1.Pages.Remove 2
Pages.Add parametreleri:
  • Name: yeni sayfanın nesne adı; isteğe bağlıdır, verilmezse Excel otomatik ad üretir.
  • Caption: sekmede görünen başlık; isteğe bağlıdır, varsayılanı otomatik üretilen addır.
  • Index: sayfanın ekleneceği sıra (0 tabanlı); isteğe bağlıdır, verilmezse sayfa sona eklenir.
Pages.Remove yöntemi silinecek sayfanın dizinini ya da adını alır. Pages.Count sayfa sayısını, Pages.Clear tüm sayfaları siler. Pages.Add bir Page nesnesi döndürür; bunu bir değişkene atayıp sayfanın Controls koleksiyonuna denetim ekleyebilirsiniz.

Önemli özellikler​

  • Value: etkin sayfanın dizini; 0 ilk sayfadır. Geçerli aralık 0 ile Pages.Count eksi 1 arasındadır.
  • Pages: sayfaları içeren koleksiyon; Count, Add, Remove, Clear ve Item üyeleri vardır.
  • Style: görünüm biçimi. fmTabStyleTabs (0) klasik sekme, fmTabStyleButtons (1) düğme görünümlü sekme, fmTabStyleNone (2) sekme şeridi hiç gösterilmez; sayfa geçişini yalnızca kodla yaptığınız sihirbaz tarzı formlarda kullanışlıdır.
  • TabOrientation: sekmelerin konumu. fmTabOrientationTop (0) üst, fmTabOrientationBottom (1) alt, fmTabOrientationLeft (2) sol, fmTabOrientationRight (3) sağ.
  • MultiRow: True ise sığmayan sekmeler birden çok satıra dizilir; False ise kaydırma düğmeleri çıkar.
  • TabFixedWidth ve TabFixedHeight: sekme genişliğini ve yüksekliğini sabitler; 0 değeri otomatik boyut anlamına gelir.
  • Enabled ve Visible: denetimin tamamını etkinleştirir veya gizler.
Page nesnesinin özellikleri:
  • Caption: sekme başlığı.
  • Name: sayfanın kodda kullanılan adı.
  • Index: sayfanın sıra numarası.
  • Enabled: False ise sekme soluk görünür ve seçilemez.
  • Visible: False ise sekme şeritte gösterilmez.
  • Controls: sayfadaki denetimler koleksiyonu.
  • ControlTipText: sekmenin üzerine gelindiğinde görünen ipucu.
  • ScrollBars ve Zoom: sayfa içi kaydırma çubukları ve yakınlaştırma.

Önemli yöntemler ve olaylar​

Olaylar UserForm'un kod modülünde, MultiPage'in adıyla (örneğin MultiPage1_Change) yazılır. VBE'de kod penceresinin sol üst listesinden MultiPage1 denetimini, sağ listesinden olayı seçerek yordam iskeletini otomatik oluşturabilirsiniz.
  • Change: etkin sayfa değiştiğinde çalışır; hem kullanıcı tıklaması hem de koddan yapılan Value ataması tetikler. Adım göstergesi güncellemek ya da sayfa geçişinde doğrulama yapmak için en uygun olaydır.
  • Click: denetime tıklandığında çalışır.
  • Enter ve Exit: denetime odak girdiğinde ve çıktığında çalışır.
  • AddControl ve RemoveControl: bir sayfaya denetim eklendiğinde ya da çıkarıldığında çalışır.
  • Pages.Add ve Pages.Remove: çalışma anında sekme eklemek ve silmek için kullanılan yöntemlerdir.
  • Controls.Add: bir sayfaya kodla denetim ekler; ProgID (örneğin Forms.TextBox.1) ve isteğe bağlı ad parametresi alır.
Sayfadaki bir denetime formun kodundan doğrudan adıyla (Me.txtAd) ya da Me.MultiPage1.Pages(0).Controls("txtAd") ile erişebilirsiniz.

1. Sekme dizinlerini ve erişim ifadelerini sayfaya yazma​

MultiPage sayfaları 0'dan başlayarak numaralanır. Aşağıdaki makro, sayfadaki sekme başlıklarının her biri için karşılık gelen Value dizinini ve Pages ile erişim ifadesini yazar; böylece dizin mantığını sayfada görebilirsiniz. Kodu standart modüle yapıştırın ve Sekme Dizini sayfası etkinken çalıştırın.
VBA 15 satır
Option Explicit

Sub SekmeIndeksleriniYaz()
    Dim ws As Worksheet
    Dim r As Long

    Set ws = ActiveSheet

    ' 2. satırdaki ilk sekme dizin 0'a karşılık gelir
    For r = 2 To 6
        ws.Cells(r, 2).Value = r - 2
        ws.Cells(r, 3).Value = "MultiPage1.Pages(" & (r - 2) & ").Caption"
        ws.Cells(r, 4).Value = "MultiPage1.Value = " & (r - 2)
    Next r
End Sub
MultiPage
Formülünü incelemek için bir hücre seçin.
ABCD
1Sekme BaşlığıValue DiziniErişim İfadesiSayfaya Geçiş
2Kişisel Bilgiler0MultiPage1.Pages(0).CaptionMultiPage1.Value = 0
3İş Bilgileri1MultiPage1.Pages(1).CaptionMultiPage1.Value = 1
4İletişim2MultiPage1.Pages(2).CaptionMultiPage1.Value = 2
5Eğitim3MultiPage1.Pages(3).CaptionMultiPage1.Value = 3
6Notlar4MultiPage1.Pages(4).CaptionMultiPage1.Value = 4
Sekme DiziniExcelDepo v1.0.0
İlk sekme olan Kişisel Bilgiler için dizin 0 olur ve ifade MultiPage1.Pages(0).Caption biçimindedir. Son sekme olan Notlar için dizin 4 değerini alır; bu sekmeye geçmek için MultiPage1.Value = 4 ataması yeterlidir. Sekme sayısı n ise geçerli dizinler 0 ile n eksi 1 arasındadır.

2. Sekmeleri kodla düzenleme ve verileri sayfaya kaydetme​

frmPersonel adlı bir UserForm oluşturun ve üzerine MultiPage1 denetimini ekleyin. İlk sayfaya txtAd ve txtSehir adlı iki TextBox, ikinci sayfaya txtDepartman adlı bir TextBox koyun; sayfaların dışına cmdKaydet adlı bir CommandButton yerleştirin. Aşağıdaki kodu bu UserForm'un kod modülüne (forma çift tıklayarak) yapıştırın. Form, Personel sayfasındaki listenin altına yeni kayıt ekler.
VBA 46 satır
Option Explicit

Private Sub UserForm_Initialize()
    Dim pg As MSForms.Page
    Dim tb As MSForms.TextBox

    With Me.MultiPage1
        .Style = fmTabStyleTabs
        .TabOrientation = fmTabOrientationTop
        .Pages(0).Caption = "Kişisel Bilgiler"
        .Pages(1).Caption = "İş Bilgileri"

        ' Üçüncü sayfayı kodla ekle
        Set pg = .Pages.Add("pgNot", "Notlar")

        ' Yeni sayfaya çok satırlı bir metin kutusu ekle
        Set tb = pg.Controls.Add("Forms.TextBox.1", "txtNot", True)
        tb.Left = 12
        tb.Top = 12
        tb.Width = 200
        tb.Height = 60
        tb.MultiLine = True

        .Value = 0   ' ilk sekme açık başlasın
    End With
End Sub

Private Sub cmdKaydet_Click()
    Dim ws As Worksheet
    Dim yeniSatir As Long

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

    ' Farklı sayfalardaki denetimlere doğrudan adıyla erişilir
    ws.Cells(yeniSatir, 1).Value = Me.txtAd.Value
    ws.Cells(yeniSatir, 2).Value = Me.txtDepartman.Value
    ws.Cells(yeniSatir, 3).Value = Me.txtSehir.Value

    ' Formu temizle ve ilk sekmeye dön
    Me.txtAd.Value = ""
    Me.txtDepartman.Value = ""
    Me.txtSehir.Value = ""
    Me.MultiPage1.Value = 0
    Me.txtAd.SetFocus
End Sub
MultiPage
Formülünü incelemek için bir hücre seçin.
ABC
1Ad SoyadDepartmanŞehir
2Ayşe YılmazMuhasebeAnkara
3Mehmet DemirSatışİzmir
4Zeynep Kayaİnsan KaynaklarıBursa
PersonelExcelDepo v1.0.0
Form açıldığında Initialize olayı sekme başlıklarını ayarlar ve üçüncü sayfa olan Notlar'ı çalışma anında ekler. Kaydet düğmesine basıldığında ilk iki sekmedeki ad, departman ve şehir bilgileri listenin ilk boş satırına yazılır; Notlar sekmesindeki metin kutusunun içeriği kaydedilmez. Ardından form temizlenir ve ilk sekmeye dönülür. Formu açmak için standart modülde frmPersonel.Show komutunu kullanabilirsiniz; UserForm gösterildiği için bu örnek burada çalıştırılmamıştır.

3. Adım adım ilerleyen sekmeli başvuru formu​

frmBasvuru adlı bir UserForm'a üç sayfalı MultiPage1, ilk sayfaya txtAd adlı TextBox, sayfaların dışına cmdIleri adlı bir CommandButton ekleyin. Kod, ad girilmeden ikinci sekmeyi kapalı tutar, sekme değiştikçe form başlığına adım numarasını yazar ve İleri düğmesiyle sıradaki sekmeye geçer. Kodu UserForm'un kod modülüne yapıştırın.
VBA 34 satır
Option Explicit

Private Sub UserForm_Initialize()
    Me.MultiPage1.Value = 0
    ' Ad girilene kadar ikinci sekme kapalı kalsın
    Me.MultiPage1.Pages(1).Enabled = False
    Call AdimBasliginiGuncelle
End Sub

Private Sub txtAd_Change()
    ' Ad doluysa ikinci sekmeyi etkinleştir
    Me.MultiPage1.Pages(1).Enabled = (Len(Trim(Me.txtAd.Value)) > 0)
End Sub

Private Sub MultiPage1_Change()
    Call AdimBasliginiGuncelle
End Sub

Private Sub cmdIleri_Click()
    With Me.MultiPage1
        ' Son sayfadaysak ilerleme; sıradaki sayfa kapalıysa da geçme
        If .Value < .Pages.Count - 1 Then
            If .Pages(.Value + 1).Enabled Then
                .Value = .Value + 1
            Else
                MsgBox "Önce ad soyad alanını doldurun.", vbExclamation
            End If
        End If
    End With
End Sub

Private Sub AdimBasliginiGuncelle()
    Me.Caption = "Adım " & (Me.MultiPage1.Value + 1) & " / " & Me.MultiPage1.Pages.Count
End Sub
MultiPage
Formülünü incelemek için bir hücre seçin.
ABC
1Ad SoyadBirimBaşvuru Tarihi
2Elif AydınPazarlama04.03.2024
3Can ÖztürkLojistik11.03.2024
4Selin ŞahinFinans18.03.2024
BaşvurularExcelDepo v1.0.0
Form açıldığında kod yalnızca ikinci sekmeyi kapatır; ilk ve üçüncü sekmeler kullanılabilir durumdadır. txtAd alanına metin yazıldığında ikinci sekme etkinleşir; her sekme değişiminde Change olayı form başlığındaki adım numarasını günceller. İleri düğmesi sekmeleri sırayla açar ve sıradaki sekme etkin değilse geçişi engelleyerek uyarı verir. Bu örnek MsgBox ve UserForm kullandığı için çalıştırılmamıştır; formu standart modülden frmBasvuru.Show komutuyla açabilirsiniz.

Kullanırken dikkat edin​

  • Dizin 0'dan başlar: Hem Value özelliği hem de Pages koleksiyonu 0 tabanlıdır. İlk sekme için 1 yazmak ikinci sekmeye gider; Pages.Count değerine eşit bir dizin ise hata verir. Son sekme her zaman Pages.Count eksi 1 dizinindedir.
  • Sayfa silinince dizinler kayar: Pages.Remove ile bir sayfa silindiğinde sonraki sayfaların dizinleri bir azalır. Birden çok sayfa silecekseniz sondan başa doğru ilerleyin ya da dizin yerine sayfa adını kullanın.
  • Sekmeler arası gezinirken denetim başvurusu: Bir sayfadaki denetime formun kodundan Me ile adıyla ulaşılır; ancak çalışma anında Controls.Add ile eklenen denetimlere derleme sırasında Me.txtNot biçiminde erişemezsiniz. Bu denetimlere Pages(...).Controls("ad") üzerinden başvurun.
  • Value atamasının Change olayını tetiklemesi: Kodla Value değerini değiştirdiğinizde Change olayı da çalışır. Olayın içinde yine Value ataması yaparsanız istenmeyen yinelemeli çağrılar oluşabilir; gerekirse bir Boolean bayrakla kontrol edin.
  • Style özelliği None iken: Style özelliğini fmTabStyleNone yaparsanız kullanıcı sekmeleri göremez ve sayfalar arasında yalnızca sizin koyduğunuz düğmelerle gezinebilir. Bu durumda Value atamasını yapan İleri ve Geri düğmelerini eklemeyi unutmayın.
  • Birden çok sekme ve form boyutu: Çok sayıda sekme formun genişliğine sığmazsa MultiRow özelliğini True yapın ya da TabFixedWidth ile sekme genişliğini küçültün. Sayfa içeriği sayfa alanından büyükse sayfanın ScrollBars özelliğiyle kaydırma çubuğu ekleyebilirsiniz.
  • Kodun yeri: MultiPage olayları çalışma sayfası ya da ThisWorkbook modülüne değil, denetimin bulunduğu UserForm'un kod modülüne yazılır. Formu açan Show komutu ise standart modülde olmalıdır.
  • İlgili konular: UserForm, TabStrip, Frame, TextBox, ComboBox, ListBox, CommandButton, Initialize olayı, Controls koleksiyonu, Show ve Unload yöntemleri, Me anahtar sözcüğü.
Ö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
9
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst