Makale With .. End With Blokları

Bu Makale Yararlı Oldu mu?

  • Evet

  • Hayır


Sonuçlar yalnızca oylamadan sonra görülebilir.
Bir kontrole ait bir özellik değiştirilmek istendiği veya bir metot çağrıldığı durumlarda kontrol adının da verilmesi gerekir.
Herhangi bir kontrol elemanının birden fazla özelliğini değiştirmek ya da metotlarına ulaşmak için With .. End Wtih deyimi kolaylık sağlar.
Bu, kodun daha hızlı bir şekilde yürütülmesi ve kod stillerinin daha verimli hâle getirilmesinin bir başka yoludur.

Aynı nesneye ait birçok özellik belirtilmek istendiğinde, her seferinde nesne adını belirtmenize gerek kalmadan, With .. End With blokları kullanılarak ve özellik, metot vs. öncesinde . (nokta) ibaresi koyarak, o satırın With yanında belirtilen nesne ile ilgili olduğu belirtilir.

Kullanım biçimi şöyledir;
VBA:
With Sayfa1
     .Range("A1").Value = "Murat"
     .Range("A1").Font.Bold = True
     .Range("A1").Interior.ColorIndex = 3
End With
Yukarıdaki kodlar; VBE'deki adı Sayfa1 olan sayfanın A1 hücresine sırasıyla, Murat yazdırıp, Fontunu Kalın yapıp, arka plân dolgu rengini de Kırmızı olarak biçimlendirir.

Eğer bu kalıp olmasaydı, o zaman mecburen her satırda Sayfa1'i belirterek bu şekilde daha uzun yazmak zorunda kalacaktık.
VBA:
Sayfa1.Range("A1").Value = "Murat"
Sayfa1.Range("A1").Font.Bold = True
Sayfa1.Range("A1").Interior.ColorIndex = 3
With kalıplarını iç içe de yazma imkânımız var. Yukarıdaki örneği baz alarak şöyle de yazabilirdik;
VBA:
With Sayfa1
      With .Range("A1")
            .Value = "Murat"
            .Font.Bold = True
            .Interior.ColorIndex = 3
     End  With
End With
With Sayfa1 ifadesinin altında nokta ile başlayan satırların Sayfa1 ile ilgili olduğunu ifade eder. Aynı şekilde With .Range("A1") satırı altındaki nokta ile başlayan satırlar da .Range("A1") ile ilgili olduğunu ifade eder. Fakat bu iç içe kalıpların birbiri ile karışabilecek bir durumda olmaması ve birbirlerinden etkilememesi gerekir

Bazen kodlarla iki sayfa arasında veri alışverişe yaparız. Bu iki sayfanın adını da kodlarda belirtmemiz gerekir.
Örneğin; sayfada birden fazla sütundaki verileri diğer sayfaya aktarmak isteriz, o zaman her iki sayfa adını da kodlarda belirteceğimiz için kodlarımız biraz uzun bir hâl alır. Ama With .. End With blokları kullanılarak en azından Sayfa isimlerini tekrar tekrar yazmak zorunda kalmayız ve daha kısa bir kod işimizi çözebilir..

Bu duruma kodla bir örnek verelim..
With .. End With bloğunu kullanmadan kodlarımız böyleyken..
VBA:
Sub ExcelTurkey()
    Dim i&, a&
    For i = 1 To Sayfa1.Range("A65536").End(3).Row
        If Sayfa1.Cells(i, 1).Value = "Kitap" Then
            a = a + 1
            Sayfa2.Cells(a, 1).Value = Sayfa1.Cells(i, 1).Value
            Sayfa2.Cells(a, 2).Value = Sayfa1.Cells(i, 3).Value
            Sayfa2.Cells(a, 3).Value = Sayfa1.Cells(i, 4).Value
            Sayfa2.Cells(a, 4).Value = Sayfa1.Cells(i, 6).Value
            Sayfa2.Cells(a, 5).Value = Sayfa1.Cells(i, 8).Value
            Sayfa2.Cells(a, 6).Value = Sayfa1.Cells(i, 2).Value
            Sayfa2.Cells(a, 7).Value = Sayfa1.Cells(i, 5).Value
            Sayfa2.Cells(a, 8).Value = Sayfa1.Cells(i, 7).Value
            Sayfa2.Cells(a, 9).Value = Sayfa1.Cells(i, 9).Value
        End If
    Next i
    i = Empty: a = Empty
End Sub
With .. End With bloğunu kullandığımız kodlarımız bu şekilde olacaktır..
Aşağıda göreceğiniz üzere, Sayfa1 ifadesini bir kere With ile ifade ettikten sonra bir daha alt satırlarda Sayfa1 yazmamız gerek kalmadı.
Artık Cells öncesindeki her nokta işareti Sayfa1'i ifade etmiş olur. Sayfa1in şu hücresi gibi.
VBA:
Sub ExcelTurkey()
    Dim i&, a&
    With Sayfa1
        For i = 1 To .Range("A65536").End(3).Row
            If .Cells(i, 1).Value = "Kitap" Then
                a = a + 1
                Sayfa2.Cells(a, 1).Value = .Cells(i, 1).Value
                Sayfa2.Cells(a, 2).Value = .Cells(i, 3).Value
                Sayfa2.Cells(a, 3).Value = .Cells(i, 4).Value
                Sayfa2.Cells(a, 4).Value = .Cells(i, 6).Value
                Sayfa2.Cells(a, 5).Value = .Cells(i, 8).Value
                Sayfa2.Cells(a, 6).Value = .Cells(i, 2).Value
                Sayfa2.Cells(a, 7).Value = .Cells(i, 5).Value
                Sayfa2.Cells(a, 8).Value = .Cells(i, 7).Value
                Sayfa2.Cells(a, 9).Value = .Cells(i, 9).Value
            End If
        Next i
    End With
    i = Empty: a = Empty
End Sub
Son bir örnek daha verelim..
Diyelim ki; seçilen hücrenin yazı tipi özelliklerini değiştireceğiz.
With .. End With kalıbı olmadan bu şekilde yazabiliyor iken;
VBA:
Sub ExcelTurkey()
    Selection.Font.Name = "Times New Roman"
    Selection.Font.Size = 12
    Selection.Font.Bold = True
    Selection.Font.Italic = True
    Selection.Font.ColorIndex = 5
End Sub
With .. End With kalıbı ile bu şekilde daha kolay bir yazım kullanabilirsiniz.
VBA:
Sub ExcelTurkey()
    With Selection.Font
        .Name = "Times New Roman"
        .Size = 12
        .Bold = True
        .Italic = True
        .ColorIndex = 5
    End With
End Sub
 
Son düzenleme:
Admin

Yorumlar

Üst Alt