Özellik ikonu

SpinButton

İndirme izni yok

Genel Bakış

SpinButton (Çevirme Düğmesi), üzerindeki yukarı ve aşağı oklara tıklanarak bir tam sayı değerini belirli adımlarla artıran ya da azaltan ActiveX denetimidir. UserForm üzerinde ya da doğrudan çalışma sayfasında kullanılır. Genellikle bir metin kutusu, etiket ya da hücreyle birlikte çalışır ve kullanıcının sayı, ay, adet gibi değerleri klavyesiz seçmesini sağlar.

SpinButton nedir ve nereye eklenir​

SpinButton kendi başına bir sayı göstermez; yalnızca Value özelliğindeki değeri değiştirir. Değeri kullanıcıya göstermek için yanına bir TextBox ya da Label koymanız veya denetimi bir hücreye bağlamanız gerekir.

  • UserForm üzerine: VBA düzenleyicisinde formu açın, Görünüm > Araç Kutusu (View > Toolbox) ile araç kutusunu görüntüleyin ve Çevirme Düğmesi simgesini forma sürükleyin.
  • Çalışma sayfasına: Geliştirici > Ekle > ActiveX Denetimleri > Çevirme Düğmesi (Developer > Insert > ActiveX Controls > Spin Button) yolunu izleyin. 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 seçeneği: Aynı menüde Form Denetimleri (Form Controls) altında da bir çevirme düğmesi vardır. Bu denetim olay yordamı kullanmaz; sağ tık > Denetimi Biçimlendir (Format Control) penceresinden en küçük değer, en büyük değer, artım değişikliği ve hücre bağlantısı ayarlanır. Bu sayfadaki özellik ve olaylar ActiveX SpinButton içindir.

ActiveX denetimini sayfada düzenlemek için Geliştirici > Tasarım Modu (Developer > Design Mode) açık olmalıdır; denetimi çalıştırmak için bu modu kapatın.

Önemli özellikler​

  • Value: Denetimin geçerli değeridir. Her zaman Min ile Max arasında olmalıdır; bu aralığın dışında bir değer atamak çalışma zamanı hatası verir. Varsayılanı 0'dır.
  • Min: Value'nun alabileceği en küçük değerdir; varsayılanı 0'dır.
  • Max: Value'nun alabileceği en büyük değerdir; varsayılanı 100'dür.
  • SmallChange: Bir ok tıklamasında Value'nun değişeceği miktardır; varsayılanı 1'dir. Denetim yalnızca tam sayılarla çalışır, ondalık adım kullanılamaz.
  • Orientation: Okların yönüdür. fmOrientationAuto (-1, varsayılan) denetimin genişlik ve yüksekliğine göre yönü kendisi seçer; fmOrientationVertical (0) dikey, fmOrientationHorizontal (1) yatay yerleşim verir.
  • Delay: Ok basılı tutulduğunda değerin tekrar değişme hızını milisaniye cinsinden belirler; varsayılanı 50'dir.
  • LinkedCell: Yalnızca sayfadaki denetimde bulunur (OLEObject üzerinden ayarlanır). Value değerini belirtilen hücreyle eşler; örneğin "C2".
  • Enabled: False yapılırsa denetim tıklamalara yanıt vermez.
  • Name, Visible, TabStop, ControlTipText: Kod içindeki adı, görünürlüğü, sekme sırasına katılmasını ve fare üzerine gelince çıkan ipucunu belirler.

Önemli yöntemler ve olaylar​

En sık kullanılan olay Change olayıdır; Value değiştiğinde tetiklenir. Kod ile Value değiştirildiğinde de çalışır. Ok tıklamasına özel tepki vermek için SpinUp (yukarı ok) ve SpinDown (aşağı ok) olayları kullanılır. Yöntem olarak SetFocus odağı denetime verir, Move denetimi konumlandırır.

Olay yordamı nereye yazılır: UserForm üzerindeki denetimin olayları o formun kod penceresine yazılır (forma çift tıklayın ya da F7 tuşuna basın). Sayfadaki ActiveX denetiminin olayları ise denetimin bulunduğu sayfanın kod modülüne yazılır; denetime tasarım modunda çift tıklamak doğru yordamı oluşturur. Standart modüle yazılan olay yordamı çalışmaz.

VBA 11 satır
Private Sub SpinButton1_Change()
    ' Value degistiginde calisir
End Sub

Private Sub SpinButton1_SpinUp()
    ' Yukari ok tiklandiginda calisir
End Sub

Private Sub SpinButton1_SpinDown()
    ' Asagi ok tiklandiginda calisir
End Sub

