Vba diziye şekil tanıtmak

Katılım
26 Ağustos 2022
Mesajlar
9
Excel Vers. ve Dili
2010,ingilizce
Merhaba,

VBA'da bir dizi oluşturmak istiyorum ancak dizi elemanları şekiller(shapes) olacak. Daha sonra şekillerden kaç tanesi aktif(visible) kaç tanesi değil bunu sorgulatmak istiyorum. Şekilleri diziye nasıl tanımlatabilirim?
Teşekkürler.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,250
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki şekilde aktif sayfadaki gizli ve görünür şekil sayılarını bulabilirssiniz.

C++:
Option Explicit

Sub Test()
    Dim Nesne As Shape, X As Long, Y As Long

    For Each Nesne In ActiveSheet.Shapes
        If Nesne.Visible = False Then
            X = X + 1
        Else
            Y = Y + 1
        End If
    Next
  
    MsgBox "Gizli şekil sayısı ; " & X & vbCrLf & "Görünür şekil sayısı ; " & Y
End Sub

Aslında hiç gerek yok ama aşağıdaki gibi Dictionary nesnesinde şekilleri tanımlayabilirsiniz.

C++:
Option Explicit

Sub Test()
    Dim Nesne As Shape, X As Variant, Y As Variant

    Set X = VBA.CreateObject("Scripting.Dictionary")
    Set Y = VBA.CreateObject("Scripting.Dictionary")

    For Each Nesne In ActiveSheet.Shapes
        If Nesne.Visible = False Then
            X.Add Nesne, False
        Else
            Y.Add Nesne, False
        End If
    Next
   
    MsgBox "Gizli şekil sayısı ; " & X.Count & vbCrLf & "Görünür şekil sayısı ; " & Y.Count
End Sub
 
Katılım
26 Ağustos 2022
Mesajlar
9
Excel Vers. ve Dili
2010,ingilizce
Çok teşekkür ederim. Bir ufak sorum daha olacaktı. Ekranımdaki şekillerden bazıları gruplu örneği meyve grubunda dört meyve resmi var gibi.
Aslında sadece bir meyve görüntüsünün visible olmasını istiyorum.Yukarıdaki kodunuza ek tüm meyveleri dizilere tanımlasam çalışır mı?
 
Katılım
26 Ağustos 2022
Mesajlar
9
Excel Vers. ve Dili
2010,ingilizce
Kendim bulduğum için paylaşmak istiyorum. Eğer Excel sayfasındaki şekiller(nesneler) gruplanarak işlemler yapılacaksa Range(Array) komutu kullanılıyor.
Örnek; excel sayfasında 10 nesne var, bunun 5'i türk ligi takımları diğer 5'i alman ligi takımı ise kod şu şekilde.

Set myDocument = Worksheet("sayfaisminiz")
Set myRangeturkligi = myDocument.Shapes.Range(Array("fenerbahce","besiktas","GS",vs...))
SetmyRangealmanligi= myDocument.Shapes.Range(Array("mainz","bayern",vs...))

'daha sonra işlemler yapılabilir. Örneğin, grup içinde kaç takımın şekli visible ise kod şöyle;

For Each nesne in myRangeturkligi
If Nesne.Visible=True then
X=X+1
End if

Next
 
Üst