Özellik ikonu

Shape

İndirme izni yok

Genel Bakış

Shape (Şekil), bir çalışma sayfasındaki dikdörtgen, ok, metin kutusu, resim, düğme ya da grafik gibi çizim katmanı nesnelerinden her birini temsil eden VBA nesnesidir. Nesnenin konumunu, boyutunu, rengini, metnini ve görünürlüğünü kodla okuyup değiştirmenizi sağlar. Sayfadaki tüm şekiller Worksheet.Shapes koleksiyonunda toplanır.

Shape nesnesine erişim​

Şekiller hücrelerin üzerinde yüzen nesnelerdir ve Shapes koleksiyonu üzerinden adıyla ya da sıra numarasıyla seçilir. Yeni şekil eklemek için de aynı koleksiyonun yöntemleri kullanılır. Aşağıdaki kod parçası başlıca yolları gösterir:
VBA 4 satır
Set shp = Worksheets("Sayfa1").Shapes("RaporKutusu")
Set shp = ActiveSheet.Shapes(1)
Set shp = ActiveSheet.Shapes.AddShape(Type, Left, Top, Width, Height)
Set shp = ActiveSheet.Shapes.AddTextbox(Orientation, Left, Top, Width, Height)
AddShape yönteminin parametreleri:
  • Type: Şeklin türü; msoShapeRectangle, msoShapeOval, msoShapeRoundedRectangle gibi MsoAutoShapeType sabitlerinden biridir; zorunludur.
  • Left: Şeklin sol kenarının sayfanın sol kenarına uzaklığı, punto cinsinden; zorunludur.
  • Top: Şeklin üst kenarının sayfanın üst kenarına uzaklığı, punto cinsinden; zorunludur.
  • Width: Şeklin genişliği, punto cinsinden; zorunludur.
  • Height: Şeklin yüksekliği, punto cinsinden; zorunludur.
AddTextbox yönteminde ilk parametre yön olup msoTextOrientationHorizontal gibi bir sabit alır; diğer dört parametre aynıdır. Her iki yöntem de yeni oluşturulan Shape nesnesini döndürür.

Önemli özellikler​

  • Name: Şeklin adıdır. Atamazsanız Excel kendisi "Dikdörtgen 1" gibi bir ad verir; koddan erişmek için anlamlı bir ad atamak iyi olur.
  • Type: Nesnenin genel türünü verir (otomatik şekil, metin kutusu, resim, grup vb.). Yalnızca okunur.
  • AutoShapeType: Otomatik şekillerde şeklin çizim biçimini belirtir.
  • Left, Top, Width, Height: Konum ve boyut; birim puntodur.
  • TopLeftCell, BottomRightCell: Şeklin sol üst ve sağ alt köşesinin bulunduğu hücreyi Range olarak verir.
  • Fill: Dolgu özellikleri; örneğin Fill.ForeColor.RGB ile dolgu rengi atanır.
  • Line: Kenar çizgisi özellikleri; Line.Visible, Line.Weight gibi.
  • TextFrame2: Şeklin içindeki metne erişir; TextFrame2.TextRange.Text metni okur ve yazar.
  • Placement: Şeklin hücrelerle birlikte nasıl davranacağını belirler: xlMoveAndSize, xlMove ya da xlFreeFloating.
  • Visible: Şekli gösterir ya da gizler.
  • LockAspectRatio: Boyutlandırırken en boy oranının korunup korunmayacağını belirler.
  • Rotation: Şeklin dönme açısıdır.
  • OnAction: Şekle tıklandığında çalışacak makronun adını tutar.
  • AlternativeText: Erişilebilirlik için alternatif metin.

Önemli yöntemler ve olaylar​

  • Delete: Şekli siler.
  • Duplicate: Şeklin bir kopyasını oluşturur ve yeni Shape nesnesini döndürür.
  • Select: Şekli seçer; kodlarda seçmeye gerek kalmadan doğrudan nesne üzerinde çalışmak daha hızlı ve güvenlidir.
  • Copy, Cut: Şekli panoya kopyalar ya da keser.
  • IncrementLeft, IncrementTop: Şekli verilen punto kadar yatay ya da dikey kaydırır.
  • ScaleWidth, ScaleHeight: Boyutu bir oranla ölçekler.
  • Flip: Şekli yatay ya da dikey çevirir.
  • ZOrder: Şeklin üst üste sırasını değiştirir; örneğin msoBringToFront.
Shape nesnesinin kendi olayı yoktur. Şekle tıklanınca bir işlem yapmak için OnAction özelliğine bir standart modül makrosunun adı atanır. Birden çok şekil üzerinde birlikte işlem yapmak için ShapeRange nesnesi kullanılır.

