Özellik ikonu

Frame

İndirme izni yok

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 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'i eklemek için VBA Düzenleyicisi'nde bir UserForm açın, Araç Kutusu (Toolbox) içindeki Çerçeve simgesini seçip forma çizin. Denetimlerin Frame'in alt öğesi olması için onları Frame'in üzerine çizin ya da forma çizilmiş denetimi kesip Frame seçiliyken yapıştırın. Yalnızca Frame'in üstüne denk gelen ama forma çizilmiş denetim Frame'e ait olmaz.

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.
Bir Frame içindeki denetime kodla ulaşmak için denetimin adını doğrudan kullanabilirsiniz (UserForm1.optEge). Ad dinamik üretiliyorsa Frame.Controls("ad") biçiminde de erişebilirsiniz.

Ö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).
Sık kullanılan olaylar: Click, DblClick, Enter, Exit, MouseDown, MouseUp, MouseMove, Scroll, Layout, AddControl ve RemoveControl.

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
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.

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.
ABC
1ÜrünBölgeÖdeme
2LaptopMarmaraKredi Kartı
3YazıcıEgeNakit
4MonitörMarmaraNakit
Sipariş ListesiExcelDepo v1.0.0
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.

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.
AB
1ÖzellikDeğer
2Ad (Name)fraBolge
3Başlık (Caption)Bölge Seçimi
4Genişlik (Width)159,75
5Görünüm (SpecialEffect)3
Frame ÖzellikleriExcelDepo v1.0.0
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.

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.
ABC
1AySatış TutarıRapora Dahil
2Ocak125.000,00
3Şubat98.000,00
4Mart143.500,00
5Nisan110.250,00
6Mayıs156.800,00
7Haziran132.400,00
Aylık SatışExcelDepo v1.0.0
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.

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.
Ö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
10
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst