VBA'daki With - End With bloğu, VBA'ya verilen nesneyi kullanacağımızı ve verilen nesnenin özelliklerini yalnızca nokta operatörünü kullandığımızda dikkate alması gerektiğini söylemek için kullanılır. Bu makalenin ilerleyen bölümlerinde örnekler göreceğiz.
Sözdizimi İle - Blokla Bitir
[Nesne] ile '[Nesne]'yi değiştirmek veya kullanmak için kod '-- '-- Şununla Bitir
Artık With - End With bloğunun sözdizimini bildiğimize göre, kullanımına bakalım.
İle - Blok İle Bitiş Örneği
A2:A10 aralığında birkaç değişiklik yapmak istediğimi varsayalım. Bu aralığı seçmek, dolgu renklerini, yazı tipi stilini vb. değiştirmek istiyorum. Genel olarak nasıl yapardım? Muhtemelen şöyle:
Sub test() Range("A1:A10").Select Range("A1:A10").Interior.ColorIndex = 8 Range("A1:A10").Font.Name = "Cezayir" Aralık("A1:A10 ").Font.ColorIndex = 12 Range("A1:A10").Font.Underline = xlUnderlineStyleDouble Range("A1:A10").Copy Range("B1:B10") Range("A1:A10").Clear Alt Bitiş
Yukarıdaki, A1:A10 aralığını seçer. Aralığın iç rengini renk indeksi 8 olarak değiştirir. Yazı tipini Cezayir dili olarak değiştirir. Yazı tipinin rengini renk indeksi 12 olarak değiştirir. Aralıktaki metnin altını çift alt çizgi ile çizer. Ardından, aynı sayfanın A1:A10 aralığını B1:B10 aralığına kopyalar. Sonunda A1:A10 aralığını temizler.
A1:A10 aralığında her işlemi yapmak için her seferinde yazmamız gerektiğini fark edebilirsiniz. Ardından nokta operatörü özelliklerine erişir. Bu, işleme hızını azaltır ve VBA programcılarına ek iş yükünü artırır. Bunu yapmanın alternatifi With bloğu kullanmaktır: Aşağıdaki kod, yukarıdaki kodla aynı şeyi yapar ancak daha hızlıdır.
Alt test() Aralıklı("A1:A10") .Select .Interior.ColorIndex = 8 .Font.Name = "Cezayir" .Font.ColorIndex = 12 .Font.Underline = xlUnderlineStyleDouble .Copy Range("B1:B10" ) .End Sub ile Sonu Temizle
Başka bir örnek görelim.
Outlook Mail'in bir nesnesini oluşturduysanız, tüm özelliklerini başlatmak ve yöntemleri kullanmak için bu nesneyi kullanabilirsiniz.
Set outMail = Outlook.Application.CreateItem(0) outMail ile .To = "abcd.mail.com" 'Zorunlu. Burada hedef posta kimliğini tanımlarsınız… cc = "cc.mail.com" 'isteğe bağlı. İsterseniz Cc posta kimliği… BCC = "bcc.mail.com" 'isteğe bağlı. Bcc mail id isterseniz… Konu = subj 'olmalıdır. Posta gövdesindeki masaj… Gövde = msg 'isteğe bağlı. Posta gövdesindeki masaj… Ekler. "C:/exceltip.com\test.xlsx" ekleyin .Gönder Şununla Bitir
O nasıl çalışır?
Peki, With Range("A1:A10") yazdığımızda, vba referansını nesne aralığına ("A1:A10") kilitler. Yani ne zaman nokta (.) operatörü yazsak, VBA sadece Range("A1:A10") nesnesini veya bahsettiğiniz herhangi bir nesneyi etkileyecek olan bu aralık sınıfının tüm üyelerini listeler. VBA, End With ifadesini okuduğunda başvuru kilidi serbest bırakılır.
Bloklarla İç İçe
Başka bir blok içinde bir bloğumuz olabilir. Yukarıdaki örnekte, onu seçmek için bir aralık nesnesi kullandık. Sonra yazı tipleriyle çalışmak için Range.Font'u birkaç kez kullandık. Bu yine tekrar ediyor. Yukarıdaki kod şu şekilde de yazılabilir:
Alt test() Aralıklı("A1:A10") .Select .Interior.ColorIndex = 8 'Bir With Block içinde .Font ile başka bir With kullanma .Name = "Cezayir" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With .Copy Range("B1:B10") .Clear End with End Sub
İç blok, dış nesnenin alt üyesi olan bir nesneye atıfta bulunmalıdır. Dışsal olana nesneli, içtekine Çocuklu olarak atıfta bulunabiliriz. inner ile başladığınızda, nesne önceki nokta operatörü ile yazılmalıdır.
Çocuk olduğunuzda, ebeveyne özel mülklere erişemezsiniz. Örneğin, aşağıdaki kod yanlıştır.
Alt test() Aralıklı("A1:A10") .Select .Interior.ColorIndex = 8 'Bir With Block içinde .Font ile başka bir With kullanma .Name = "Cezayir" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble 'Aşağıdaki kod copy ve clear metotları font sınıfına ait olmadığı için hata üretecektir… Copy Range("B1:B10") .Clear End With End With End Sub
Blok ile Tam Nitelikli
Çalışma kitabını içeren kodda sayfa2'nin A1:A10 aralığının yazı tipiyle bazı değişiklikler yapmak istersem, tam nitelikli bir blok kullanmalıyız.
Aşağıdaki iki kod aynı şekilde çalışacaktır.
Sub test2() ThisWorkbook ile .Sheets("Sheet2") ile .Range("A1:A10") ile .Font ile .Name = "Cezayir" .ColorIndex = 12 .Underline = xlUnderlineStyleÇift Bitiş ile Bitiş ile Bitiş ile Bitiş Alt
'Blok Sub test3() ile tam nitelikli ThisWorkbook.Sheets("Shee2").Range("A1:A10").Font .Name = "Cezayir" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End with End Sub
Farkı görebilirsin. Bu nedenle, bir nesneden birden çok yöntem ve özellik kullanacağınızı bildiğinizde, başlangıçta tam nitelikli bir ad verin. Alt nesneleri kullanacaksanız, önceki yaklaşımı kullanın. Deneyimli programcılar her iki yöntemi de uygun durumlarda kullanırlar.
Evet arkadaşlar, VBA'da With - End With bloğunu bu şekilde kullanıyoruz. Umarım yeterince açıklayıcı olabilmişimdir ve bu makale With - End With kavramını anlamanıza yardımcı olmuştur. Bu makale veya başka bir konuyla ilgili herhangi bir şüpheniz varsa, aşağıdaki yorumlar bölümünde bana sorun. Size yardımcı olmaktan mutluluk duyarım.
Excel'de VBA değişkenleri| VBA, Visual Basic for Applications anlamına gelir. Microsoft'tan bir programlama dilidir. MSExcel, MS-Word ve MS-Access gibi Microsoft Office uygulamalarıyla kullanılırken VBA değişkenleri belirli anahtar kelimelerdir.
Excel VBA Değişken Kapsamı| Tüm programlama dillerinde, tanımlanmış bir değişkene nereden erişilebileceğini tanımlayan değişken erişim belirteçlerine sahibiz. Excel VBA İstisna değildir. VBA'nın da kapsam belirleyicileri vardır.
ByRef ve ByVal Argümanları | Bir argüman farklı bir alt veya fonksiyona ByRef argümanı olarak iletildiğinde, gerçek değişkenin referansı gönderilir. Değişkenin kopyasında yapılan herhangi bir değişiklik orijinal argümana yansır.
Microsoft Excel'de VBA kullanarak onay istemleri olmadan sayfaları silin | VBA kullanarak sayfaları sildiğiniz için ne yaptığınızı biliyorsunuz. Excel'e bu uyarıyı göstermemesini ve lanet olası sayfayı silmesini söylemek istersiniz.
Microsoft Excel 2016'da VBA Kullanarak Yeni Çalışma Kitabı Ekleme ve Kaydetme| Bu kodda, önce bir çalışma kitabı nesnesine bir başvuru oluşturduk. Sonra onu yeni bir çalışma kitabı nesnesiyle başlattık. Bu yaklaşımın yararı, bu yeni çalışma kitabında işlemleri kolayca yapabilmenizdir. Kaydetme, kapatma, silme vb.
Excel VBA Durum Çubuğunda Bir Mesaj Görüntüle| Excel'deki durum çubuğu, kod izleyicisi olarak kullanılabilir. VBA kodunuz uzun olduğunda ve VBA'yı kullanarak birkaç görev yaptığınızda, ekranın titrediğini görmemek için genellikle ekran güncellemesini devre dışı bırakırsınız.
Microsoft Excel 2016'da VBA Kullanarak Uyarı Mesajlarını Kapatın| Bu kod yalnızca VBA uyarılarını devre dışı bırakmakla kalmaz, aynı zamanda kodun zaman verimliliğini de artırır. Nasıl olduğunu görelim.
Popüler Makaleler:
Verimliliğinizi Artıracak 50 Excel Kısayolu | Görevinizde daha hızlı olun. Bu 50 kısayol, Excel'de daha da hızlı çalışmanızı sağlayacaktır.
Excel'de DÜŞEYARA İşlevi | Bu, farklı aralıklardan ve sayfalardan değer aramak için kullanılan excel'in en çok kullanılan ve popüler işlevlerinden biridir.
Excel 2016'da EĞERSAY | Bu şaşırtıcı işlevi kullanarak değerleri koşullarla sayın. Belirli değerleri saymak için verilerinizi filtrelemeniz gerekmez. Gösterge tablonuzu hazırlamak için Countif işlevi gereklidir.
Excel'de SUMIF İşlevi Nasıl Kullanılır | Bu, başka bir gösterge panosu temel işlevidir. Bu, belirli koşullardaki değerleri özetlemenize yardımcı olur.