1. Şekil ekleme ve özelliklerini okuma​

Bu örnek, etkin sayfaya yuvarlatılmış dikdörtgen ekler, adını, rengini ve metnini ayarlar, sonra bazı özelliklerini B sütununa yazar. Kodu standart bir modüle yapıştırın ve örnek sayfa etkinken çalıştırın.
VBA 24 satır
Option Explicit

Sub SekilEkle()
    Dim ws As Worksheet
    Dim shp As Shape
    Set ws = ActiveSheet

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

    ' Yuvarlatılmış dikdörtgen ekle (Left, Top, Width, Height: punto)
    Set shp = ws.Shapes.AddShape(msoShapeRoundedRectangle, 200, 20, 120, 40)
    shp.Name = "RaporKutusu"
    shp.TextFrame2.TextRange.Text = "Rapor"
    shp.Fill.ForeColor.RGB = RGB(0, 112, 192)

    ' Özellikleri hücrelere yaz
    ws.Range("B2").Value = shp.Name
    ws.Range("B3").Value = shp.Type
    ws.Range("B4").Value = shp.Width
    ws.Range("B5").Value = shp.Height
End Sub
Shape
Formülünü incelemek için bir hücre seçin.
AB
1ÖzellikDeğer
2AdRaporKutusu
3Tür (Type)1
4Genişlik120
5Yükseklik40
Şekil EkleExcelDepo v1.0.0
Makro şekli ekledikten sonra adını B2 hücresine (RaporKutusu), tür kodunu B3 hücresine (1), genişliğini B4 hücresine (120) ve yüksekliğini B5 hücresine (40) yazar. B3 hücresindeki sayı, otomatik şekil türünü gösteren MsoShapeType sabitine karşılık gelir. Genişlik ve yükseklik punto cinsindendir.

2. Sayfadaki şekilleri döngüyle listeleme​

Bu örnek önce sayfadaki tüm şekilleri siler, sonra bir dikdörtgen, bir oval ve bir metin kutusu ekler. Ardından For Each döngüsüyle her şeklin adını, türünü ve sol üst köşesinin bulunduğu hücreyi B, C ve D sütunlarına yazar. Dikkat: kod, kullandığınız sayfadaki tüm şekilleri siler; gerçek çalışma dosyanızda denemeyin. Kodu standart bir modüle yapıştırın.
VBA 30 satır
Option Explicit

Sub SekilleriListele()
    Dim ws As Worksheet
    Dim shp As Shape
    Dim i As Long
    Dim satir As Long
    Set ws = ActiveSheet

    ' Sayfadaki tüm şekilleri sondan başa doğru sil
    For i = ws.Shapes.Count To 1 Step -1
        ws.Shapes(i).Delete
    Next i

    ' Üç farklı şekil ekle ve adlandır
    With ws
        .Shapes.AddShape(msoShapeRectangle, .Range("F2").Left, .Range("F2").Top, 80, 30).Name = "Kutu1"
        .Shapes.AddShape(msoShapeOval, .Range("F5").Left, .Range("F5").Top, 60, 60).Name = "Oval1"
        .Shapes.AddTextbox(msoTextOrientationHorizontal, .Range("H2").Left, .Range("H2").Top, 100, 24).Name = "Metin1"
    End With

    ' Her şeklin bilgisini satır satır yaz
    satir = 2
    For Each shp In ws.Shapes
        ws.Cells(satir, 2).Value = shp.Name
        ws.Cells(satir, 3).Value = shp.Type
        ws.Cells(satir, 4).Value = shp.TopLeftCell.Address
        satir = satir + 1
    Next shp
End Sub
Shape
Formülünü incelemek için bir hücre seçin.
ABCD
1SıraŞekil AdıTür KoduSol Üst Hücre
21Kutu11$F$2
32Oval11$F$5
43Metin117$H$2
Şekil ListesiExcelDepo v1.0.0
Döngü şekilleri eklendikleri sırayla dolaşır. İlk şeklin adı Kutu1, türü 1 ve sol üst hücresi $F$2 olarak yazılır; ikinci şekil için Oval1, 1, $F$5, üçüncü şekil için Metin1, 17, $H$2 değerleri oluşur. Metin kutusunun tür kodunun otomatik şekillerden farklı olduğuna dikkat edin: Type özelliği nesnenin genel türünü verir.

3. Hücre değerine göre çubuk şekilleri çizme​

Bu örnek her ürünün satış değerine göre E sütunundaki ilgili satırın üzerine bir dikdörtgen çizer. Genişlik satış değerinin yarısı kadar puntodur. Şekillerin adı ve genişliği C ve D sütunlarına yazılır. Çalıştırmadan önceki kalıntıları temizlemek için yalnızca adı "Cubuk_" ile başlayan şekiller silinir. Kodu standart bir modüle yapıştırın.
VBA 29 satır
Option Explicit

