Genel Bakış
Frame (Çerçeve), UserForm üzerinde başka denetimleri tek bir görsel ve mantıksal grup altında toplayan kapsayıcı denetimdir. Başlık (Caption) taşıyan bir kutu çizer; içindeki seçenek düğmelerini (OptionButton) ayrı bir grup yapar, tüm içeriğini tek hamlede etkinleştirmeyi, gizlemeyi ya da kaydırmayı sağlar.
Frame, Excel çalışma sayfasına da ActiveX denetimi olarak eklenebilir (Geliştirici > Ekle > ActiveX Denetimleri > Diğer Denetimler). Ancak çalışma sayfasındaki Frame, UserForm'daki gibi içine başka denetim almaz; asıl kullanım alanı UserForm'dur.
Olay yordamı nereye yazılır: Frame olayları, Frame'in bulunduğu UserForm'un kod modülüne yazılır. Modülü açmak için formda çift tıklayın ya da formu sağ tıklayıp Kodu Görüntüle'yi seçin. Olay yordamının adı denetimin adı ile olayın adının birleşimidir:
Frame'in Click olayı yalnızca çerçevenin kendi boş alanına tıklanınca tetiklenir; içindeki denetimlere tıklanması bu olayı çalıştırmaz, o denetimlerin kendi olayları çalışır.
Makro formu açtığında Bölge ve Ödeme Şekli için ayrı ayrı bir seçenek işaretli gelir; iki grup birbirini etkilemez. Kullanıcı Tamam düğmesine bastığında form gizlenir, makro seçimleri okuyup listenin ilk boş satırına ürün, bölge ve ödeme bilgisini ekler. Frame kullanmasaydınız tüm seçenek düğmeleri tek grup sayılır ve yalnız biri seçilebilirdi.
Makro sayfaya fraBolge adlı bir çerçeve ekler ve özelliklerini okuyup yazar. Ad B2 hücresinde fraBolge, başlık B3 hücresinde Bölge Seçimi, genişlik B4 hücresinde 159,75 ve SpecialEffect değeri B5 hücresinde 3 olarak görünür. Çalışma sayfasındaki Frame'in özelliklerine ActiveX nesnesine ulaşan OLEObject.Object üzerinden erişildiğine dikkat edin; Name, Left, Top, Width ve Height ise doğrudan OLEObject nesnesinindir.
Kod, ay adlarını sayfanın A sütunundan alarak Frame içine altı onay kutusu ekler. Controls.Add üçüncü bağımsız değişkenini True verdiğiniz için denetimler hemen görünür. Onay kutularının Left ve Top değerleri formun değil Frame'in sol üst köşesine göre hesaplanır. İçerik Frame'in yüksekliğinden uzunsa ScrollHeight ile belirlenen alan dikey kaydırma çubuğuyla gezilir. Kullanıcı Tamam düğmesine basınca seçimler C sütununa yazılır.
Frame ne işe yarar
Frame, formu düzenli göstermek ve denetimleri bir arada yönetmek için kullanılır. Kullanım amaçları şunlardır:- Seçenek gruplama: Aynı kapsayıcıdaki OptionButton denetimleri tek bir grup oluşturur ve aynı anda yalnız biri seçilebilir. Formda birden fazla bağımsız seçim grubu istiyorsanız her grubu ayrı bir Frame içine koyun.
- Toplu denetim: Frame'in Enabled özelliğini False yaparsanız içindeki tüm denetimler devre dışı kalır; Visible özelliğini False yaparsanız hepsi gizlenir. Tek tek denetimle uğraşmanız gerekmez.
- Görsel düzen: Başlık ve kenarlık sayesinde ilgili alanlar (ör. Bölge, Ödeme Şekli) kullanıcıya net biçimde ayrılır.
- Kaydırma: Frame, içeriği kendi boyutundan büyükse kaydırma çubuğu gösterebilir.
Frame, Excel çalışma sayfasına da ActiveX denetimi olarak eklenebilir (Geliştirici > Ekle > ActiveX Denetimleri > Diğer Denetimler). Ancak çalışma sayfasındaki Frame, UserForm'daki gibi içine başka denetim almaz; asıl kullanım alanı UserForm'dur.
Önemli özellikler
Frame denetiminin sık kullanılan özellikleri şunlardır:- Name: Denetimin kod içindeki adı. Ad verirken fraBolge gibi bir önek kullanmanız okunabilirliği artırır.
- Caption: Çerçevenin üst kenarında görünen başlık metni. Boş bırakırsanız başlıksız çerçeve görünür.
- Enabled: False ise çerçeve ve içindeki tüm denetimler kullanıcıya kapanır (varsayılan True).
- Visible: False ise çerçeve ve içeriği gizlenir (varsayılan True).
- BackColor, ForeColor, BorderColor: Arka plan, yazı ve kenarlık renkleri. Renk RGB işleviyle verilebilir.
- BorderStyle: 0 (fmBorderStyleNone) kenarlıksız, 1 (fmBorderStyleSingle) tek çizgili kenarlık.
- SpecialEffect: Çerçevenin görünümü: 0 düz (fmSpecialEffectFlat), 1 yükseltilmiş, 2 çökük, 3 oymalı (fmSpecialEffectEtched, varsayılan), 6 tümsekli.
- Controls: Frame'in içindeki denetimler koleksiyonudur. Controls.Count alt denetim sayısını verir; For Each ile gezilebilir.
- ScrollBars, ScrollHeight, ScrollWidth, KeepScrollBarsVisible: Kaydırma çubuklarını ve kaydırılabilir alanın boyutunu belirler. ScrollBars için fmScrollBarsNone (0), fmScrollBarsHorizontal (1), fmScrollBarsVertical (2), fmScrollBarsBoth (3) kullanılır.
- Left, Top, Width, Height: Konum ve boyut (punto). Alt denetimlerin Left ve Top değerleri formun değil Frame'in sol üst köşesine göre ölçülür.
- Cycle: Sekme (Tab) tuşuyla dolaşımın Frame içinde mi döneceğini, yoksa tüm formu mu dolaşacağını belirler.
- ControlTipText, Tag, Font: Fare ipucu metni, serbest kullanım etiketi ve yazı tipi.
Önemli yöntemler ve olaylar
Sık kullanılan yöntemler:- Controls.Add: Çalışma anında Frame'e yeni denetim ekler. İlk bağımsız değişken ProgID'dir (ör. "Forms.CheckBox.1"), ikincisi ad, üçüncüsü görünürlüktür.
- Controls.Remove: Çalışma anında eklenmiş bir denetimi adıyla kaldırır. Tasarım anında eklenen denetimler bu yöntemle silinemez.
- Move: Frame'i yeni konuma ve boyuta taşır (Left, Top, Width, Height).
- SetFocus: Odağı Frame'e (içindeki ilk uygun denetime) verir.
- Scroll: Kaydırma çubuklarını kodla kaydırır (ActionX, ActionY).
Olay yordamı nereye yazılır: Frame olayları, Frame'in bulunduğu UserForm'un kod modülüne yazılır. Modülü açmak için formda çift tıklayın ya da formu sağ tıklayıp Kodu Görüntüle'yi seçin. Olay yordamının adı denetimin adı ile olayın adının birleşimidir:
VBA
7 satır
Private Sub fraBolge_Click()
' Çerçevenin boş alanına tıklanınca çalışır
End Sub
Private Sub fraBolge_Enter()
' Odak çerçeveye girince çalışır
End Sub
1. Seçenek gruplarını Frame ile ayırma
UserForm1 adlı bir form hazırlayın. Forma iki Frame çizin: fraBolge (Caption: Bölge) ve fraOdeme (Caption: Ödeme Şekli). fraBolge içine optMarmara ve optEge, fraOdeme içine optNakit ve optKart seçenek düğmelerini ekleyin. Ayrıca formda bir txtUrun metin kutusu ve Tamam yazan bir komut düğmesi bulunsun; düğmenin Click olayına UserForm modülünde Me.Hide yazın. Aşağıdaki kodu standart bir modüle yapıştırın. Her Frame ayrı grup olduğu için kullanıcı hem bir bölge hem bir ödeme şekli seçebilir. Form gösterildiği için bu örnek sayfada çalıştırılmaz.
VBA
30 satır
Option Explicit
Sub SiparisGir()
Dim ws As Worksheet
Dim sat As Long
Dim bolge As String
Dim odeme As String
Set ws = ActiveSheet
' Formu belleğe yükle ve varsayılan seçimleri yap
Load UserForm1
UserForm1.optMarmara.Value = True
UserForm1.optNakit.Value = True
UserForm1.Show
' Tamam düğmesi formu gizledi; seçimleri oku
If UserForm1.optMarmara.Value Then bolge = "Marmara"
If UserForm1.optEge.Value Then bolge = "Ege"
If UserForm1.optNakit.Value Then odeme = "Nakit"
If UserForm1.optKart.Value Then odeme = "Kredi Kartı"
' İlk boş satıra yaz
sat = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(sat, 1).Value = UserForm1.txtUrun.Value
ws.Cells(sat, 2).Value = bolge
ws.Cells(sat, 3).Value = odeme
Unload UserForm1
End Sub
Frame
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | Bölge | Ödeme |
| 2 | Laptop | Marmara | Kredi Kartı |
| 3 | Yazıcı | Ege | Nakit |
| 4 | Monitör | Marmara | Nakit |
Sipariş ListesiExcelDepo v1.0.0
2. Çalışma sayfasına Frame ekleme
Bu örnek form göstermeden çalışır: ActiveX Frame denetimini çalışma sayfasına kodla ekler, başlığını ve görünümünü ayarlar, ardından özelliklerini B sütununa yazar. Kodu standart bir modüle yapıştırıp FrameEkle makrosunu çalıştırın. Makro, daha önce eklenmiş aynı adlı Frame varsa önce siler, böylece tekrar çalıştırılabilir.
VBA
27 satır
Option Explicit
Sub FrameEkle()
Dim ws As Worksheet
Dim ole As OLEObject
Set ws = ActiveSheet
' Aynı adlı eski denetim varsa sil
On Error Resume Next
ws.OLEObjects("fraBolge").Delete
On Error GoTo 0
' Sayfaya ActiveX Frame ekle
Set ole = ws.OLEObjects.Add(ClassType:="Forms.Frame.1", _
Left:=220, Top:=20, Width:=160, Height:=80)
ole.Name = "fraBolge"
ole.Object.Caption = "Bölge Seçimi"
ole.Object.SpecialEffect = 3 ' oymalı görünüm
' Özellikleri sayfaya yaz
ws.Range("B2").Value = ole.Name
ws.Range("B3").Value = ole.Object.Caption
ws.Range("B4").Value = ole.Width
ws.Range("B5").Value = ole.Object.SpecialEffect
End Sub
Frame
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Özellik | Değer |
| 2 | Ad (Name) | fraBolge |
| 3 | Başlık (Caption) | Bölge Seçimi |
| 4 | Genişlik (Width) | 159,75 |
| 5 | Görünüm (SpecialEffect) | 3 |
Frame ÖzellikleriExcelDepo v1.0.0
3. Frame içine çalışma anında denetim ekleme
UserForm1 formuna fraAylar adlı bir Frame ve Tamam düğmesi ekleyin (düğmenin Click olayında UserForm modülüne Me.Hide yazın). Frame'in içi boş kalsın; aşağıdaki kod ilk altı ay için onay kutularını (CheckBox) çalışma anında oluşturur. Kodu standart modüle yapıştırın. Form gösterildiği için bu örnek sayfada çalıştırılmaz; kullanıcı işaretlediği aylar C sütununa Evet, diğerleri Hayır olarak yazılır.
VBA
40 satır
Option Explicit
Sub AylariSec()
Dim ws As Worksheet
Dim i As Long
Dim chk As MSForms.CheckBox
Set ws = ActiveSheet
Load UserForm1
With UserForm1.fraAylar
.Caption = "Rapora dahil edilecek aylar"
' Altı onay kutusunu Frame içine ekle
For i = 1 To 6
Set chk = .Controls.Add("Forms.CheckBox.1", "chkAy" & i, True)
chk.Caption = ws.Cells(i + 1, 1).Value
chk.Left = 6
chk.Top = 6 + (i - 1) * 20
chk.Width = 120
Next i
' İçerik sığmazsa dikey kaydırma çubuğu göster
.ScrollBars = fmScrollBarsVertical
.ScrollHeight = 6 + 6 * 20 + 6
End With
UserForm1.Show
' Seçimleri sayfaya yaz
For i = 1 To 6
If UserForm1.fraAylar.Controls("chkAy" & i).Value Then
ws.Cells(i + 1, 3).Value = "Evet"
Else
ws.Cells(i + 1, 3).Value = "Hayır"
End If
Next i
Unload UserForm1
End Sub
Frame
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ay | Satış Tutarı | Rapora Dahil |
| 2 | Ocak | 125.000,00 | |
| 3 | Şubat | 98.000,00 | |
| 4 | Mart | 143.500,00 | |
| 5 | Nisan | 110.250,00 | |
| 6 | Mayıs | 156.800,00 | |
| 7 | Haziran | 132.400,00 |
Aylık SatışExcelDepo v1.0.0
Kullanırken dikkat edin
- Denetimler gerçekten Frame'in içinde olmalı: Seçenek düğmesini Frame'in üstüne yalnızca denk getirmek yetmez; denetim forma çizilmiş olarak kalır ve gruplama çalışmaz. Denetimi kesip Frame seçiliyken yapıştırın ya da doğrudan Frame'in içine çizin. Frame'i taşıdığınızda içindekiler onunla birlikte hareket ediyorsa doğru kurulmuştur.
- Seçenek düğmesi gruplaması: Aynı kapsayıcıdaki (form ya da Frame) tüm OptionButton denetimleri tek grup sayılır. Frame kullanmak istemiyorsanız her düğmenin GroupName özelliğine aynı adı vererek de gruplayabilirsiniz. Yalnız Frame içindeki GroupName değerleri boşsa Frame gruplama işini kendisi yapar.
- Enabled ve Visible alt denetimleri etkiler: Frame'in Enabled ya da Visible özelliğini değiştirmek içindeki tüm denetimleri etkiler, ancak alt denetimlerin kendi Enabled ve Visible değerleri değişmez. Bu özellik, bir seçeneğe bağlı alanları (ör. taksit seçenekleri) topluca açıp kapatmak için kullanışlıdır.
- Konum Frame'e göre ölçülür: Frame içindeki denetimlerin Left ve Top değerleri Frame'in sol üst köşesine göredir. Kodla denetim eklerken ya da yerini değiştirirken formun koordinatlarıyla karıştırmayın.
- Grup Kutusu ile karıştırmayın: Geliştirici sekmesindeki Form Denetimleri içinde bulunan Grup Kutusu (Group Box), çalışma sayfası içindir ve UserForm Frame'inden farklıdır. UserForm'daki Frame, ActiveX/MSForms denetimidir ve Controls koleksiyonu, kaydırma çubukları gibi özelliklere sahiptir.
- Çalışma sayfası ActiveX Frame sınırı: Sayfaya eklenen ActiveX Frame içine başka denetim yerleştirilemez ve alt denetim yönetimi için uygun değildir. Bu amaçla UserForm kullanın. ActiveX denetimleri ayrıca Excel'in her platformunda (ör. Mac, web) desteklenmez.
- İlgili konular:
- UserForm: Frame'in yerleştirildiği form nesnesi.
- OptionButton: Frame ile gruplanan seçenek düğmesi denetimi.
- CheckBox: Frame içinde toplu seçimler için kullanılan onay kutusu.
- Controls koleksiyonu: Frame ve UserForm içindeki denetimleri gezmek ve eklemek için.
- MultiPage ve TabStrip: Daha çok alanı sekmelerle bölmek için alternatif denetimler.
- OLEObjects: Çalışma sayfasındaki ActiveX denetimlerine kodla erişim.
- Load, Show, Hide, Unload: Formu yöneten deyimler ve yöntemler.