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.
Ç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.
Ç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.
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.
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.
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.
Ç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.
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.
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Birim Fiyat | Yeni Fiyat | Zam Oranı (%) |
| 2 | Kahve Makinesi | 4.500,00 | 5.175,00 | 15 |
| 3 | Blender | 1.800,00 | 2.070,00 | |
| 4 | Tost Makinesi | 1.250,00 | 1.437,50 | |
| 5 | Su Isıtıcı | 750,00 | 862,50 |
Zam OranıExcelDepo v1.0.0
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.| A | B | C | |
|---|---|---|---|
| 1 | Özellik | Değer | Açıklama |
| 2 | Min | 10 | En küçük değer |
| 3 | Max | 200 | En büyük değer |
| 4 | SmallChange | 10 | Ok tıklaması başına değişim |
| 5 | LargeChange | 50 | Boşluk tıklaması başına değişim |
| 6 | Value | 100 | Geçerli değer |
| 7 | Adım Sayısı | 19 | Aralığın küçük adımlarla kaç adımda geçildiği |
Çubuk AyarlarıExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar |
| 2 | Klavye | 1 | 350,00 | 350,00 |
| 3 | Fare | 2 | 180,00 | 360,00 |
| 4 | Monitör | 1 | 4.200,00 | 4.200,00 |
Sipariş FormuExcelDepo v1.0.0
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.