Özellik ikonu

ActiveX

İndirme izni yok

Genel Bakış

ActiveX (ActiveX Controls), çalışma sayfasına yerleştirilen ve ayrıntılı özellik ile olay desteği sunan etkileşimli denetimlerdir; düğme, metin kutusu, açılan liste, onay kutusu gibi türleri vardır. Form Denetimlerine göre çok daha fazla özelliğe sahiptir ve VBA ile tüm özellikleri, olayları sayfa kod modülünden yönetilebilir. Kullanıcıdan veri almak, listeden seçim yaptırmak ya da bir düğmeyle makro tetiklemek için kullanılır.

Nerede bulunur ve nasıl eklenir​

ActiveX denetimleri Geliştirici > Denetimler > Ekle (Developer > Controls > Insert) menüsünde ActiveX Denetimleri (ActiveX Controls) bölümünde yer alır. Geliştirici sekmesi görünmüyorsa Dosya > Seçenekler > Şeridi Özelleştir (File > Options > Customize Ribbon) bölümünde Geliştirici kutusunu işaretleyin.

Denetimi seçip sayfada sürükleyerek çizersiniz. Ekleme sonrasında sayfa Tasarım Modu (Design Mode) durumundadır. Bu modda denetimi seçebilir, taşıyabilir, Özellikler (Properties) penceresinden düzenleyebilir ve Kodu Görüntüle (View Code) ile olay yordamını yazabilirsiniz. Denetimi gerçekten kullanmak için Tasarım Modu düğmesini yeniden tıklayarak modu kapatın.

Form Denetimleri (Form Controls) daha basit ve sayfaya gömülü makro atamasıyla çalışır; ActiveX denetimleri ise özellik, biçim ve olay bakımından daha zengindir. Karşılığında yalnız Windows sürümü Excel'de tam desteklenir; Mac ve Excel Online sürümünde çalışmaz.

Önemli özellikler​

Denetimlerin ortak ve sık kullanılan özellikleri şunlardır:
  • Name: Denetimin adıdır; olay yordamları bu adla eşleşir (ör. btnHesapla_Click).
  • Caption: Düğme, onay kutusu ve seçenek düğmesinin üzerinde görünen metindir.
  • Value: Denetimin değeridir; TextBox ve ComboBox için metin, CheckBox için True/False döner.
  • LinkedCell: Denetim değerinin otomatik yazıldığı hücre adresidir.
  • ListFillRange: ComboBox ve ListBox için liste kaynağı olan hücre aralığıdır.
  • Enabled ve Visible: Denetimin kullanılabilirliğini ve görünürlüğünü belirler.
  • Left, Top, Width, Height: Konum ve boyuttur.
  • Placement: Satır ve sütun boyutu değişince denetimin davranışını belirler (xlMove, xlMoveAndSize, xlFreeFloating).
  • PrintObject: Denetimin yazdırılıp yazdırılmayacağını belirler.

Önemli yöntemler ve olaylar​

Sayfadaki denetimler OLEObjects koleksiyonunda tutulur; her öğe bir OLEObject nesnesidir. Add yöntemi denetim ekler, Delete siler, Activate ve Select etkinleştirir ya da seçer.

Olay yordamları, denetimin bulunduğu sayfanın kod modülüne yazılır ve adı Denetimadı_Olay biçimindedir. Sık kullanılan olaylar:
  • Click: Düğmeye ya da onay kutusuna tıklanınca çalışır.
  • Change: TextBox, ComboBox ve CheckBox değeri değişince çalışır.
  • DropButtonClick: ComboBox açılır oku kullanılınca çalışır.
  • GotFocus ve LostFocus: Denetim odak alınca ya da kaybedince çalışır.
  • KeyPress ve KeyDown: Klavye girişini denetler.
Düğmeye tıklayınca odağın düğmede kalmasını önlemek için TakeFocusOnClick özelliğini False yapın.

Kodla erişim ve ekleme söz dizimi​

Denetime sayfa modülünde doğrudan adıyla, başka yerden ise OLEObjects koleksiyonuyla erişilir. Kodla yeni denetim eklemenin söz dizimi:
VBA 4 satır
Set ole = Sayfa.OLEObjects.Add(ClassType, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)

' Var olan denetime erişim
Sayfa.OLEObjects("btnHesapla").Object.Caption = "Hesapla"
Parametreler:
  • ClassType: Denetimin ProgID değeridir (ör. Forms.CommandButton.1, Forms.TextBox.1, Forms.ComboBox.1, Forms.CheckBox.1); ClassType kullanılacaksa gereklidir.
  • Link: Bağlantılı nesne için dosya adıdır; isteğe bağlı, ActiveX denetimlerinde kullanılmaz.
  • DisplayAsIcon: Simge olarak gösterilsin mi; isteğe bağlı, varsayılan False.
  • IconFileName, IconIndex, IconLabel: Simge dosyası, simge sırası ve etiketi; isteğe bağlı.
  • Left, Top, Width, Height: Nokta (point) cinsinden konum ve boyut; isteğe bağlı.
Denetimin kendi özelliklerine (Caption, Value, ListFillRange gibi) OLEObject.Object üzerinden ulaşılır; Name, Left, Top, Placement gibi yerleşim özellikleri ise OLEObject nesnesinin kendisindedir.

1. Kodla denetim ekleme​

Sayfada hangi denetimlerin ekleneceği A ve B sütunlarında yazılıdır. Kodu standart bir modüle yapıştırın; makro her satır için uygun ActiveX denetimini ekler, adını verir ve C sütununa denetimin sınıf kimliğini (ProgID) yazar.
VBA 33 satır
Option Explicit

Sub DenetimEkle()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim i As Long
    Dim sinif As String

    Set ws = ActiveSheet

    ' Yeniden çalıştırmada adlar çakışmasın diye eski denetimleri sil
    For i = ws.OLEObjects.Count To 1 Step -1
        ws.OLEObjects(i).Delete
    Next i

    For i = 2 To 4
        Select Case ws.Cells(i, 2).Value
            Case "CommandButton": sinif = "Forms.CommandButton.1"
            Case "TextBox": sinif = "Forms.TextBox.1"
            Case "CheckBox": sinif = "Forms.CheckBox.1"
        End Select

        Set ole = ws.OLEObjects.Add(ClassType:=sinif, Left:=320, Top:=20 + (i - 2) * 35, Width:=110, Height:=26)
        ole.Name = ws.Cells(i, 1).Value

        ' Metin kutusunun Caption özelliği yoktur
        If ws.Cells(i, 2).Value <> "TextBox" Then
            ole.Object.Caption = ws.Cells(i, 1).Value
        End If

        ws.Cells(i, 3).Value = ole.progID
    Next i
End Sub
ActiveX
Formülünü incelemek için bir hücre seçin.
ABC
1Denetim AdıTürSınıf Kimliği
2btnHesaplaCommandButtonForms.CommandButton.1
3txtMusteriTextBoxForms.TextBox.1
4chkOnayCheckBoxForms.CheckBox.1
Denetim ListesiExcelDepo v1.0.0
Makro çalışınca sayfaya üç ActiveX denetimi eklenir. C2 hücresine düğmenin sınıf kimliği olan Forms.CommandButton.1, C3 hücresine metin kutusunun kimliği olan Forms.TextBox.1, C4 hücresine onay kutusunun kimliği olan Forms.CheckBox.1 yazılır. Denetimler sayfanın sağ tarafında alt alta görünür; adlarını Ad Kutusu ya da Özellikler penceresinden de görebilirsiniz.

2. ComboBox ile liste doldurma​

A2:A6 aralığındaki şehirler bir açılan listeye (ComboBox) kaynak olacaktır. Kodu standart modüle yapıştırın; makro ComboBox ekler, ListFillRange ile listeyi bağlar, üçüncü öğeyi seçer ve seçilen şehri ile öğe sayısını sayfaya yazar.
VBA 26 satır
Option Explicit

Sub ComboEkle()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim i As Long

    Set ws = ActiveSheet

    ' Önceki çalıştırmadan kalan denetimleri temizle
    For i = ws.OLEObjects.Count To 1 Step -1
        ws.OLEObjects(i).Delete
    Next i

    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=250, Top:=20, Width:=120, Height:=22)
    ole.Name = "cmbSehir"

    ' Liste kaynağı: aynı sayfadaki şehir adları
    ole.ListFillRange = "A2:A6"

    ' ListIndex sıfırdan başlar; 2 değeri üçüncü öğeyi seçer
    ole.Object.ListIndex = 2

    ws.Range("B2").Value = ole.Object.Value
    ws.Range("C2").Value = ole.Object.ListCount
End Sub
ActiveX
Formülünü incelemek için bir hücre seçin.
ABC
1ŞehirSeçilen ŞehirÖğe Sayısı
2İstanbulİzmir5
3Ankara
4İzmir
5Bursa
6Antalya
Şehir SeçimiExcelDepo v1.0.0
ComboBox listeyi A2:A6 aralığından alır. ListIndex değeri sıfırdan saydığı için 2 değeri üçüncü öğeyi seçer ve B2 hücresine İzmir yazılır. C2 hücresindeki 5 değeri listedeki toplam öğe sayısını gösterir. Aynı sonucu denetimin LinkedCell özelliğine bir hücre adresi vererek de elde edebilirsiniz; bu durumda kullanıcı seçim yaptıkça hücre kendiliğinden güncellenir.

3. Onay kutuları ve denetim türü​

Her görev satırının yanına bir onay kutusu (CheckBox) eklenecek. Kodu standart modüle yapıştırın; makro E sütunundaki hücrelerin konumuna denetim yerleştirir, ikinci görevi işaretli yapar ve her denetimin türünü, adını ve durumunu sayfaya yazar.
VBA 33 satır
Option Explicit

Sub OnayKutulariEkle()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim i As Long

    Set ws = ActiveSheet

    ' Eski denetimleri sil
    For i = ws.OLEObjects.Count To 1 Step -1
        ws.OLEObjects(i).Delete
    Next i

    For i = 2 To 4
        ' Denetimi ilgili satırın E hücresinin üzerine yerleştir
        Set ole = ws.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
            Left:=ws.Range("E" & i).Left + 5, _
            Top:=ws.Range("E" & i).Top + 2, _
            Width:=80, Height:=16)

        ole.Name = "chkGorev" & (i - 1)
        ole.Placement = xlMoveAndSize
        ole.Object.Caption = "Tamam"

        ' Yalnız ikinci görev işaretli olsun
        If i = 3 Then ole.Object.Value = True

        ws.Cells(i, 2).Value = TypeName(ole.Object)
        ws.Cells(i, 3).Value = ole.Name
        ws.Cells(i, 4).Value = ole.Object.Value
    Next i
End Sub
ActiveX
Formülünü incelemek için bir hücre seçin.
ABCDE
1GörevDenetim TürüDenetim AdıDurumOnay
2Fatura kontrolüCheckBoxchkGorev1YANLIŞ
3Stok sayımıCheckBoxchkGorev2DOĞRU
4Rapor gönderimiCheckBoxchkGorev3YANLIŞ
Onay ListesiExcelDepo v1.0.0
Her görev satırı için E sütununa bir onay kutusu eklenir. B2 hücresinde denetimin türü olan CheckBox, C2 hücresinde adı olan chkGorev1 görünür. Yalnız ikinci görev işaretlendiği için D3 hücresinde DOĞRU değeri bulunur; diğer satırlarda D2 hücresi YANLIŞ ve D4 hücresi YANLIŞ değerini gösterir. Placement özelliği xlMoveAndSize olduğundan satır yüksekliği değişirse denetim de buna uyar.

Kullanırken dikkat edin​

  • Tasarım Modu açıkken denetim çalışmaz: Denetime tıklayınca yalnız seçiliyorsa ya da olay yordamı çalışmıyorsa Tasarım Modu (Design Mode) açıktır. Geliştirici sekmesindeki Tasarım Modu düğmesini kapatın.
  • Olay yordamı yanlış yerde olmasın: Denetim olayları denetimin bulunduğu sayfanın kod modülünde olmalıdır. Standart modüle yazılan btnHesapla_Click yordamı tıklayınca çalışmaz. Denetimin adını değiştirirseniz yordam adını da güncelleyin; aksi halde olay bağlantısı kopar.
  • Aynı adı iki kez kullanmayın: Bir sayfada her denetimin adı benzersiz olmalıdır. Kodla denetim eklerken aynı adı tekrar vermek hata üretir; örneklerdeki gibi eski denetimleri silmek ya da ad denetimi yapmak çözümdür.
  • Sürüm ve platform sınırları: ActiveX denetimleri Mac için Excel ve Excel Online ortamında çalışmaz. Makro güvenliği ve Güven Merkezi (Trust Center) ActiveX ayarları da denetimlerin çalışmasını etkileyebilir. Windows güncellemelerinden sonra denetimlerin yüklenmediği durumlarda MSForms önbellek (.exd) dosyalarını silmek yaygın bir çözümdür.
  • Konum ve yazdırma ayarları: Denetimleri filtreleme ya da satır gizleme sırasında kaydırmak istemiyorsanız Placement özelliğini xlFreeFloating yapın. Denetimin yazdırılmasını istemiyorsanız PrintObject özelliğini False yapın. Çok sayıda ActiveX denetimi dosyayı yavaşlatabilir; mümkünse hücre doğrulama listesi gibi hafif seçenekleri düşünün.
  • İlgili konular: Form Denetimleri (Form Controls), UserForm, OLEObjects koleksiyonu, Shapes koleksiyonu, Worksheet_Change olayı, Veri Doğrulama (Data Validation) açılan listesi, Geliştirici sekmesi, Tasarım Modu, Güven Merkezi ve DOLAYLI işlevi.
Ö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
13
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst