Özellik ikonu

ScrollBar

İndirme izni yok

Genel Bakış

ScrollBar (Kaydırma Çubuğu), kullanıcının oklara tıklayarak ya da kaydırma kutusunu sürükleyerek en küçük ve en büyük değer arasında bir tamsayı seçmesini sağlayan denetimdir. Çalışma sayfasına Form Denetimi ya da ActiveX Denetimi olarak, UserForm üzerine ise MSForms denetimi olarak eklenir. Seçilen değer bir hücreye bağlanabilir ya da VBA ile okunup formülleri ve makroları yönlendirmek için kullanılabilir.

Denetimin türleri ve sayfaya ekleme​

Excel'de iki ayrı kaydırma çubuğu vardır. İkisine de Geliştirici > Denetimler > Ekle (Developer > Controls > Insert) menüsünden ulaşılır. Geliştirici sekmesi görünmüyorsa Dosya > Seçenekler > Şeridi Özelleştir (File > Options > Customize Ribbon) bölümünden etkinleştirin.

  • Form Denetimi (Form Controls): Basit ve hafiftir. Değeri doğrudan bir hücreye bağlanır, VBA'da Shapes koleksiyonu ve ControlFormat nesnesi ile yönetilir. Olay yordamı yoktur, yalnızca bir makro atanabilir (OnAction).
  • ActiveX Denetimi (ActiveX Controls): Daha çok özelliği ve Change, Scroll gibi olayları vardır. VBA'da OLEObjects koleksiyonu ile yönetilir. Mac sürümünde desteklenmez.
  • UserForm denetimi: UserForm üzerindeki araç kutusundan eklenen ScrollBar, ActiveX denetimiyle aynı özellik ve olaylara sahiptir.
Form denetiminde sağ tıklayıp Denetimi Biçimlendir (Format Control) penceresinin Denetim sekmesinde geçerli değer, en küçük değer, en büyük değer, artımlı değişiklik, sayfa değişikliği ve hücre bağlantısı ayarlanır. ActiveX denetiminde önce Tasarım Modu (Design Mode) açılır, sonra sağ tıklayıp Özellikler (Properties) penceresi kullanılır.

Çubuğun yönü (dikey ya da yatay) form denetiminde şeklin genişlik ve yüksekliğine göre belirlenir. Yüksekliği genişliğinden büyük çizilen çubuk dikey, genişliği büyük olan yatay olur.

Önemli özellikler​

Aşağıdaki özellikler ActiveX ve UserForm ScrollBar denetimi içindir. Form denetiminde karşılıkları ControlFormat nesnesinde bulunur.

  • Value: Çubuğun geçerli değeri. Min ile Max arasında bir tamsayı olmalıdır. Kodla değiştirmek Change olayını tetikler.
  • Min: En küçük değer. Varsayılanı 0'dır.
  • Max: En büyük değer. Varsayılanı 32767'dir.
  • SmallChange: Bir ok düğmesine tıklandığında değerin değişeceği miktar. Varsayılanı 1'dir. Form denetiminde aynı adlı ControlFormat.SmallChange kullanılır.
  • LargeChange: Kaydırma kutusu ile ok düğmesi arasındaki alana tıklandığında değerin değişeceği miktar. Varsayılanı 1'dir. Form denetiminde ControlFormat.LargeChange kullanılır.
  • Orientation: Yönü belirler. fmOrientationAuto (-1) şekle göre otomatik, fmOrientationVertical (0) dikey, fmOrientationHorizontal (1) yataydır.
  • ProportionalThumb: Doğruysa kaydırma kutusunun boyutu aralıkla orantılı olur.
  • Delay: Ok düğmesine basılı tutulduğunda değerin tekrar değişme hızını milisaniye olarak belirler.
  • LinkedCell: Değerin otomatik yazılacağı hücre adresi. ActiveX denetiminde OLEObject üzerinden, form denetiminde ControlFormat.LinkedCell ile ayarlanır.
  • Enabled ve Visible: Denetimin kullanılabilirliğini ve görünürlüğünü belirler.
  • Name: Kodda başvurulan ad. ActiveX denetiminde varsayılan ad ScrollBar1 biçimindedir.

Önemli yöntemler ve olaylar​

  • Change: Değer değiştiğinde çalışır: ok ya da boşluk tıklandığında, sürükleme bırakıldığında ve kodla Value değiştirildiğinde.
  • Scroll: Kaydırma kutusu sürüklenirken sürekli çalışır. Değeri anlık izlemek için kullanılır.
  • Enter ve Exit: Denetim odağı aldığında ve kaybettiğinde çalışır.
  • KeyDown ve MouseDown: Klavye ve fare etkileşimlerini yakalar.
  • SetFocus: Odağı denetime verir.
  • Move: Denetimi yeni konuma taşır ya da yeniden boyutlandırır.
Olay yordamı nereye yazılır: Çalışma sayfasındaki ActiveX denetiminin olayları o sayfanın kod modülüne yazılır. Kod penceresinde nesne listesinden ScrollBar1'i, olay listesinden de olayı seçmek yordamı otomatik oluşturur. UserForm üzerindeki denetimin olayları UserForm modülüne yazılır. Form denetiminde olay yoktur; bunun yerine çubuğa sağ tıklayıp Makro Ata (Assign Macro) ile bir Sub bağlanır.

Kodla ekleme ve söz dizimi​

Çubuk kodla iki biçimde eklenebilir:

VBA 2 satır
Set shp = ws.Shapes.AddFormControl(xlScrollBar, Left, Top, Width, Height)
Set ole = ws.OLEObjects.Add(ClassType:="Forms.ScrollBar.1", Left:=100, Top:=20, Width:=20, Height:=120)
  • Type: AddFormControl yönteminde denetim türü; kaydırma çubuğu için xlScrollBar sabiti kullanılır.
  • Left, Top, Width, Height: Konum ve boyut, puan cinsindendir. AddFormControl yönteminde dördü de gereklidir. OLEObjects.Add yönteminde isteğe bağlıdır.
  • ClassType: ActiveX sınıf adı. Kaydırma çubuğu için Forms.ScrollBar.1 yazılır.
Form denetiminin ayarlarına shp.ControlFormat üzerinden, ActiveX denetiminin ayarlarına ole.Object üzerinden erişilir. Örneğin ole.Object.Max en büyük değeri verir.

1. Form denetimini kodla ekleyip hücreye bağlama​

Aşağıdaki makro bir standart modüle yapıştırılır. Dikey bir form kaydırma çubuğu ekler, D2 hücresine bağlar ve değerini 15 yapar. Fiyat formülleri D2'deki zam oranını kullandığı için çubuk oynatıldığında yeni fiyatlar kendiliğinden değişir.
VBA 26 satır
Option Explicit

Sub ZamCubuguEkle()
    Dim ws As Worksheet
    Dim shp As Shape

    Set ws = ThisWorkbook.Worksheets("Zam Oranı")

    ' Önceki çalıştırmadan kalan çubuk varsa sil
    On Error Resume Next
    ws.Shapes("ZamCubugu").Delete
    On Error GoTo 0

    ' Genişlik yükseklikten küçük olduğu için çubuk dikey olur
    Set shp = ws.Shapes.AddFormControl(xlScrollBar, ws.Range("F2").Left, ws.Range("F2").Top, 20, 100)
    shp.Name = "ZamCubugu"

    With shp.ControlFormat
        .Min = 0
        .Max = 50
        .SmallChange = 1
        .LargeChange = 5
        .LinkedCell = "$D$2"
        .Value = 15
    End With
End Sub
ScrollBar
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünBirim FiyatYeni FiyatZam Oranı (%)
2Kahve Makinesi4.500,005.175,0015
3Blender1.800,002.070,00
4Tost Makinesi1.250,001.437,50
5Su Isıtıcı750,00862,50
Zam OranıExcelDepo v1.0.0
Çubuk D2 hücresine bağlandığı için makro çalışınca D2 hücresine 15 değeri yazılır. Kahve Makinesi'nin yeni fiyatı 5.175,00, Blender'in yeni fiyatı 2.070,00 olarak hesaplanır. Çubuk F2 hücresinin yanında dikey olarak görünür; oklara tıkladıkça oran bir birim, boşluğa tıkladıkça beş birim değişir ve fiyatlar yeniden hesaplanır.

2. Çubuk ayarlarını okuma ve yatay çubuk​

Bu örnekte yatay bir form kaydırma çubuğu oluşturulur, ayarları verilir ve ControlFormat nesnesinden okunan değerler B sütununa yazılır. Okuma bittikten sonra çubuk silinir, sayfada yalnızca sonuçlar kalır. Makroyu standart modüle yapıştırın.
VBA 29 satır
Option Explicit

Sub CubukAyarlariniOku()
    Dim ws As Worksheet
    Dim shp As Shape

    Set ws = ThisWorkbook.Worksheets("Çubuk Ayarları")

    ' Genişlik yükseklikten büyük olduğu için çubuk yatay olur
    Set shp = ws.Shapes.AddFormControl(xlScrollBar, 200, 20, 120, 18)

    With shp.ControlFormat
        .Min = 10
        .Max = 200
        .SmallChange = 10
        .LargeChange = 50
        .Value = 100
    End With

    ' Ayarları okuyup hücrelere yaz
    ws.Range("B2").Value = shp.ControlFormat.Min
    ws.Range("B3").Value = shp.ControlFormat.Max
    ws.Range("B4").Value = shp.ControlFormat.SmallChange
    ws.Range("B5").Value = shp.ControlFormat.LargeChange
    ws.Range("B6").Value = shp.ControlFormat.Value

    ' Çubuğa artık gerek yok
    shp.Delete
End Sub
ScrollBar
Formülünü incelemek için bir hücre seçin.
ABC
1ÖzellikDeğerAçıklama
2Min10En küçük değer
3Max200En büyük değer
4SmallChange10Ok tıklaması başına değişim
5LargeChange50Boşluk tıklaması başına değişim
6Value100Geçerli değer
7Adım Sayısı19Aralığın küçük adımlarla kaç adımda geçildiği
Çubuk AyarlarıExcelDepo v1.0.0
Makro çalışınca ayarlar B sütununa yazılır: en küçük değer 10, en büyük değer 200, küçük değişim 10, büyük değişim 50 ve geçerli değer 100. B7 hücresindeki formül aralığı küçük değişime bölerek çubuğun uçtan uca 19 küçük adımda gezildiğini gösterir.

3. ActiveX çubuğunun Change ve Scroll olayları​

Sayfaya Geliştirici > Ekle menüsünden bir ActiveX kaydırma çubuğu çizin, Tasarım Modu açıkken adını ScrollBar1 yapın. Sayfa sekmesine sağ tıklayıp Kodu Görüntüle (View Code) diyerek aşağıdaki kodu sayfanın kod modülüne yapıştırın ve Tasarım Modu'nu kapatın. Çubuk, B2 hücresindeki sipariş adedini 1 ile 50 arasında değiştirir. Bu kod bir ActiveX denetiminin olaylarına dayandığı için örnek sayfada otomatik çalıştırılmaz.
VBA 27 satır
Option Explicit

Private Sub Worksheet_Activate()
    Dim adet As Long

    ' Min değiştirilince Value kendiliğinden değişebilir,
    ' bu yüzden adedi önceden sakla
    adet = Me.Range("B2").Value

    With Me.ScrollBar1
        .Min = 1
        .Max = 50
        .SmallChange = 1
        .LargeChange = 5
        .Value = adet
    End With
End Sub

Private Sub ScrollBar1_Change()
    ' Ok ya da boşluk tıklandığında ve sürükleme bırakıldığında
    Me.Range("B2").Value = Me.ScrollBar1.Value
End Sub

Private Sub ScrollBar1_Scroll()
    ' Kaydırma kutusu sürüklenirken anlık güncelle
    Me.Range("B2").Value = Me.ScrollBar1.Value
End Sub
ScrollBar
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünAdetBirim FiyatTutar
2Klavye1350,00350,00
3Fare2180,00360,00
4Monitör14.200,004.200,00
Sipariş FormuExcelDepo v1.0.0
Sayfa etkinleştirildiğinde çubuğun aralığı 1 ile 50 olarak ayarlanır ve başlangıç değeri B2'deki adet olur. Çubuğun oklarına tıklandığında ya da kaydırma kutusu sürüklendiğinde B2 güncellenir ve D2 hücresindeki tutar formülü yeniden hesaplanır. Sürükleme sırasında Scroll olayı, bırakıldığında Change olayı çalıştığı için adet hem anlık hem de son durumda doğru görünür.

Kullanırken dikkat edin​

  • İki ScrollBar'ı karıştırmayın: Form denetiminde olay yordamı ve Orientation özelliği yoktur; yön şeklin boyutundan belirlenir ve değer ControlFormat ile yönetilir. ActiveX denetiminde ise olaylar ve zengin özellikler vardır. Form denetiminde en küçük değer 0'dan küçük, en büyük değer 30000'den büyük olamaz.
  • Değer yalnızca tamsayıdır: Value tamsayıdır ve ActiveX denetiminde -32768 ile 32767 arasında olmalıdır. Ondalıklı bir değer gerekiyorsa çubuğun değerini 10 ya da 100 gibi bir sayıya bölerek kullanın; örneğin 0 ile 1000 arası çubuk, 0,0 ile 100,0 arası bir yüzdeyi temsil edebilir.
  • Change ve Scroll farkı: Scroll yalnızca kaydırma kutusu sürüklenirken çalışır. Change ise tıklamalarda, sürükleme bittiğinde ve kodla Value değiştirildiğinde çalışır. Anlık güncelleme için ikisine de aynı kodu yazmak gerekir.
  • Olay içinde değeri değiştirirken dikkat: Change yordamı içinde çubuğun Value özelliğini yeniden değiştirirseniz olay tekrar tetiklenir ve döngüye girebilirsiniz. Değeri yalnızca bir koşul gerçekleştiğinde değiştirin. Aralık ayarlarını (Min, Max) değiştirmek de değeri kırpıp olayı çalıştırabilir; mevcut değeri önceden saklayın.
  • Dikey çubukta yön: Dikey çubuklarda üstteki ok Min değerine, alttaki ok Max değerine gider. Yani aşağı doğru gittikçe değer artar. Yukarı gittikçe artmasını istiyorsanız hücre değerini Max artı Min eksi geçerli değer olarak hesaplayın.
  • Tasarım Modu ve dosya türü: ActiveX denetimini seçmek ya da özelliklerini değiştirmek için Tasarım Modu açık olmalıdır; olayların çalışması için kapalı olmalıdır. Olay kodları içeren dosyayı makro içerebilen çalışma kitabı (xlsm) olarak kaydedin.
  • Aynı adı kullanmayın: Kodla çubuk eklerken Name özelliğine sabit bir ad verip eklemeden önce aynı adlı eski nesneyi silin. Aksi halde makro her çalıştığında sayfaya yeni bir çubuk eklenir.
  • İlgili konular:
    • SpinButton: Küçük artırma ve azaltma düğmesi denetimi.
    • ComboBox ve TextBox: Seçim ve metin giriş denetimleri.
    • UserForm: Denetimleri bir iletişim penceresinde toplamak için.
    • OLEObjects, Shapes ve ControlFormat: Denetimleri kodla yönetmek için.
    • Worksheet_Change: Hücre değişimini yakalayan sayfa olayı.
    • KAYDIR, İNDİS ve DOLAYLI: Çubuk değerine göre veri penceresi oluşturan işlevler.
Ö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