Genel Bakış
LinkedCell (ControlFormat.LinkedCell), bir form denetiminin (onay kutusu, açılan liste, kaydırma çubuğu, çevirme düğmesi gibi) değerini yazdığı hücreyi belirleyen özelliktir. Denetimin durumu değiştikçe bağlı hücre otomatik güncellenir, hücreye yazılan değer de denetimi günceller. Böylece formüller, denetimin seçimine makro çalıştırmadan tepki verebilir.
Denetimi makroyla oluşturuyorsanız önce AddFormControl yöntemiyle denetimi ekleyin, sonra ControlFormat.LinkedCell özelliğini atayın, en son başlangıç değerini (Value ya da ListIndex) verin. Böylece başlangıç değeri doğrudan bağlı hücreye yansır.
Makro her satır için bir onay kutusu ekler ve B sütunundaki hücreye bağlar. İlk görevin durumu Tamamlandı, ikinci görevin durumu Bekliyor olur; çünkü yalnız ilk ve son kutu işaretlenmiştir. D2 hücresine yazılan $B$2, LinkedCell özelliğinin döndürdüğü bağlantı bilgisidir. Kutuyu elle işaretlediğinizde B hücresi ve C sütunundaki formül kendiliğinden güncellenir.
Adet hücreleri çevirme düğmelerine bağlandığı için B sütununa makro değil denetim değer yazar. Klavye satırının tutarı 2.250,00, fare satırının tutarı 3.300,00, monitör satırının tutarı 25.600,00 olarak hesaplanır. Düğmenin okuna her tıklayışınızda adet SmallChange kadar değişir ve tutarlar anında yenilenir.
Makro çalıştıktan sonra B2 hücresi listede seçili olan öğenin sıra numarasını tutar ve C2 hücresi seçilen şehri gösterir: İzmir. Listeden başka bir şehir seçtiğinizde B2 ve C2 kendiliğinden değişir; formülü hiçbir makro çalıştırmadan kullanabilirsiniz.
Söz dizimi
LinkedCell özelliği, Shape nesnesinin ControlFormat alt nesnesi üzerinden kullanılır. Okunabilir ve yazılabilir bir String özelliğidir.
VBA
5 satır
ifade.LinkedCell
ifade.LinkedCell = "$B$2"
Dim adr As String
adr = ActiveSheet.Shapes("Onay Kutusu 1").ControlFormat.LinkedCell
- ifade: Bir form denetiminin ControlFormat nesnesini veren ifade; örneğin Shapes("Onay Kutusu 1").ControlFormat. Zorunludur.
- Değer (String): Bağlanacak hücrenin adresi; örneğin "$B$2" ya da "B2". Boş metin ("") atanırsa bağlantı kaldırılır.
- Dönüş değeri: Denetimin bağlı olduğu hücrenin adresini metin olarak verir; bağlantı yoksa boş metin döner.
Denetime göre bağlı hücreye yazılan değer
Bağlı hücreye ne yazılacağı denetimin türüne göre değişir:- Onay kutusu (Check Box): İşaretliyse DOĞRU (TRUE), değilse YANLIŞ (FALSE) yazılır. Üç durumlu kutuda karışık durum hücrede #YOK (#N/A) olarak görünür.
- Seçenek düğmesi (Option Button): Aynı grup kutusundaki düğmeler tek hücreye bağlanır; seçili düğmenin sıra numarası yazılır.
- Açılan liste ve liste kutusu (Drop Down, List Box): Seçilen öğenin listedeki sıra numarası yazılır, öğenin metni yazılmaz. Metne ulaşmak için bu numara İNDİS gibi bir işlevle kullanılır.
- Kaydırma çubuğu ve çevirme düğmesi (Scroll Bar, Spinner): Geçerli tam sayı değeri yazılır; sınırlar Min ve Max özellikleriyle belirlenir.
Kullanım ve arayüz karşılığı
Aynı işlemi arayüzden yapmak için denetime sağ tıklayıp Denetimi Biçimlendir > Denetim > Hücre bağlantısı (Format Control > Control > Cell link) kutusunu doldurursunuz. VBA ile bu kutu LinkedCell özelliğine karşılık gelir.Denetimi makroyla oluşturuyorsanız önce AddFormControl yöntemiyle denetimi ekleyin, sonra ControlFormat.LinkedCell özelliğini atayın, en son başlangıç değerini (Value ya da ListIndex) verin. Böylece başlangıç değeri doğrudan bağlı hücreye yansır.
1. Onay kutularını hücrelere bağlama
Her görev satırı için bir onay kutusu oluşturulur ve B sütunundaki hücreye bağlanır. C sütunundaki formül, onay durumuna göre metin gösterir. Kodu standart modüle yapıştırın; makro bağlı hücrenin adresini D sütununa da yazar.
VBA
29 satır
Option Explicit
Sub OnayKutulariniBagla()
Dim ws As Worksheet
Dim shp As Shape
Dim r As Long
Set ws = ActiveSheet
For r = 2 To 4
' E sütunundaki hücrenin üzerine bir onay kutusu ekle
Set shp = ws.Shapes.AddFormControl(xlCheckBox, ws.Cells(r, 5).Left, ws.Cells(r, 5).Top, 80, ws.Cells(r, 5).Height)
shp.Name = "chkOnay" & r
shp.OLEFormat.Object.Caption = "Onay"
' Kutuyu aynı satırdaki B hücresine bağla
shp.ControlFormat.LinkedCell = "$B$" & r
' Üçüncü görev dışındakileri işaretle
If r <> 3 Then
shp.ControlFormat.Value = xlOn
Else
shp.ControlFormat.Value = xlOff
End If
' Bağlı hücre adresini D sütununa yaz
ws.Cells(r, 4).Value = shp.ControlFormat.LinkedCell
Next r
End Sub
LinkedCell
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Görev | Onay | Durum | Bağlı Hücre |
| 2 | Rapor hazırlandı | DOĞRU | Tamamlandı | $B$2 |
| 3 | Fatura kontrol edildi | Bekliyor | $B$3 | |
| 4 | Sevkiyat planlandı | DOĞRU | Tamamlandı | $B$4 |
Onay ListesiExcelDepo v1.0.0
2. Çevirme düğmesiyle adet ayarlama
Her ürün satırına bir çevirme düğmesi (Spinner) eklenir ve B sütunundaki adet hücresine bağlanır. D sütunundaki formül tutarı hesaplar. Kodu standart modüle yapıştırın.
VBA
29 satır
Option Explicit
Sub AdetDugmeleriniBagla()
Dim ws As Worksheet
Dim shp As Shape
Dim baslangic As Variant
Dim r As Long
Set ws = ActiveSheet
' Her satırın başlangıç adedi
baslangic = Array(5, 12, 8)
For r = 2 To 4
' E sütununa çevirme düğmesi ekle
Set shp = ws.Shapes.AddFormControl(xlSpinner, ws.Cells(r, 5).Left, ws.Cells(r, 5).Top, 16, ws.Cells(r, 5).Height)
shp.Name = "spnAdet" & r
With shp.ControlFormat
.Min = 0
.Max = 100
.SmallChange = 1
' Düğmeyi B sütunundaki adet hücresine bağla
.LinkedCell = "$B$" & r
' Başlangıç değeri bağlı hücreye yazılır
.Value = baslangic(r - 2)
End With
Next r
End Sub
LinkedCell
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar |
| 2 | Klavye | 5 | 450,00 | 2.250,00 |
| 3 | Fare | 12 | 275,00 | 3.300,00 |
| 4 | Monitör | 8 | 3.200,00 | 25.600,00 |
Sipariş AdetleriExcelDepo v1.0.0
3. Açılan listede seçilen sıra numarası
Bir açılan liste (Drop Down) A2:A6 aralığındaki şehirlerle doldurulur ve B2 hücresine bağlanır. Bağlı hücreye şehrin adı değil sıra numarası yazıldığı için C2 hücresi İNDİS işleviyle şehir adını getirir. Kodu standart modüle yapıştırın.
VBA
22 satır
Option Explicit
Sub SehirListesiniBagla()
Dim ws As Worksheet
Dim shp As Shape
Set ws = ActiveSheet
' E2 hücresinin üzerine açılan liste ekle
Set shp = ws.Shapes.AddFormControl(xlDropDown, ws.Range("E2").Left, ws.Range("E2").Top, 100, 20)
shp.Name = "ddSehir"
With shp.ControlFormat
' Liste öğelerinin alındığı aralık
.ListFillRange = "$A$2:$A$6"
.DropDownLines = 5
' Seçilen öğenin sıra numarası B2 hücresine yazılır
.LinkedCell = "$B$2"
' Listeden üçüncü öğeyi seç
.ListIndex = 3
End With
End Sub
LinkedCell
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Şehir Listesi | Sıra No | Seçilen Şehir |
| 2 | Ankara | 3 | İzmir |
| 3 | İstanbul | ||
| 4 | İzmir | ||
| 5 | Bursa | ||
| 6 | Antalya |
Şehir SeçimiExcelDepo v1.0.0
Kullanırken dikkat edin
- Yalnızca form denetimlerinde geçerlidir: ControlFormat nesnesi yalnız Form Denetimleri için vardır. ActiveX denetimlerinde bağlantı, denetimin kendi LinkedCell özelliğiyle (OLEObject üzerinden) kurulur; ActiveX denetiminin Shape.ControlFormat özelliğine erişmeye çalışmak hata verir. Ayrıca bazı denetimlerde (grup kutusu, etiket, düğme gibi) değer üretilmediği için bağlantı anlamlı değildir.
- Adres metin olarak verilir: Özelliğe hücre başvurusu (Range nesnesi) değil, adresi içeren bir metin atayın; örneğin "$B$2". Döngü içinde adres oluştururken "$B$" & r gibi birleştirme kullanabilirsiniz. Bağlantıyı kaldırmak için özelliğe boş metin atayın.
- Bağlı hücreye yazılan değer sıra numarasıdır: Açılan liste ve liste kutusunda bağlı hücrede öğenin metni değil, listedeki sıra numarası bulunur. Metne ulaşmak için İNDİS işlevini kullanın. Seçenek düğmelerinde de aynı grup kutusundaki tüm düğmeler aynı hücreye bağlanmalıdır; hücre seçili düğmenin sırasını gösterir.
- Bağlı hücreye formül yazmayın: Bağlı hücreyi denetim yönetir. İçine formül yazarsanız denetim değer yazdığında formülünüz silinir. Bağlı hücreyi yalnız denetimin ürettiği değeri okumak için kullanın ve hesapları yanındaki hücrelerde yapın.
- Sıra ve ad önerileri: Denetimi eklerken önce Min, Max gibi sınırları, sonra LinkedCell özelliğini ve en son Value ya da ListIndex değerini atayın. Denetimlere Name özelliğiyle anlamlı adlar vermek, sonradan Shapes koleksiyonundan bulmayı kolaylaştırır. Makroyu aynı sayfada tekrar çalıştırırsanız aynı adlı denetimler çoğalır; yeniden çalıştırmadan önce eskileri silin.
- İlgili konular:
- Shapes.AddFormControl: Sayfaya form denetimi ekleyen yöntem.
- ControlFormat.Value: Denetimin geçerli değeri.
- ControlFormat.ListFillRange: Liste öğelerinin alındığı aralık.
- ControlFormat.ListIndex: Listede seçili öğenin sıra numarası.
- ControlFormat.Min, Max, SmallChange: Kaydırma çubuğu ve çevirme düğmesi sınırları.
- OLEObject.LinkedCell: ActiveX denetimlerinin bağlı hücre özelliği.
- Geliştirici > Ekle > Form Denetimleri (Developer > Insert > Form Controls): Denetimleri arayüzden ekleme yolu.
- İNDİS: Sıra numarasına göre listeden değer getiren işlev.
- EĞER: Bağlı hücredeki DOĞRU ya da YANLIŞ değerine göre sonuç üreten işlev.