Sub CubukCiz()
    Dim ws As Worksheet
    Dim shp As Shape
    Dim r As Long
    Dim i As Long
    Set ws = ActiveSheet

    ' Daha önce çizilmiş çubukları temizle
    For i = ws.Shapes.Count To 1 Step -1
        If Left(ws.Shapes(i).Name, 6) = "Cubuk_" Then ws.Shapes(i).Delete
    Next i

    ' Her ürün satırı için bir çubuk çiz
    For r = 2 To 6
        Set shp = ws.Shapes.AddShape(msoShapeRectangle, _
            ws.Cells(r, "E").Left + 2, _
            ws.Cells(r, "E").Top + 2, _
            ws.Cells(r, "B").Value * 0.5, _
            ws.Cells(r, "E").Height - 4)
        shp.Name = "Cubuk_" & ws.Cells(r, "A").Value
        shp.Line.Visible = msoFalse
        shp.Fill.ForeColor.RGB = RGB(0, 150, 80)
        shp.Placement = xlMove
        ws.Cells(r, "C").Value = shp.Name
        ws.Cells(r, "D").Value = shp.Width
    Next r
End Sub
Shape
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünSatışŞekil AdıGenişlik (punto)Çubuk
2Defter120Cubuk_Defter60,0
3Kalem80Cubuk_Kalem40,0
4Silgi150Cubuk_Silgi75,0
5Dosya60Cubuk_Dosya30,0
6Ataş95Cubuk_Ataş47,5
Çubuk ŞekillerExcelDepo v1.0.0
Her satır için E sütununun üzerine bir çubuk yerleştirilir. İlk çubuğun adı Cubuk_Defter, genişliği 60,0 puntodur; sonraki ürünler için Cubuk_Kalem, Cubuk_Silgi, Cubuk_Dosya, Cubuk_Ataş adları ve 40,0, 75,0, 30,0, 47,5 genişlikleri oluşur. Placement özelliği xlMove yapıldığı için, satırlar eklenip silindiğinde çubuklar hücreyle birlikte taşınır ama boyutları değişmez.

Kullanırken dikkat edin​

  • Birim puntodur: Left, Top, Width ve Height değerleri piksel ya da santimetre değil, punto cinsindendir. Şekli bir hücreye hizalamak için hücrenin Left, Top, Width ve Height değerlerini kullanın.
  • Shapes koleksiyonu her şeyi içerir: Koleksiyonda yalnızca çizdiğiniz şekiller değil; düğmeler, resimler, grafikler ve metin kutuları da bulunur. Tüm şekilleri silen ya da değiştiren bir döngü yazarken Type ya da Name ile süzmezseniz beklemediğiniz nesneler de etkilenir.
  • Silerken sondan başa doğru gidin: Döngüyle şekil silerken For i = ws.Shapes.Count To 1 Step -1 yapısını kullanın. Baştan sona giderseniz her silmeden sonra numaralar kayar ve bazı şekiller atlanır.
  • Ad vermeyi unutmayın: Ad atamazsanız Excel sıra numaralı bir ad verir ve adlar dil sürümüne göre değişir. Koddan güvenle erişmek için Name özelliğine sabit bir ad atayın. Aynı adı ikinci kez verirseniz hangi nesneye erişileceği belirsizleşebilir; bu nedenle yeni şekil eklemeden önce eskisini silin.
  • Select kullanmayın: Şekli seçip sonra Selection ile işlem yapmak yavaştır ve sayfa etkin değilse hata verir. Şekli değişkene atayıp doğrudan özelliklerini değiştirin.
  • Metin için TextFrame2 tercih edin: Excel 2007 ve sonrasında şekil metni için TextFrame2.TextRange daha geniş biçimlendirme olanağı sunar. Eski TextFrame.Characters yapısı da çalışır ama sınırlıdır.
  • Korumalı sayfa: Sayfa korumalıysa ve şekil kilitliyse şekli değiştirmeye çalışan kod hata verir. Gerekirse sayfanın korumasını kaldırıp işlemden sonra yeniden koruyun.
  • İlgili konular:
    • Shapes: Sayfadaki tüm şekilleri tutan koleksiyon.
    • ShapeRange: Birden çok şekli birlikte yönetme.
    • ChartObject: Gömülü grafikleri yönetme.
    • Worksheet.Pictures: Resim nesneleri.
    • Range.Left, Range.Top: Hücre konumu.
    • OnAction: Şekle makro atama.
    • Ekle > Şekiller (Insert > Shapes): Arayüzden şekil ekleme.
Ö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