VBA'da "Fonksiyon" ve "Alt" Prosedürler

Yerleşik VBA İşlevleri

Kendi VBA işlevlerinizi oluşturmaya başlamadan önce, Excel VBA'nın kodunuzu yazarken kullanabileceğiniz zengin bir önceden oluşturulmuş yerleşik işlevler koleksiyonuna sahip olduğunu bilmek güzel.

Bu işlevlerin bir listesi VBA düzenleyicide görüntülenebilir:

  • Bir Excel çalışma kitabı açın ve VBA düzenleyicisini başlatın (bunu yapmak için tıklayın Alt + F11) ve ardından F2.
  • Ekranın sol üst köşesindeki açılır listeden bir kitaplık seçin VBA.
  • Yerleşik VBA sınıflarının ve işlevlerinin bir listesi görünecektir. Pencerenin altında kısa açıklamasını görüntülemek için fonksiyon adına tıklayın. basmak F1 bu özellik için çevrimiçi yardım sayfasını açacaktır.

Ayrıca, örneklerle birlikte yerleşik VBA işlevlerinin tam listesi Visual Basic Developer Center'da bulunabilir.

VBA'da "İşlev" ve "Alt" özel prosedürler

Excel Visual Basic'te, belirli bir görevi gerçekleştiren bir dizi komut bir yordama yerleştirilir. işlev (İşlev) veya Alt (Alt program). Prosedürler arasındaki temel fark işlev и Alt prosedür bu mu işlev sonuç, prosedür döndürür Alt - olumsuzluk.

Bu nedenle, eylemleri gerçekleştirmeniz ve bir sonuç almanız gerekiyorsa (örneğin, birkaç sayıyı toplayın), genellikle prosedür kullanılır. işlevve bazı eylemleri basitçe gerçekleştirmek için (örneğin, bir hücre grubunun biçimlendirmesini değiştirin), prosedürü seçmeniz gerekir. Alt.

Argümanlar

Argümanlar kullanılarak VBA prosedürlerine çeşitli veriler iletilebilir. Bir prosedür bildirilirken argüman listesi belirtilir. Örneğin, prosedür Alt VBA'da, seçilen aralıktaki her hücreye verilen tamsayıyı (Tamsayı) ekler. Bu numarayı aşağıdaki gibi bir argüman kullanarak prosedüre iletebilirsiniz:

Sub AddToCells(i As Integer) ... End Sub

Prosedürler için argümanlara sahip olduğunuzu unutmayın. işlev и Alt VBA'da isteğe bağlıdır. Bazı prosedürler argüman gerektirmez.

İsteğe Bağlı Bağımsız Değişkenler

VBA prosedürleri isteğe bağlı argümanlara sahip olabilir. Bunlar kullanıcının isterse belirtebileceği argümanlardır ve atlanırlarsa prosedür onlar için varsayılan değerleri kullanır.

Önceki örneğe dönersek, bir fonksiyona tamsayı argümanını isteğe bağlı yapmak için, şu şekilde bildirilir:

Sub AddToCells(Opsiyonel i As Integer = 0)

Bu durumda, tamsayı argümanı i varsayılan 0 olacaktır.

Bir prosedürde, tümü bağımsız değişken listesinin sonunda listelenen birkaç isteğe bağlı bağımsız değişken olabilir.

Argümanları değere ve referansa göre iletme

VBA'daki argümanlar bir prosedüre iki şekilde geçirilebilir:

  • ByVal – bir argümanı değere göre iletmek. Bu, prosedüre yalnızca değerin (yani argümanın bir kopyasının) iletildiği ve bu nedenle prosedür içindeki argümanda yapılan herhangi bir değişikliğin prosedürden çıkıldığında kaybolacağı anlamına gelir.
  • ByRef - referansa göre bir argüman iletmek. Yani, bellekteki argüman konumunun gerçek adresi prosedüre iletilir. Prosedürün içindeki bir argümanda yapılan herhangi bir değişiklik, prosedürden çıkıldığında kaydedilecektir.

Anahtar kelimeleri kullanma ByVal or ByRef prosedür bildiriminde, argümanın prosedüre nasıl iletileceğini belirtebilirsiniz. Bu, aşağıdaki örneklerde gösterilmiştir:

Sub AddToCells(ByVal i As Integer) ... End Sub
Bu durumda, tamsayı argümanı i değere göre geçti. Prosedürden ayrıldıktan sonra Alt hepsi ile yapılmış i değişiklikler kaybolacaktır.
Sub AddToCells(ByRef i As Integer) ... End Sub
Bu durumda, tamsayı argümanı i referansla geçti. Prosedürden ayrıldıktan sonra Alt hepsi ile yapılmış i değişiklikler prosedüre geçirilen değişkende saklanacaktır Alt.

VBA'daki argümanların varsayılan olarak referans olarak iletildiğini unutmayın. Başka bir deyişle, anahtar kelimeler kullanılmıyorsa ByVal or ByRef, daha sonra argüman referansla iletilecektir.

Prosedürlere geçmeden önce işlev и Alt daha ayrıntılı olarak, bu iki prosedür türü arasındaki özelliklere ve farklılıklara bir kez daha bakmak faydalı olacaktır. Aşağıdakiler VBA prosedürlerinin kısa tartışmalarıdır işlev и Alt ve basit örnekler gösterilmiştir.

VBA prosedürü «İşlev»

VBA düzenleyicisi prosedürü tanır işlevaşağıdaki açılış ve kapanış ifadeleri arasında yer alan bir grup komutla karşılaştığında:

İşlev ... Son İşlev

Daha önce de belirtildiği gibi, prosedür işlev VBA'da (karşıt olarak Alt) bir değer döndürür. Değerleri döndürmek için aşağıdaki kurallar geçerlidir:

  • Dönüş değerinin veri tipi, prosedürün başlığında bildirilmelidir. işlev.
  • Dönüş değerini içeren değişken, prosedürle aynı şekilde adlandırılmalıdır. işlev. Her zaman prosedürün ayrılmaz bir parçası olarak var olduğundan, bu değişkenin ayrı olarak bildirilmesi gerekmez. işlev.

Bu, aşağıdaki örnekte iyi bir şekilde gösterilmiştir.

VBA İşlev Örneği: 3 Sayıda Matematiksel İşlem Gerçekleştirme

Aşağıda bir VBA prosedür kodu örneği verilmiştir. işlev, bu tür üç argüman alır Çift (çift duyarlıklı kayan noktalı sayılar). Sonuç olarak, prosedür başka bir sayı türü döndürür Çiftilk iki argümanın toplamından üçüncü argümanın çıkarılmasına eşittir:

Fonksiyon SumMinus(dNum1 Double olarak, dNum2 Double olarak, dNum3 Double olarak) Double olarak SumMinus = dNum1 + dNum2 - dNum3 Bitiş Fonksiyonu

Bu çok basit VBA prosedürü işlev verilerin argümanlar aracılığıyla bir prosedüre nasıl aktarıldığını gösterir. Prosedürün döndürdüğü veri türünün şu şekilde tanımlandığını görebilirsiniz. Çift (kelimeler söylüyor Çift olarak argüman listesinden sonra). Bu örnek ayrıca prosedürün sonucunun nasıl olduğunu gösterir. işlev prosedür adıyla aynı ada sahip bir değişkende saklanır.

VBA prosedürünü “İşlev” çağırma

Yukarıdaki basit prosedür ise işlev Visual Basic düzenleyicisindeki bir modüle eklendiğinde, diğer VBA prosedürlerinden çağrılabilir veya bir Excel çalışma kitabındaki bir çalışma sayfasında kullanılabilir.

Başka bir prosedürden VBA prosedürünü “Fonksiyon” çağırın

Prosedür işlev bu prosedürü bir değişkene atayarak başka bir VBA prosedüründen çağrılabilir. Aşağıdaki örnek, bir prosedüre yapılan çağrıyı göstermektedir. özet, yukarıda tanımlanan.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Bir çalışma sayfasından VBA prosedürünü “İşlev” olarak adlandırın

VBA prosedürü işlev herhangi bir yerleşik Excel işleviyle aynı şekilde bir Excel çalışma sayfasından çağrılabilir. Bu nedenle, önceki örnekte oluşturulan prosedür işlev - özet bir çalışma sayfası hücresine aşağıdaki ifade girilerek çağrılabilir:

=SumMinus(10, 5, 2)

VBA prosedürü «Alt»

VBA editörü, önünde bir prosedür olduğunu anlar. Altaşağıdaki açılış ve kapanış ifadeleri arasında yer alan bir grup komutla karşılaştığında:

Alt ... Alt Alt

VBA prosedürü "Alt": Örnek 1. Seçilen hücre aralığında merkez hizalaması ve yazı tipi boyutu değişikliği

Basit bir VBA prosedürü örneğini düşünün Alt, görevi seçilen hücre aralığının biçimlendirmesini değiştirmektir. Hücreler ortalanır (hem dikey hem de yatay olarak) ve yazı tipi boyutu kullanıcı tarafından belirtilen şekilde değiştirilir:

Sub Format_Centered_And_Sized(Opsiyonel iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Bu prosedür Alt eylemleri gerçekleştirir ancak bir sonuç döndürmez.

Bu örnek ayrıca bir İsteğe Bağlı bağımsız değişken kullanır Yazı Boyutu. eğer argüman Yazı Boyutu prosedüre geçilmedi Alt, o zaman varsayılan değeri 10'dur. Ancak, bağımsız değişken Yazı Boyutu prosedüre geçti Alt, ardından seçilen hücre aralığı, kullanıcı tarafından belirtilen yazı tipi boyutuna ayarlanacaktır.

VBA Alt Prosedürü: Örnek 2: Seçili Hücre Aralığında Ortaya Hizalama ve Kalın Yazı Tipi

Aşağıdaki prosedür, az önce tartışılana benzer, ancak bu sefer, yeniden boyutlandırmak yerine, seçilen hücre aralığına kalın bir yazı tipi stili uygular. Bu bir örnek prosedürdür Alt, hiçbir argüman almaz:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Excel VBA'da “Alt” Prosedürü Çağırma

Başka bir prosedürden VBA prosedürünü “Alt” olarak adlandırın

Bir VBA prosedürünü çağırmak için Alt başka bir VBA prosedüründen, anahtar kelimeyi yazmanız gerekir Çağrı, prosedür adı Alt ve ayrıca parantez içinde prosedürün argümanları vardır. Bu, aşağıdaki örnekte gösterilmiştir:

Sub main() Çağrı Format_Centered_And_Sized(20) End Sub

eğer prosedür Format_Centered_And_Sized birden fazla argüman varsa, virgülle ayrılmalıdırlar. Bunun gibi:

Sub main() Çağrı Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Çalışma sayfasından VBA prosedürünü “Alt” olarak adlandırın

Prosedür Alt bir prosedürle yapılabileceği gibi doğrudan bir Excel sayfa hücresine girilemez işlevçünkü prosedür Alt bir değer döndürmez. Ancak, prosedürler Alt, hiçbir argümanı olmayan ve olarak ilan edilen Açık Alan (aşağıda gösterildiği gibi) çalışma sayfasının kullanıcıları tarafından kullanılabilir olacaktır. Bu nedenle, yukarıda tartışılan basit prosedürler Alt Visual Basic Düzenleyicisi'ndeki bir modüle eklenen yordam Format_Centered_And_Bold bir Excel çalışma sayfasında kullanıma sunulacak ve prosedür Format_Centered_And_Sized – argümanları olduğu için mevcut olmayacak.

İşte bir prosedürü çalıştırmanın (veya yürütmenin) kolay bir yolu Alt, çalışma sayfasından erişilebilir:

  • Basın Alt + F8 (Tuşa basın Ara Toplam ve basılı tutarken tuşuna basın F8).
  • Görüntülenen makrolar listesinde çalıştırmak istediğinizi seçin.
  • Basın koşmak (koşmak)

Bir prosedür gerçekleştirmek için Alt hızlı ve kolay bir şekilde, ona bir klavye kısayolu atayabilirsiniz. Bunun için:

  • Basın Alt + F8.
  • Görüntülenen makrolar listesinde, klavye kısayolu atamak istediğinizi seçin.
  • Basın parametreler (Seçenekler) ve görünen iletişim kutusunda klavye kısayolunu girin.
  • Basın OK ve iletişim kutusunu kapat Makro (Makro).

Dikkat: Bir makroya klavye kısayolu atarken, bunun Excel'de standart olarak kullanılmadığından emin olun (örneğin, Ctrl + C). Zaten var olan bir klavye kısayolunu seçerseniz, makroya yeniden atanır ve bunun sonucunda kullanıcı makroyu yanlışlıkla başlatabilir.

VBA Prosedür Kapsamı

Bu öğreticinin 2. Kısmı, değişkenlerin ve sabitlerin kapsamını ve anahtar kelimelerin rolünü tartıştı. Açık Alan и Özel Etkinlik. Bu anahtar sözcükler VBA prosedürleriyle de kullanılabilir:

Public Sub AddToCells(i As Integer) ... End Sub
Prosedür bildiriminden önce anahtar kelime geliyorsa Açık Alan, ardından prosedür o VBA projesindeki tüm modüller için geçerli olacaktır.
Private Sub AddToCells(i As Integer) ... End Sub
Prosedür bildiriminden önce anahtar kelime geliyorsa Özel Etkinlik, bu prosedür yalnızca geçerli modül için geçerli olacaktır. Başka bir modüldeyken veya bir Excel çalışma kitabından çağrılamaz.

Bir VBA prosedürü ilan etmeden önce bunu unutmayın. işlev or Alt anahtar kelime eklenmedi, prosedür için varsayılan özellik ayarlandı Açık Alan (yani, bu VBA projesinde her yerde mevcut olacaktır). Bu, varsayılan olarak değişken bildirimlerin aksinedir. Özel Etkinlik.

“İşlev” ve “Alt” VBA prosedürlerinden erken çıkış

Bir VBA prosedürünün yürütülmesini sonlandırmanız gerekirse işlev or Alt, doğal sonunu beklemeden bunun için operatörler var Çıkış Fonksiyonu и Exit Sub. Bu operatörlerin kullanımı, örnek olarak basit bir prosedür kullanılarak aşağıda gösterilmiştir. işlevDaha fazla işlem gerçekleştirmek için olumlu bir argüman almayı bekleyen A. Prosedüre pozitif olmayan bir değer iletilirse, başka bir işlem gerçekleştirilemez, bu nedenle kullanıcıya bir hata mesajı gösterilmeli ve prosedürden hemen çıkılmalıdır:

İşlev VAT_Amount(sVAT_Rate As Single) Tek olarak VAT_Amount = 0 If sVAT_Rate <= 0 Sonra MsgBox "sVAT_Rate Pozitif Değeri Beklendi, Ancak Alındı ​​" & sVAT_Rate Çıkış Fonksiyon End If ... End Function

Lütfen prosedürü tamamlamadan önce işlev - KDV_Tutar, koda yerleşik bir VBA işlevi eklenir Mesaj Kutusu, kullanıcıya bir uyarı açılır penceresi görüntüler.

Yorum bırak