Sayfa Üzerindeki Nesnelerle İlgili İşlemler


Bir excel sayfasına eklediğimiz

  • Resim,
  • Form Kontrolü, (button, combobox, scroll bar vs.)
  • Açıklama Kutusu,
  • Grafik,
  • Smart Art,  ve buna benzer eklentiler visual basic dilinde NESNE ya da ingilizce SHAPE adını alır.

Bu konuda sayfa üzerine eklediğimiz bu nesnelere vba ile nasıl ulaşırız, özelliklerini ve tipini nasıl alırız anlamaya çalışacağız. Çünkü nesnelere ulaştıktan sonra üzerlerinde işlem yapmak daha kolay olacaktır. Örneğin sayfa üzerindeki tüm resimler silinsin ya da bu çalışma kitabında kaç tane grafik var? gibi soruları bu konu sonrasında çözebiliyor olacaksınız.

Şimdi boş bir excel sayfası açalım ve bu sayfaya yukarıdaki nesnelerden farklı çeşitlerde ekleyelim.

Bir tane form kontrolü, bir resim, bir grafik, bir açıklama, bir smart art ve bir check box ekledim.

Capture

VBA de her bir nesnenin bir index kodu vardır ve bu kodlara type özelliğiyle ulaşırız.

Name özelliği ise bu nesnelerin isimlerini almamızı sağlar.

Şimdi kodumuzu yazmaya başlayalım:

1.Sayfa Üzerinde Kaç Tane Nesne Var?

Sub nesnebul()

Dim sh As Shape

Dim ws As Worksheet

Dim wsNew As Worksheet

Dim i As Integer

i = 1

Dim z As Integer

Set ws = ActiveSheet

Set wsNew = Sheets("Sheet2")

z = ws.Shapes.Count                      'sayfadaki nesne sayısını saydır

MsgBox "Bu sayfada " & z & " adet nesne vardır"

For Each sh In ws.Shapes             'sayfa 1'deki tüm nesneler üzerinde gez

With sh

wsNew.Cells(i, 1) = .Name

wsNew.Cells(i, 2) = .Type

End With

 i = i + 1

Next sh

End Sub

=> Kodu çalıştırdığımızda öncelikle message box ile kaç adet nesnemiz olduğunu gördük, sonrasında ikinci sayfaya nesnelerin isimleri ve tip kodlarını aldık.

Capture2

Untitled7

2.Nesneler Ve Kodları

Aşağıda msdn’in sitesinde tip kodlarının hangi nesneye ait olduğu listesine ulaşabilirsiniz:

https://msdn.microsoft.com/en-us/library/aa432678(v=office.12).aspx

Name Value Description
msoAutoShape 1 AutoShape.
msoCallout 2 Callout.
msoCanvas 20 Canvas.
msoChart 3 Chart.
msoComment 4 Comment.
msoDiagram 21 Diagram.
msoEmbeddedOLEObject 7 Embedded OLE object.
msoFormControl 8 Form control.
msoFreeform 5 Freeform.
msoGroup 6 Group.
msoIgxGraphic 24 SmartArt graphic
msoInk 22 Ink
msoInkComment 23 Ink comment
msoLine 9 Line
msoLinkedOLEObject 10 Linked OLE object
msoLinkedPicture 11 Linked picture
msoMedia 16 Media
msoOLEControlObject 12 OLE control object
msoPicture 13 Picture
msoPlaceholder 14 Placeholder
msoScriptAnchor 18 Script anchor
msoShapeTypeMixed -2 Mixed shape type
msoTable 19 Table
msoTextBox 17 Text box
msoTextEffect 15 Text effect

3.Sayfa Üzerindeki Resimleri ve Grafikleri Silme

Şimdi gelin sayfa üzerindeki resim ve grafikleri silelim:


Sub Nesnesil()

Dim shape As shape

For Each shape In ActiveSheet.Shapes

If shape.Type = 3 Or shape.Type = 13 Then  'resim tip kodunun 13 grafik tip kodunun 3 olduğunu yukarıdaki tablodan görebiliriz.

shape.Delete

End If

Next shape

End Sub

 

=> Kodu çalıştırdık resimler ve grafikler sayfadan silindi.

Capture3

4.Sayfada Kaç Tane ve Hangi Nesneler Var?

Üçüncü aşamada tüm nesne tiplerine karşılık gelen tanımları bir dizi olarak kodumuzun içine alacağız, ve nesnenin hangi gruba ait olduğu otomatik olarak elde edebileceğiz.

Sub Nesne()

Dim sh As shape

Dim ws As Worksheet

Dim NesneTip(25) As String   'nesnetip isimli 25 elemanlı bir dizi tanımladık

Dim nesnesayi As Integer

Dim NesneListesi As String

NesneTip(1) = "Autoshape"
NesneTip(2) = "Callout"
NesneTip(3) = "Chart"
NesneTip(4) = "Comment"
NesneTip(5) = "Freeform"
NesneTip(6) = "Group"
NesneTip(7) = "Embedded OLE Object"
NesneTip(8) = "Form Control"
NesneTip(9) = "Line"
NesneTip(10) = "Linked OLE Object"
NesneTip(11) = "Linked Picture"
NesneTip(12) = "OLE Control Object"
NesneTip(13) = "Picture"
NesneTip(14) = "Placeholder"
NesneTip(15) = "TextEffect"
NesneTip(16) = "Media"
NesneTip(17) = "TextBox"
NesneTip(18) = "Script anchor"
NesneTip(19) = "Table"
NesneTip(20) = "Canvas"
NesneTip(21) = "Diagram"
NesneTip(22) = "Ink"
NesneTip(23) = "Ink comment"
NesneTip(24) = "SmartArt graphic"

Set ws = ActiveSheet

nesnesayi = ws.Shapes.Count 'sayfadaki nesne sayısını saydır

If nesnesayi = 0 Then

MsgBox "Bu sayfada hiç nesne bulunmamaktadır"

Else

NesneListesi = "Bu sayfada toplam " & nesnesayi & " adet nesne vardır." & "Bu nesneler sırası ile: " & NesneListesi & vbCrLf & vbCrLf

For Each sh In ws.Shapes

NesneListesi = NesneListesi & sh.Name & "isminde bir " & NesneTip(sh.Type) & vbCrLf & vbCrLf

Next sh

End If

MsgBox (NesneListesi)

End Sub

 

Kodu çalıştıralım:

Capture5

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s