• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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.
 
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
 
Ç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ı?
 
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
 
Geri
Üst