Sayfa içindeki "Shapes" de Tıklamayı engelleme,

ikikan

Altın Üye
Katılım
3 Mart 2009
Mesajlar
517
Excel Vers. ve Dili
excel 2003 tr
Altın Üyelik Bitiş Tarihi
12.02.2026
Bana "Enabled " özeliği gibi davanan bir kod lazım. Bu koda sadece " Visible" ve "Transparency" özeliği çalışıyor.
Şimdiden Teşekkürler.

Kod:
' Yan grup şekillerini işle
    For Each SekilGrp2 In Yan_Grup.GroupItems
        '--------------
 
    If SekilGrp2.TextFrame2.TextRange.Text = "X" Then
       'SekilGrp2.Visible = msoFalse
       'SekilGrp2.LockAspectRatio = msoFalse ' Oran kilidi kapatılır
       SekilGrp2.Fill.Transparency = 1 ' Şekli şeffaf hale getirerek etkisiz hale getirin
       SekilGrp2.Locked = msoTrue ' Şekil kilitli
    
       Else
       'SekilGrp2.Visible = msoTrue
       'SekilGrp2.LockAspectRatio = msoTrue ' Oran kilidi açılır
       SekilGrp2.Fill.Transparency = 0 ' Şeffaflığı sıfıra ayarlayarak şekli etkinleştirin
       SekilGrp2.Locked = msoFalse ' Şekil kilidi açık
      
    End If
End With
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
471
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Maalesef, Enabled özelliğini doğrudan taklit eden bir VBA kodu yok
Ancak, Visible, Transparency ve Locked özelliklerini kullanarak "Enabled" özelliğinin işlevselliğini simüle edebilirsiniz. Bunu şu şekilde yapabilirsiniz:

Kod:
' Yan grup şekillerini işle
For Each SekilGrp2 In Yan_Grup.GroupItems

    '--------------

    If SekilGrp2.TextFrame2.TextRange.Text = "X" Then
        ' Şekli devre dışı bırak
        SekilGrp2.Visible = msoFalse ' Görünürlüğü kapatın
        SekilGrp2.Fill.Transparency = 1 ' Tam şeffaflık
        SekilGrp2.Locked = msoTrue ' Kilidi açık

    Else
        ' Şekli etkinleştir
        SekilGrp2.Visible = msoTrue ' Görünürlüğü açın
        SekilGrp2.Fill.Transparency = 0 ' Tam opaklık
        SekilGrp2.Locked = msoFalse ' Kilidi açık

    End If

Next SekilGrp2
Bu kod, her bir yan grup şeklini "X" metni içerenlere ve içermeyenlere göre iki kategoriye ayırır. "X" metni içeren şekiller devre dışı bırakılır ve şeffaf hale getirilirken, diğer şekiller etkinleştirilir ve opak hale getirilir. Bu, "Enabled" özelliğinin işlevselliğini simüle eder, ancak tam olarak aynı değildir.

Not :
Bu kod, SekilGrp2'nin bir şekil grubu olduğunu varsayar. Değilse, kodda gerekli ayarlamaları yapmanız gerekir.
Bu kod, bir şeklin kilitli olup olmadığını kontrol etmez. Kilitli şekiller, devre dışı bırakıldığında bile seçilebilir ve düzenlenebilir.
"Enabled" özelliğinin ek işlevselliği varsa, bu kodda taklit edilemeyebilir.

Umarım bu yardımcı olur!
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
471
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kod:
' Yan grup şekillerini işle
For Each SekilGrp2 In Yan_Grup.GroupItems

    '--------------

    If SekilGrp2.TextFrame2.TextRange.Text = "X" Then
        ' Şekli devre dışı bırak
        SekilGrp2.Visible = msoTrue ' Görünürlüğü açık tutun
        SekilGrp2.Fill.Transparency = 0.5 ' İsteğe bağlı: kısmi şeffaflık
        SekilGrp2.UserInterfaceOnly = True ' Kullanıcı etkileşimi yok
        SekilGrp2.Locked = msoTrue ' Kilidi açık

    Else
        ' Şekli etkinleştir
        SekilGrp2.Visible = msoTrue ' Görünürlüğü açık tutun
        SekilGrp2.Fill.Transparency = 0 ' Tam opaklık
        SekilGrp2.UserInterfaceOnly = False ' Kullanıcı etkileşimi var
        SekilGrp2.Locked = msoFalse ' Kilidi açık

    End If

