- Katılım
- 25 May 2018
- Mesajlar
- 1,610
- En iyi yanıt
- 14
- Puanları
- 113
- Konum
- İstanbul
- Web sitesi
- excelarsivi.com
- Ad Soyad
- Murat OSMA
- Office Vers.
- Microsoft 365 TR+EN
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;
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.
With kalıplarını iç içe de yazma imkânımız var. Yukarıdaki örneği baz alarak şöyle de yazabilirdik;
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..
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.
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;
With .. End With kalıbı ile bu şekilde daha kolay bir yazım kullanabilirsiniz.
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;
PHP:
With Sayfa1
.Range("A1").Value = "Murat"
.Range("A1").Font.Bold = True
.Range("A1").Interior.ColorIndex = 3
End With
Eğer bu kalıp olmasaydı, o zaman mecburen her satırda Sayfa1'i belirterek bu şekilde daha uzun yazmak zorunda kalacaktık.
PHP:
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;
PHP:
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 gerekirBazen 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..
PHP:
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
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.
PHP:
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;
PHP:
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
PHP:
Sub ExcelTurkey()
With Selection.Font
.Name = "Times New Roman"
.Size = 12
.Bold = True
.Italic = True
.ColorIndex = 5
End With
End Sub
Son düzenleme: