Excel VBA Makrolarını Düzenleme

Excel VBA Makrolarıyla Çalışmak

Excel'deki makrolar VBA kodu olarak saklanır ve bazen bu kodu doğrudan düzenlemek isteyebilirsiniz. Bu öğretici, makroların nasıl görüntüleneceğini ve düzenleneceğini kapsayacak, bazı makro hata ayıklama tekniklerini açıklayacak ve bazı yaygın düzenleme örnekleri verecektir.

Makroları Görüntüle

Makrolar iletişim kutusunda bir makro listesi gösterilebilir. Bu iletişim kutusunu görüntülemek için şeritteki Geliştirici sekmesini seçin ve Makrolar düğmesini tıklayın.

Birden çok çalışma kitabı açıksa, tüm çalışma kitaplarındaki makrolar listede gösterilir. Etkin çalışma kitabındaki makrolar yalnızca adlarıyla görünürken, diğer çalışma kitaplarındaki makroların önüne çalışma kitabı adı ve bir ünlem işareti eklenir (ör. "Kitap2!DiğerMakro").

Düzenleme için bir Makro Açın

Makronun adını seçip Düzenle düğmesini tıklatarak bir makronun kodunu açmak için Makro iletişim kutusunu kullanabilirsiniz. Bu, makroyu VB Editöründe açacaktır.

Alternatif olarak, Geliştirici sekmesindeki Visual Basic düğmesini tıklatarak veya ALT+F11 klavye kısayoluna basarak VB Düzenleyicisini doğrudan açabilirsiniz.

Bu yöntemi kullanarak, istediğiniz makroya ('prosedür' de denir) gitmeniz gerekecektir. VBA Düzenleyici düzenini gözden geçireceğiz:

VB Editörüne Genel Bakış

VB Editörünün birkaç penceresi vardır; Bu eğitimde Proje Penceresini, Özellikler penceresini ve Kod Penceresini ele alacağız.

Proje Penceresi

Proje Penceresi, her Excel dosyasını kendi projesi olarak gösterir ve o projedeki tüm nesneler türe göre sınıflandırılır. Kaydedilen makrolar “Modüller” kategorisinde görünecektir, genellikle "Modül1" nesnesinde. (Projenizde birden fazla Modül varsa ve makronuzun nerede depolandığından emin değilseniz, yukarıda belirtilen Makrolar iletişim kutusundan açmanız yeterlidir.)

Özellikler Penceresi

Özellikler Penceresi, bir nesnenin özelliklerini ve ilişkili değerlerini gösterir - örneğin, Proje Penceresinde bir çalışma sayfası nesnesine tıklamak, çalışma sayfası için bir özellikler listesi gösterecektir. Mülk adları solda ve özellik değerleri sağdadır.

Proje penceresinde bir modülün seçilmesi, onun sadece bir özelliği olduğunu gösterecektir, “(Ad)”. Modülün adını, özelliğin değerine çift tıklayarak, yeni bir ad yazıp Enter'a basarak değiştirebilirsiniz. Bir modülün adını değiştirmek, onu Proje Penceresinde yeniden adlandıracaktır; bu, çok sayıda modülünüz varsa kullanışlıdır.

Kod pencereleri

Kod pencereleri, makronuzun VBA kodunu düzenleyebileceğiniz özel metin düzenleyicilerdir. Modül1'de bulunan bir makronun kodunu görmek isterseniz, Proje Penceresinde 'Modül1'e çift tıklarsınız.

VB Düzenleyicide Makro Çalıştırma

Makrolar, test ve hata ayıklama için yararlı olan VB Düzenleyiciden doğrudan çalıştırılabilir.

Makro Çalıştırmak

  • Proje Penceresinde, test etmek istediğiniz makroyu içeren modüle çift tıklayın (Kod penceresini açmak için)
  • Kod penceresinde, imleci makronun kodunda "Sub" ve "End Sub" arasında herhangi bir yere getirin
  • Tıkla Çalıştırmak araç çubuğundaki düğmesine basın veya klavye kısayolu F5'e basın

Bir Makroyu "Adım Adım"

Makroyu bir kerede çalıştırmak yerine, kodu "adımlamak" için bir klavye kısayolu kullanarak makroyu her seferinde bir satır çalıştırabilirsiniz. Makro, her satırda duraklayarak, her kod satırının Excel'de beklediğiniz şeyi yapmasını sağlamanıza olanak tanır. Ayrıca bu yöntemi kullanarak bir makronun devam etmesini istediğiniz zaman durdurabilirsiniz.

Bir makroyu "adımlamak" için:

  • Proje Penceresinde, test etmek istediğiniz makroyu içeren modüle çift tıklayın (Kod penceresini açmak için)
  • Kod penceresinde, imleci makronun kodunun herhangi bir yerine getirin
  • "Adım geçiş" işlemini başlatmak için klavye kısayolu F8'e basın
  • Kod penceresindeki sarı vurguyla gösterilen kod yürütmeyi ilerletmek için F8'e art arda basın
  • Bir makronun devam etmesini durdurmak için Sıfırla buton

Neden VBA Makrolarını Düzenlemeli?

Makro kaydedici - etkili olmakla birlikte - çok sınırlıdır. Bazı durumlarda yavaş makrolar üretir, tekrarlamayı düşünmediğiniz eylemleri veya yaptığınızı düşünmediğiniz şeyleri kaydeder. Makrolarınızı düzenlemeyi öğrenmek, onların daha hızlı, daha verimli ve daha öngörülebilir şekilde çalışmasına yardımcı olacaktır.

Bu sorunları çözmenin yanı sıra, makroların tüm gücünden yararlandığınızda üretkenlikte de büyük bir artış elde edeceksiniz. Makrolar yalnızca görevlerin kayıtları olmak zorunda değildir - makrolar mantık içerebilir, böylece görevleri yalnızca belirli koşullar altında gerçekleştirirler. Sadece birkaç dakika içinde, bir görevi tek seferde yüzlerce veya binlerce kez tekrarlayan döngüleri kodlayabilirsiniz!

Aşağıda, makro kodunuzu optimize etmenize yardımcı olacak bazı kullanışlı ipuçlarının yanı sıra makrolarınızın daha sıkı ve daha akıllı çalışmasını sağlayacak araçlar bulacaksınız.

Ortak Makro Düzenleme Örnekleri

Makroları Hızlandırın

Çalıştırması uzun süren bir makronuz varsa, yavaş çalışmasının birkaç nedeni olabilir.

Birincisi: bir makro çalıştığında, Excel her şeyi olduğu gibi gerçek zamanlı olarak gösterir - ancak bakmak sana hızlı aslındagösteriliyor iş önemli bir performans isabetidir. Excel'in önemli ölçüde daha hızlı çalışmasını sağlamanın bir yolu, ona şunu söylemektir: ekranı güncellemeyi durdur:

' Ekran Güncelleme Uygulamasını Devre Dışı Bırak.ScreenUpdating = False ' Ekran Güncelleme Uygulamasını Etkinleştir.ScreenUpdating = True

"Application.ScreenUpdating = False" satırı, makronun çalıştığını görmeyeceğiniz, ancak çok daha hızlı çalışacağı anlamına gelir. Makronuzun sonunda ScreenUpdating'i her zaman True olarak ayarlamanız gerektiğini unutmayın, aksi takdirde Excel daha sonra beklediğiniz gibi davranmayabilir!

Makroları hızlandırmanın başka bir yolu:makroda otomatik hesaplamayı kapat. Karmaşık elektronik tablolarla çalıştıysanız, küçük değişikliklerin tamamlanması zaman alan binlerce hesaplamayı tetikleyebileceğini bilirsiniz; bu nedenle birçok kişi Excel'in seçeneklerinde otomatik hesaplamayı kapatır. Bunu VBA koduyla da değiştirebilirsiniz, böylece makronuz diğer bilgisayarlarda hızlı bir şekilde çalışmaya devam eder. Bu, çok sayıda formül hücresini kopyalayıp yapıştırdığınız veya bir aralığa veri yapıştırırken çok sayıda hesaplamanın tetiklenmesine neden olduğunuz durumlarda yardımcı olur:

' Otomatik Hesaplama Uygulamasını Devre Dışı Bırak.Hesaplama = xlCalculationManual ' Otomatik Hesaplama Uygulamasını Etkinleştir.Hesaplama = xlCalculationAutomatic

Döngüler ve Mantık Ekle (Eğer İfadeleri)

Makro kaydedici, tüm eylemlerinizi VBA adlı bir dilde kod olarak kaydeder. VBA, Excel'de eylemleri kaydetmenin bir yolundan daha fazlasıdır - bu bir programlama dilidir; bu, hangi eylemlerin gerçekleştirileceğine ilişkin kararlar almak için kod içerebileceği veya bir koşul karşılanana kadar eylemleri tekrarlayabileceği anlamına gelir.

döngü

Diyelim ki bir rapor hazırlayan bir makro yapmak istiyorsunuz ve bu makronun bir parçası olarak çalışma kitabına toplam yirmi sayfa olmak üzere on dokuz sayfa eklemek zorunda kaldınız. (+) düğmesine defalarca tıklayarak kendinizi kaydedebilir veya eylemi sizin için tekrarlayan bir döngü yazabilirsiniz, şöyle:

Sub ReportPrep() Dim i As Long For i = 1 ila 19 Sheets.Add Next i End Sub

Bu örnekte, bir Döngü için, bir dizi öğe arasında yinelenen bir tür döngüdür. Burada, döngünün takip edebilmesi için 'i' adlı bir değişken kullanarak aralığımız 1'den 19'a kadar olan sayılardır. Döngümüzün içinde, arasında tekrarlanan yalnızca bir eylem var. için vesonraki satırları (sayfa ekleme), ancak döngünün içine, sayfayı biçimlendirmek veya her bir sayfaya veri kopyalayıp yapıştırmak gibi şeyler yapmak istediğiniz kadar kod ekleyebilirsiniz - tekrarlamak istediğiniz her şeyi.

If İfadeleri