Next SekilGrp2
Bu kod önceki yaklaşıma benzer şekilde çalışır, ancak UserInterfaceOnly özelliği eklenir. Bu özellik True olarak ayarlandığında, kullanıcı şekle tıklayamaz, seçemiyor veya onunla herhangi bir şekilde etkileşime giremez. Bu, "Enabled" özelliğinin işlevselliğini daha yakından taklit eder.

Not:
  • Bu kod yine de şeklin görünürlüğünü korur. İsterseniz Visible özelliğini msoFalse olarak ayarlayarak gizleyebilirsiniz, ancak bu durumda kullanıcı şeklin nerede olduğunu bilemeyebilir.
  • Şeklin kısmi şeffaflığı isteğe bağlıdır. Bu, devre dışı bırakılmış şekilleri görsel olarak ayırt etmenize yardımcı olabilir.
  • Bu kod, bir şeklin kilitli olup olmadığını kontrol etmez. Kilitli şekiller, devre dışı bırakıldığında bile seçilebilir ve düzenlenebilir.
Bu yaklaşım, "Enabled" özelliğinin tam bir kopyası olmasa da size daha fazla kontrol ve kullanıcı etkileşimini devre dışı bırakma yeteneği sağlar.
 

ikikan

Altın Üye
Katılım
3 Mart 2009
Mesajlar
517
Excel Vers. ve Dili
excel 2003 tr
Altın Üyelik Bitiş Tarihi
12.02.2026
" SekilGrp2.UserInterfaceOnly = True ' Kullanıcı etkileşimi yok" Bu kod tıklamayı eğelemedi!
Neden olabilir Grup içinde olası veya sayfa koruması aktif olmaması ?
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
471
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kodun tıklamayı tamamen engelleyememe ihtimali vardır. Bunun birkaç olası sebebi olabilir:

1. Grup Koruması:
Grup, Excel'deki Gruplama özelliği ile korunmuş olabilir. Bu durumda, kod grubu kullanıcı etkileşimine kapatsa da, grup koruması tıklamayı engelleyebilir. Grup korumasını kaldırmak için, grup üzerinde sağ tıklayın ve "Grubu Çöz" seçeneğini seçin.

2. Sayfa Koruması:
Sayfa, Excel'deki Sayfa Koruma özelliği ile korunmuş olabilir. Bu durumda, kod grubu kullanıcı etkileşimine kapatsa da, sayfa koruması tıklamayı engelleyebilir. Sayfa korumasını kaldırmak için, Dosya sekmesine gidin, Bilgi'ye tıklayın ve Sayfayı Koru'yu seçin. Ardından, koruma ayarlarını değiştirin veya korumayı tamamen kaldırın.

3. Kod Hatası:
Koddaki bir hata tıklamayı engellemeye neden olabilir. Kodu dikkatlice kontrol edin ve herhangi bir yazım hatası veya mantık hatası olup olmadığını görün.

Çözüm Önerileri:
  1. Grup Korumasını Kontrol Edin: Yukarıda bahsedildiği gibi, grup koruması tıklamayı engelleyebilir. Grubu çözerek sorunun çözülüp çözülmediğini kontrol edin.
  2. Sayfa Korumasını Kontrol Edin: Sayfa koruması da tıklamayı engelleyebilir. Sayfa korumasını devre dışı bırakarak sorunun çözülüp çözülmediğini kontrol edin.
  3. Kodu Kontrol Edin: Kodu dikkatlice kontrol edin ve herhangi bir yazım hatası veya mantık hatası olup olmadığını görün.
Umarım "SekilGrp2.UserInterfaceOnly = True" kodunun tıklamayı neden engellemeyebileceğini anlamanıza yardımcı olur
 

ikikan

Altın Üye
Katılım
3 Mart 2009
Mesajlar
517
Excel Vers. ve Dili
excel 2003 tr
Altın Üyelik Bitiş Tarihi
12.02.2026
Kod:
Sub YShape_Menu()
    Dim ws1Menu As Worksheet
    Dim Yan_Grup As Shape, SekilGrp2 As Shape
    Dim SekilAdi As String, Metin As String
    Dim MenuIndex As Long

    ' Ekran güncellemelerini, hesaplamaları, etkinlikleri ve uyarıları kapat
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .DisplayAlerts = False
    End With

    ' Sayfa korumasını geçici olarak kaldır
    ActiveSheet.Unprotect

    ' Çalışma sayfalarını ve şekilleri tanımla
    Set ws1Menu = ThisWorkbook.Sheets("AnaMenü")
    Set Yan_Grup = ws1Menu.Shapes("Grup 2")
    
    ' Bu makroyu çağıran şeklin adını al
    SekilAdi = Application.Caller

    ' Menü indexini temizle
    MenuIndex = Val(Replace(SekilAdi, "YMenu_", ""))
    
    ' Tüm şekilleri döngü içinde kontrol et
    For Each SekilGrp2 In Yan_Grup.GroupItems
        With SekilGrp2
            ' Şeklin metnini kontrol et
            Metin = .TextFrame2.TextRange.Text
            
            ' Eğer metin "X" ise, şekli devre dışı bırak
            If Metin = "X" Then
                '.Visible = msoFalse
                .Fill.Transparency = 1 ' Şekli şeffaf hale getirerek etkisiz hale getirin
                .Glow.Radius = 0
            Else
          
            
                ' Eğer metin "X" değilse, şekli etkinleştir
                '.Visible = msoTrue
                .Fill.Transparency = 0 ' Şeffaflığı sıfıra ayarlayarak şekli etkinleştirin
                
                ' Şekil adını kontrol edin ve isteğe bağlı olarak renkleri ayarlayın
                If .Name <> SekilAdi Then
                    .Fill.ForeColor.RGB = RGB(56, 109, 201)
                    .Glow.Radius = 0
                Else
                    .Fill.ForeColor.RGB = RGB(32, 56, 100)
                    .Glow.Color.RGB = RGB(46, 117, 182)
                    .Glow.Transparency = 0.4
                    .Glow.Radius = 12
                End If
            End If
        End With
    Next SekilGrp2
  
    
    ' Sayfa korumasını tekrar etkinleştir
    ActiveSheet.Protect

    ' Ekran güncellemelerini, hesaplamaları, etkinlikleri ve uyarıları geri aç
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .DisplayAlerts = True
    End With

    ' Örneğin B3 hücresine odaklan
    ws1Menu.Range("B2").Select
End Sub
Dediğin gibi tüm kontrolleri yaptım ama " If Metin = "X" Then" olmasına rağmen makro düğmeye tıklıyor ,
Exit Sub yapsam bu sefer diğer şekilleri değiştirmiyor.

' Eğer metin "X" ise, şekli devre dışı bırak
If Metin = "X" Then
'Bu araya Do while loop yerleştirsem olurmu?
'-------------------------------------
'.Visible = msoFalse
.Fill.Transparency = 1 ' Şekli şeffaf hale getirerek etkisiz hale getirin
.Glow.Radius = 0

Exit Sub
'-------------------------------------
Else
' diğer kodlar.................

End if
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
471
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Sorun:
Kodunuzdaki "If Metin = "X" Then" koşulu doğru çalışıyor gibi görünüyor, ancak "Exit Sub" komutu beklenen sonucu vermiyor. "Exit Sub" komutu sadece "If" bloğundan çıkış yapar, tüm makronun çalışmasını durdurmaz. Bu nedenle, diğer şekiller de etkilenmeden sadece "X" metnine sahip olan şekil devre dışı bırakılır.

Çözüm:
"X" metnine sahip olan şekli devre dışı bıraktıktan sonra makronun çalışmasını tamamen durdurmak için "Exit Sub" yerine "End Sub" komutu kullanmanız gerekir.

Kod:
Sub YShape_Menu()
    ' ... (kodun ilk kısmı)

    ' Tüm şekilleri döngü içinde kontrol et
    For Each SekilGrp2 In Yan_Grup.GroupItems
        With SekilGrp2
            ' Şeklin metnini kontrol et
            Metin = .TextFrame2.TextRange.Text
            
            ' Eğer metin "X" ise, şekli devre dışı bırak ve makronun çalışmasını durdur
            If Metin = "X" Then
                '.Visible = msoFalse
                .Fill.Transparency = 1 ' Şekli şeffaf hale getirerek etkisiz hale getirin
                .Glow.Radius = 0
                Exit Sub 'Makronun çalışmasını durdur
            End If

            ' ... (geri kalan kod)
        End With
    Next SekilGrp2

    ' ... (kodun son kısmı)
End Sub
 
Üst