Denetime kodla erişmek için UserForm içinde doğrudan SpinButton1.Value yazılır. Sayfadaki denetim için Sheets("Sayfa1").SpinButton1.Value ya da OLEObjects("SpinButton1").Object.Value kullanılır.

1. UserForm içinde SpinButton ile metin kutusunu eşleme​

Bir UserForm hazırlayın ve üzerine SpinButton1, TextBox1 ve CommandButton1 denetimlerini yerleştirin. Aşağıdaki yordamları bu formun kod penceresine yapıştırın (standart modüle değil). Denetim 0 ile 100 arasında 5'er 5'er değişir; metin kutusuna elle sayı yazılırsa denetim de güncellenir. Düğme, seçilen adedi Sipariş Formu sayfasındaki B2 hücresine yazar.
VBA 36 satır
Option Explicit

Private Sub UserForm_Initialize()
    ' Denetimin sinirlarini ve adimini ayarla
    With SpinButton1
        .Min = 0
        .Max = 100
        .SmallChange = 5
        .Value = 10
    End With
    TextBox1.Text = SpinButton1.Value
End Sub

Private Sub SpinButton1_Change()
    ' Oklara basildiginda metin kutusunu guncelle
    TextBox1.Text = SpinButton1.Value
End Sub

Private Sub TextBox1_AfterUpdate()
    ' Elle yazilan deger gecerliyse denetime aktar, degilse eski degere don
    If IsNumeric(TextBox1.Text) Then
        If CDbl(TextBox1.Text) >= SpinButton1.Min And CDbl(TextBox1.Text) <= SpinButton1.Max Then
            SpinButton1.Value = CLng(TextBox1.Text)
        Else
            TextBox1.Text = SpinButton1.Value
        End If
    Else
        TextBox1.Text = SpinButton1.Value
    End If
End Sub

Private Sub CommandButton1_Click()
    ' Secilen adedi sayfaya yaz
    Worksheets("Sipariş Formu").Range("B2").Value = SpinButton1.Value
    Unload Me
End Sub
SpinButton
Formülünü incelemek için bir hücre seçin.
AB
1ÜrünAdet
2Defter
3Kalem
Sipariş FormuExcelDepo v1.0.0
Bu örnek form gösterdiği için çalıştırılmaz. Form açıldığında metin kutusunda başlangıç değeri görünür; yukarı ok değeri 5 artırır, aşağı ok 5 azaltır. Değer 0'a ya da 100'e ulaşınca oklar o yönde etki etmez. Düğmeye tıklandığında seçilen adet Defter satırındaki B2 hücresine yazılır ve form kapanır.

2. Sayfaya SpinButton ekleyip özelliklerini okuma​

Makro, etkin sayfaya kodla bir ActiveX SpinButton ekler; Min, Max, SmallChange ve Value özelliklerini ayarlar, değerleri B sütununa yazar ve ardından denetimi siler. Kodu standart bir modüle yapıştırın ve SpinOzellikleriniYaz makrosunu çalıştırın.
VBA 31 satır
Option Explicit

Sub SpinOzellikleriniYaz()
    Dim ws As Worksheet
    Dim ob As OLEObject

    Set ws = ActiveSheet

    ' Sayfaya ActiveX SpinButton ekle
    Set ob = ws.OLEObjects.Add(ClassType:="Forms.SpinButton.1", _
        Left:=200, Top:=10, Width:=20, Height:=40)

    With ob.Object
        .Min = 1          ' En kucuk deger: Ocak
        .Max = 12         ' En buyuk deger: Aralik
        .SmallChange = 1  ' Her tiklamada 1 adim
        .Value = 3        ' Baslangic degeri

        ' Ozellikleri sayfaya yaz
        ws.Range("B2").Value = .Min
        ws.Range("B3").Value = .Max
        ws.Range("B4").Value = .SmallChange
        ws.Range("B5").Value = .Value
    End With

    ' Value degerine karsilik gelen ay adini yaz
    ws.Range("B6").Value = MonthName(ob.Object.Value)

    ' Denetimi sil
    ob.Delete
End Sub
SpinButton
Formülünü incelemek için bir hücre seçin.
AB
1ÖzellikSonuç
2Min1
3Max12
4SmallChange1
5Value3
6Ay adıMart
Ay SeçimiExcelDepo v1.0.0
Makro çalıştıktan sonra en küçük değer 1, en büyük değer 12 ve adım miktarı 1 olarak sayfaya yazılır. Başlangıç Value değeri 3 olur ve bu sayıya karşılık gelen ay adı B6 hücresinde Mart biçiminde görünür. Min ve Max değerlerini önce ayarlamak önemlidir; çünkü Value bu aralığın dışında olamaz.

3. LinkedCell ile SpinButton değerini hücreye bağlama​

Makro, sayfaya bir SpinButton ekler ve LinkedCell özelliğiyle C2 hücresine bağlar. Value değiştikçe C2 güncellenir ve D2'deki tutar formülü yeniden hesaplanır. Kodu standart bir modüle yapıştırıp SpinBagliHucre makrosunu çalıştırın.
VBA 28 satır
Option Explicit

Sub SpinBagliHucre()
    Dim ws As Worksheet
    Dim ob As OLEObject

    Set ws = ActiveSheet

    ' Sayfaya SpinButton ekle
    Set ob = ws.OLEObjects.Add(ClassType:="Forms.SpinButton.1", _
        Left:=300, Top:=10, Width:=18, Height:=30)

    ' Sinirlari ve adimi ayarla
    With ob.Object
        .Min = 0
        .Max = 20
        .SmallChange = 2
    End With

    ' Denetimi C2 hucresine bagla (LinkedCell OLEObject uzerinden ayarlanir)
    ob.LinkedCell = "C2"

    ' Value degistiginde bagli hucre de guncellenir
    ob.Object.Value = 4

    ' Denetimi sil; C2 icindeki deger kalir
    ob.Delete
End Sub
SpinButton
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünBirim FiyatAdetTutar
2Defter18,50474,00
3Kalem7,251072,50
4Silgi3,002575,00
Bağlı HücreExcelDepo v1.0.0
Denetim C2 hücresine bağlandığı için Value değeri bu hücreye aktarılır ve Defter satırının tutarı D2 hücresinde 74,00 olarak hesaplanır. Diğer satırların adetleri sabit olduğundan Kalem için 72,50, Silgi için 75,00 sonucu çıkar. Gerçek kullanımda denetimi silmeden bırakırsanız oklara her tıklamada C2 SmallChange kadar değişir ve tutar kendiliğinden yenilenir.

Kullanırken dikkat edin​

  • Value aralık dışına atanamaz: Value özelliğine Min'den küçük ya da Max'tan büyük bir değer atarsanız çalışma zamanı hatası oluşur. Önce Min ve Max değerlerini, sonra Value değerini ayarlayın; dışarıdan gelen verileri atamadan önce kontrol edin.
  • Yalnızca tam sayılarla çalışır: SpinButton ondalık değer üretmez. 0,1 adımlı bir seçim istiyorsanız Min, Max ve Value değerlerini 10 ile çarpıp tam sayı olarak kullanın, gösterirken 10'a bölün.
  • Değeri göstermek sizin göreviniz: Denetim üzerinde sayı görünmez. Değeri bir TextBox, Label ya da LinkedCell ile gösterin. Metin kutusuna elle girişe izin veriyorsanız, değeri denetime aktarmadan önce IsNumeric ve aralık kontrolü yapın.
  • Olay yordamı doğru modülde olmalı: UserForm denetiminin olayları formun kod penceresinde, sayfadaki ActiveX denetiminin olayları o sayfanın kod modülünde bulunmalıdır. Standart modüle yazılan SpinButton1_Change yordamı hiçbir zaman tetiklenmez. Sayfadaki denetimin çalışması için Tasarım Modu'nun kapalı olması gerekir.
  • Change olayında döngüye dikkat: Change olayı içinde Value değerini yeniden değiştirirseniz olay tekrar tetiklenir. Metin kutusunu eşlerken Change yerine AfterUpdate gibi olayları kullanmak, istenmeyen tekrarları önler.
  • Form denetimi ve ActiveX farkı: Form Denetimleri altındaki çevirme düğmesi makroya atanabilir ve ControlFormat nesnesiyle ayarlanır; ActiveX SpinButton ise olay ve özellik zenginliği sunar. ActiveX denetimleri Excel'in Mac sürümlerinde desteklenmez; taşınabilir bir çözüm gerekiyorsa Form denetimini düşünün.
  • İlgili konular:
    • ScrollBar: Büyük aralıklarda kaydırma çubuğu ile değer seçme
    • TextBox, Label, CommandButton: SpinButton ile birlikte kullanılan UserForm denetimleri
    • UserForm: Denetimleri barındıran form nesnesi ve Initialize olayı
    • OLEObjects: Sayfadaki ActiveX denetimlerine kodla erişim ve ekleme
    • LinkedCell: Denetimi hücreye bağlama
    • Shapes.AddFormControl: Kodla form denetimi ekleme
    • Worksheet_Change: Hücre değişimini izleyen sayfa olayı
    • IsNumeric: Metin kutusu girişini doğrulama
    • ARA ve İNDİS: Seçilen değere göre listeden veri çeken 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
11
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst