Genel Bakış
Page (MSForms.Page), UserForm üzerindeki MultiPage denetiminin her bir sekmesini temsil eden nesnedir. Sekmenin başlığını, görünürlüğünü, etkinliğini ve içindeki denetimleri VBA ile yönetmenizi sağlar. Çok sekmeli ayar, giriş ve rapor formlarını kodla düzenlemek için kullanılır.
Formu tasarlamak için Geliştirici > Visual Basic (Developer > Visual Basic) ile Visual Basic Düzenleyicisi'ni açın, Ekle > UserForm (Insert > UserForm) ile form oluşturun, Araç Kutusu'ndan (Toolbox) MultiPage denetimini forma sürükleyin. Sekme eklemek için sekme başlığına sağ tıklayıp New Page seçeneğini kullanabilir ya da kodla Pages.Add yöntemini çağırabilirsiniz.
Page nesnesi bir çalışma sayfası (Worksheet) değildir; yalnızca form üzerindeki bir sekmedir. Formun hangi sekmesinin açık olduğunu MultiPage'in Value özelliği verir; bu değer etkin sekmenin sıfırdan başlayan dizinidir.
TABLO (hücre = Excel'in gösterdiği değer):
A1 = Sıra
A2 = 1
A3 = 2
A4 = 3
B1 = Sayfa Başlığı
B2 = Genel
B3 = Satış
B4 = Yönetim
C1 = Görünür
C2 = Evet
C3 = Evet
C4 = Hayır
Makro form açıldığı için çalıştırılmaz. Çalıştırdığınızda formda Genel ve Satış başlıklı iki sekme görünür; Yönetim sekmesi, C4 hücresinde Hayır yazdığı için Visible özelliği False yapılarak gizlenir. Tabloyu değiştirerek sekmeleri kodu düzenlemeden yönetebilirsiniz.
TABLO (hücre = Excel'in gösterdiği değer):
A1 = Ad Soyad
A2 = Ayşe Demir
A3 = Mehmet Kaya
A4 = Fatma Çelik
A5 = Ali Yıldız
A6 = Zeynep Aydın
B1 = Departman
B2 = Satış
B3 = Muhasebe
B4 = Lojistik
B5 = Satış
B6 = İnsan Kaynakları
Makro bir formu açtığı için çalıştırılmaz. Çalıştırdığınızda forma Personel başlıklı yeni bir sekme eklenir ve A2:A6 aralığındaki beş ad liste kutusunda görünür. Sekmenin adı (pgPersonel) forma eklendiği anda tanımlanır; aynı form örneğinde makroyu ikinci kez çalıştırırsanız ad zaten kullanıldığı için hata alırsınız.
TABLO (hücre = Excel'in gösterdiği değer):
A1 = Sayfa
A2 = Genel
A3 = Satış
A4 = Maliyet
A5 = Yönetim
B1 = Yetki
B2 = Evet
B3 = Evet
B4 = Hayır
B5 = Hayır
Makro formu açtığı için çalıştırılmaz. Çalıştırıldığında Genel ve Satış sekmeleri kullanılabilir kalır; Maliyet ve Yönetim sekmeleri başlıkları görünür olduğu halde pasif (gri) olur ve içindeki denetimlere erişilemez. Yetkiyi değiştirmek için B sütunundaki Evet ve Hayır değerlerini düzenlemeniz yeterlidir.
Page nesnesi nasıl çalışır
Bir UserForm'a MultiPage denetimi eklediğinizde içinde varsayılan olarak iki Page nesnesi bulunur (Page1, Page2). Tüm Page nesneleri MultiPage'in Pages koleksiyonunda toplanır. Her Page, kendi içinde ayrı bir denetim kümesi (düğme, metin kutusu, liste kutusu vb.) barındırır; bu denetimlere Controls koleksiyonu üzerinden ulaşılır.Formu tasarlamak için Geliştirici > Visual Basic (Developer > Visual Basic) ile Visual Basic Düzenleyicisi'ni açın, Ekle > UserForm (Insert > UserForm) ile form oluşturun, Araç Kutusu'ndan (Toolbox) MultiPage denetimini forma sürükleyin. Sekme eklemek için sekme başlığına sağ tıklayıp New Page seçeneğini kullanabilir ya da kodla Pages.Add yöntemini çağırabilirsiniz.
Page nesnesi bir çalışma sayfası (Worksheet) değildir; yalnızca form üzerindeki bir sekmedir. Formun hangi sekmesinin açık olduğunu MultiPage'in Value özelliği verir; bu değer etkin sekmenin sıfırdan başlayan dizinidir.
Söz dizimi
Bir Page nesnesine MultiPage denetiminin Pages koleksiyonu üzerinden dizin ya da adla ulaşılır, yeni sekme Add yöntemiyle eklenir:
VBA
5 satır
Dim pg As MSForms.Page
Set pg = UserForm1.MultiPage1.Pages(0) ' dizinle (0'dan başlar)
Set pg = UserForm1.MultiPage1.Pages("Page1") ' adla
Set pg = UserForm1.MultiPage1.Pages.Add([Name], [Caption], [Index])
- Pages(Dizin): Sekmeyi sıfırdan başlayan sıra numarasıyla ya da Name özelliğindeki adla verir. Dizin 0 ilk sekmedir.
- Name: Add yönteminde yeni sekmenin adıdır; isteğe bağlıdır. Verilmezse Excel otomatik ad (Page3 gibi) üretir. Ad formda benzersiz olmalıdır.
- Caption: Add yönteminde sekme üzerinde görünen başlıktır; isteğe bağlıdır.
- Index: Add yönteminde sekmenin konumudur; isteğe bağlıdır, verilmezse sekme sona eklenir.
Önemli özellikler
- Caption: Sekme üzerindeki başlık metnidir.
- Name: Sekmenin kod içindeki adıdır.
- Index: Sekmenin Pages koleksiyonundaki sıfırdan başlayan konumudur; MultiPage.Value ile birlikte kullanılır.
- Visible: False yapılırsa sekme başlığı gizlenir; kullanıcı o sekmeyi göremez.
- Enabled: False yapılırsa sekme görünür kalır ancak içindeki denetimler kullanılamaz.
- Controls: Sekmenin içindeki denetimlerin koleksiyonudur; Controls.Add ile çalışma zamanında denetim eklenir.
- ControlTipText: Fare sekmenin üzerinde beklerken görünen ipucu metnidir.
- Tag: Sekmeye ek bilgi iliştirmek için kullanılan serbest metin alanıdır.
- Accelerator: Sekmeye klavyeyle geçmek için kullanılan kısayol harfidir (Alt + harf).
Önemli yöntemler ve olaylar
- Activate: İlgili sekmeyi etkin duruma getirir; MultiPage.Value değerini sekmenin dizinine eşitlemekle aynı sonucu verir.
- Controls.Add: Sekmeye çalışma zamanında denetim ekler; ProgID olarak "Forms.Label.1", "Forms.TextBox.1", "Forms.ListBox.1" gibi değerler kullanılır.
- Pages.Add / Pages.Remove: Sekme ekler ya da siler.
- Change (MultiPage olayı): Kullanıcı başka sekmeye geçince tetiklenir. Olay yordamı UserForm'un kod modülüne yazılır ve içinde etkin sekmeyi MultiPage1.Value ile öğrenirsiniz.
- Enter ve Exit (Page olayları): Sekmeye girildiğinde ve sekmeden çıkıldığında oluşur.
1. Sekme başlıklarını ve görünürlüğü sayfadan okuma
Önce Ekle > UserForm (Insert > UserForm) ile UserForm1 oluşturun ve üzerine 3 sekmeli bir MultiPage1 denetimi yerleştirin. Aşağıdaki kodu standart bir modüle yapıştırın. Makro, örnek sayfadaki tabloya bakarak her sekmenin başlığını ve görünürlüğünü ayarlar, ardından formu açar. Form açıldığı için makro otomatik çalıştırılmaz; siz çalıştırın.TABLO (hücre = Excel'in gösterdiği değer):
A1 = Sıra
A2 = 1
A3 = 2
A4 = 3
B1 = Sayfa Başlığı
B2 = Genel
B3 = Satış
B4 = Yönetim
C1 = Görünür
C2 = Evet
C3 = Evet
C4 = Hayır
VBA
21 satır
Option Explicit
' Sekme başlıklarını ve görünürlüğü çalışma sayfasından okur
Sub FormuHazirla()
Dim ws As Worksheet
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Sayfa Başlıkları")
With UserForm1.MultiPage1
For i = 0 To .Pages.Count - 1
' B sütunu başlık, C sütunu görünürlük bilgisidir
.Pages(i).Caption = ws.Cells(i + 2, 2).Value
.Pages(i).Visible = (ws.Cells(i + 2, 3).Value = "Evet")
Next i
' İlk sekmeyi etkin yap
.Value = 0
End With
UserForm1.Show
End Sub
Page
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Sıra | Sayfa Başlığı | Görünür |
| 2 | 1 | Genel | Evet |
| 3 | 2 | Satış | Evet |
| 4 | 3 | Yönetim | Hayır |
Sayfa BaşlıklarıExcelDepo v1.0.0
2. Çalışma zamanında sekme ve liste kutusu ekleme
UserForm1 üzerinde MultiPage1 bulunsun. Aşağıdaki kod standart modüle yapıştırılır. Makro, MultiPage'e yeni bir Page ekler, sekmeye bir liste kutusu yerleştirir ve örnek sayfadaki personel adlarını listeye doldurur. UserForm1.Show ile form açıldığından makro otomatik çalıştırılmaz.TABLO (hücre = Excel'in gösterdiği değer):
A1 = Ad Soyad
A2 = Ayşe Demir
A3 = Mehmet Kaya
A4 = Fatma Çelik
A5 = Ali Yıldız
A6 = Zeynep Aydın
B1 = Departman
B2 = Satış
B3 = Muhasebe
B4 = Lojistik
B5 = Satış
B6 = İnsan Kaynakları
VBA
30 satır
Option Explicit
' Yeni bir sekme ekler ve personel listesini bu sekmeye yerleştirir
Sub PersonelSekmesiEkle()
Dim ws As Worksheet
Dim pg As MSForms.Page
Dim lst As MSForms.ListBox
Dim i As Long, son As Long
Set ws = ThisWorkbook.Worksheets("Personel")
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' Yeni sekme: ad, başlık
Set pg = UserForm1.MultiPage1.Pages.Add("pgPersonel", "Personel")
' Sekmenin Controls koleksiyonuna liste kutusu ekle
Set lst = pg.Controls.Add("Forms.ListBox.1", "lstPersonel", True)
lst.Left = 12
lst.Top = 12
lst.Width = 200
lst.Height = 90
For i = 2 To son
lst.AddItem ws.Cells(i, 1).Value
Next i
' Yeni sekmeyi etkin yap ve formu göster
pg.Activate
UserForm1.Show
End Sub
Page
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Ad Soyad | Departman |
| 2 | Ayşe Demir | Satış |
| 3 | Mehmet Kaya | Muhasebe |
| 4 | Fatma Çelik | Lojistik |
| 5 | Ali Yıldız | Satış |
| 6 | Zeynep Aydın | İnsan Kaynakları |
PersonelExcelDepo v1.0.0
3. Yetkiye göre sekmeleri etkinleştirme
UserForm1 üzerindeki MultiPage1 denetiminde sekme başlıkları Genel, Satış, Maliyet ve Yönetim olsun. Kod standart modüle yapıştırılır. Makro, örnek sayfadaki yetki tablosunu okuyup her sekmenin Enabled özelliğini ayarlar ve formu açar; bu nedenle otomatik çalıştırılmaz.TABLO (hücre = Excel'in gösterdiği değer):
A1 = Sayfa
A2 = Genel
A3 = Satış
A4 = Maliyet
A5 = Yönetim
B1 = Yetki
B2 = Evet
B3 = Evet
B4 = Hayır
B5 = Hayır
VBA
23 satır
Option Explicit
' Yetki tablosuna göre sekmeleri etkin ya da pasif yapar
Sub YetkiUygula()
Dim ws As Worksheet
Dim pg As MSForms.Page
Dim i As Long, son As Long
Set ws = ThisWorkbook.Worksheets("Yetkiler")
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
For Each pg In UserForm1.MultiPage1.Pages
' Başlığı tablodaki sayfa adıyla eşleşen sekmeyi bul
If pg.Caption = ws.Cells(i, 1).Value Then
pg.Enabled = (ws.Cells(i, 2).Value = "Evet")
End If
Next pg
Next i
UserForm1.MultiPage1.Value = 0
UserForm1.Show
End Sub
Page
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Sayfa | Yetki |
| 2 | Genel | Evet |
| 3 | Satış | Evet |
| 4 | Maliyet | Hayır |
| 5 | Yönetim | Hayır |
YetkilerExcelDepo v1.0.0
Kullanırken dikkat edin
- Dizin sıfırdan başlar: Pages(0) ilk sekmedir. MultiPage1.Value ve Page.Index de sıfırdan başlar. Sekme sayısı 3 ise geçerli dizinler 0, 1 ve 2'dir; Pages(3) hata verir.
- Visible ve Enabled farkı: Visible = False sekmeyi tamamen gizler, Enabled = False ise sekmeyi görünür bırakıp içeriğini kullanıma kapatır. Etkin olan ilk sekmeyi gizlerseniz MultiPage.Value için başka bir görünür sekme seçtiğinizden emin olun.
- Ad benzersiz olmalı: Pages.Add ile verdiğiniz Name değeri formda daha önce kullanılmışsa hata oluşur. Formu her açışınızda sekmeleri yeniden ekliyorsanız eklemeden önce var olan sekmeyi kontrol edin ya da adı boş bırakıp Excel'in ad üretmesine izin verin.
- Denetimlere Page üzerinden ulaşın: Sekme içindeki bir denetim formun Controls koleksiyonunda da görünür. Denetimi doğrudan adıyla (ör. TextBox1) çağırabilirsiniz; ancak çalışma zamanında eklenen denetimleri Page.Controls.Add ile eklemek hangi sekmeye ait olduğunu açıkça belirtir.
- Page yalnızca MultiPage içinde bulunur: Page nesnesi tek başına oluşturulamaz. Sekmesiz bir görünüm için Frame, düğmeli sekme şeridi için TabStrip denetimini düşünün; TabStrip'te Page değil Tab nesnesi vardır ve sekmenin içeriği ayrı denetimlerle yönetilir.
- İlgili konular: MultiPage denetimi, TabStrip denetimi, UserForm nesnesi, Controls koleksiyonu, Frame denetimi, ListBox denetimi, UserForm_Initialize olayı, MultiPage Change olayı, Show yöntemi, Worksheets nesnesi.