Bir If deyimi Karar vermek için mantıksal bir test kullanarak bazı kodların çalışıp çalışmadığına karar vermek için kullanılır. İşte basit bir örnek:

Sub ClearIfSmall() Eğer Selection.Value < 100 ise Selection.Clear End If End Sub

Bu basit örnek, If ifadesinin nasıl çalıştığını gösterir - Doğru veya Yanlış olan bir koşulu test edersiniz (seçilen hücrenin değeri 100'den küçük mü?) ve test True değerini döndürürse, içindeki kod çalışır.

Bu kodun bir eksikliği, bir seferde yalnızca bir hücreyi test etmesidir (ve birden fazla hücre seçerseniz başarısız olur). Seçilmiş her hücrede dolaşıp her birini test edebilirseniz bu daha faydalı olacaktır.

Sub ClearIfSmall() Dim c As Range In Selection.Cells'deki Her c İçin C.Value < 100 ise c.Clear End If Next c End Sub

Bu örnekte, biraz farklı bir For döngüsü vardır - bu, bir dizi sayı arasında döngü yapmaz, bunun yerine izlemek için 'c' adlı bir değişken kullanarak seçimdeki tüm hücreler arasında döngü yapar. Döngü içinde, hücrenin temizlenip silinmeyeceğini belirlemek için 'c' değeri kullanılır.

Döngüler ve If ifadeleri istediğiniz şekilde birleştirilebilir - döngüleri döngülerin içine veya bir If'yi diğerinin içine koyabilirsiniz veya bir döngünün çalışıp çalışmayacağını belirlemek için bir If kullanabilirsiniz.

<<>>

Kaydırma Efektlerini Kaldır

Makro kodunu düzenlemenin yaygın bir nedeni, ekran kaydırmayı kaldırmaktır. Bir makroyu kaydederken, çalışma sayfasının diğer alanlarına kaydırma yaparak ulaşmanız gerekebilir, ancak makroların verilere erişmek için kaydırma yapması gerekmez.

Kaydırma, kodunuzu yüzlerce hatta binlerce gereksiz kod satırıyla karıştırabilir. Kaydırma çubuğuna tıklayıp sürüklediğinizde kaydedilen kodun bir örneği:

Bu tür kodlar tamamen gereksizdir ve diğer işlevleri etkilemeden silinebilir. Kaydırmayı korumak isteseniz bile, bu kod yine de bir döngüye sıkıştırılabilir.

Gereksiz kodu kaldırın

Kaydedilen makrolar, makronun yapmasını istediğiniz şeyi mutlaka yansıtmayan çok sayıda gereksiz kod ekleme eğilimindedir. Örneğin, bir hücrede yazı tipi adının değiştirilmesini kaydeden aşağıdaki kayıtlı kodu alın:

Sadece yazı tipi adı değiştirilse bile, yazı tipi boyutu, metin efektleri vb. on bir (11) yazı tipi değişikliği kaydedildi. Makronun amacı sadece yazı tipi adını değiştirmekse (diğer tüm özellikleri tek başına bırakarak) bu, kaydedilen makro çalışmaz!

Bu makroyu yalnızca yazı tipi adını değiştirecek şekilde değiştirmek mümkündür:

Bu makro yalnızca şimdi amaçlandığı gibi çalışmakla kalmayacak, aynı zamanda okunması da çok daha kolay.

İmleç Hareketlerini Kaldır

Makrolarda kaydedilen diğer bir şey de çalışma sayfası ve hücre seçimleridir. Bu bir sorundur, çünkü bir makro çalıştıktan sonra imleç farklı bir konuma hareket ederse, bir kullanıcı üzerinde çalıştıkları şeyin izini kolayca kaybedebilir.

Kaydırmada olduğu gibi, sen bir görevi gerçekleştirmek için imleci hareket ettirmeniz ve farklı hücreler seçmeniz gerekebilir, ancak makroların verilere erişmek için imleci kullanması gerekmez. Bir aralığı kopyalayan ve ardından onu diğer üç sayfaya yapıştıran aşağıdaki kodu göz önünde bulundurun:

Bu kodla ilgili birkaç sorun var:

  • Kullanıcı çalışma kitabındaki önceki yerini kaybedecek
  • Makro, hangi sayfayı kopyaladığımızı belirtmiyoritibaren - makro yanlış sayfada çalıştırıldıysa bu bir sorun olabilir

Ek olarak, kodun okunması zor ve savurgandır. Bu sorunlar yeterince kolayca çözülebilir:

Bu kodda, Sayfa1'den kopyaladığımızı ve verileri yapıştırmak için ne etkin çalışma sayfasının ne de seçilen aralığın değiştirilmesine gerek olmadığı açıktır. (Önemli bir değişiklik, "Yapıştır" yerine "PasteSpecial" kullanılmasıdır - "Range("C4")" gibi Aralık nesneleri yalnızca PasteSpecial komutuna erişebilir.)

Kod ".Select" ve "Selection" referanslarıyla dolduğunda, bu kodu optimize etmek ve daha verimli hale getirmek için yer olduğuna dair bir ipucudur.

wave wave wave wave wave