Makro satırının "Option Explicit" ifadesi ile uyumu hk..

EKREM1661

Altın Üye
Katılım
10 Kasım 2006
Mesajlar
1,285
Excel Vers. ve Dili
Excel-2016
Altın Üyelik Bitiş Tarihi
03-02-2026
Hocam esenlikler dileğiyle; aşağıda, belirli bir sayfa alanını yazım, çizim ve objelerden temizleyen makro satırlarının Option Explicit altında çalışabilmesi için, Dim S1, Proceed, Alan, obj, xOK, yok As Variant bu şekilde variant değişkeni ile çalıştı ancak, ne kadar doğru ?

Kod:
Option Explicit

Private Sub CommandButton1_Click()
If Not Proceed = vbNo Then
With Range("A6:Z200")
    .Clear
    .NumberFormat = "General"
    .FormatConditions.Delete
    .Interior.ColorIndex = xlNone
End With

Set S1 = ActiveSheet
    S1.AutoFilterMode = False
Set Alan = S1.Range("A6:Z200")
For Each obj In S1.DrawingObjects
    If obj.Left <= Alan.Left + Alan.Width And obj.Left + obj.Width >= Alan.Left Then xOK = True Else xOK = False
    If obj.Top <= Alan.Top + Alan.Height And obj.Top + obj.Height >= Alan.Top Then yok = True Else yok = False
    If yok And xOK Then obj.Delete
Next
End If
End Sub
 
Son düzenleme:

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,550
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Dosya eklemediğinizden deneme şansı olmadan gpt yardımı ile

Kod:
Option Explicit

Private Sub CommandButton1_Click()
    Dim S1 As Worksheet
    Dim Proceed As VbMsgBoxResult
    Dim Alan As Range
    Dim obj As Shape

    ' Eğer kullanıcı "Hayır" derse, işlem yapılmasın
    If Not Proceed = vbNo Then
        ' Alanı temizleme
        With Range("A6:Z200")
            .Clear
            .NumberFormat = "General"
            .FormatConditions.Delete
            .Interior.ColorIndex = xlNone
        End With

        ' Sayfayı referans olarak al
        Set S1 = ActiveSheet
        S1.AutoFilterMode = False
      
        ' Alanı belirle
        Set Alan = S1.Range("A6:Z200")
      
        ' Çizim objelerini silme
        For Each obj In S1.Shapes
            If obj.Left <= Alan.Left + Alan.Width And obj.Left + obj.Width >= Alan.Left And _
               obj.Top <= Alan.Top + Alan.Height And obj.Top + obj.Height >= Alan.Top Then
                obj.Delete
            End If
        Next
    End If
End Sub
Siz dener misiniz ?

Dim S1, Proceed, Alan, obj, xOK, yok As Variant satırındaki tanımlama doğru değil. Çünkü burada yalnızca son değişken olan yok'un tipi Variant olarak belirlenmiş. Diğer tüm değişkenler (S1, Proceed, Alan, obj, xOK) varsayılan olarak Variant tipine sahip olmayacaktır. Doğru kullanım şöyle olmalı:


Kod:
Dim S1 As Worksheet
Dim Proceed As VbMsgBoxResult
Dim Alan As Range
Dim obj As Shape
Dim xOK As Boolean
Dim yok As Boolean
 
Son düzenleme:

EKREM1661

Altın Üye
Katılım
10 Kasım 2006
Mesajlar
1,285
Excel Vers. ve Dili
Excel-2016
Altın Üyelik Bitiş Tarihi
03-02-2026
Teşekkür ederim sn cems, hem düzenlemeniz konuyu netleştirdi, elinize sağlık..
 
Üst