VBA - Hızlı Kılavuz

VBA şu anlama gelir: Vgerçek Basic için AMicrosoft'tan, artık ağırlıklı olarak MSExcel, MS-Word ve MS-Access gibi Microsoft ofis uygulamalarıyla kullanılan olay odaklı bir programlama dilini uygular.

Teknisyenlerin bu uygulamaların yeteneklerini geliştirmek için özelleştirilmiş uygulamalar ve çözümler geliştirmelerine yardımcı olur. Bu tesisin avantajı, PC'mize visual basic'in yüklenmesine İHTİYACINIZ OLMAMASI, ancak Office'i yüklemek dolaylı olarak amaca ulaşmanıza yardımcı olacaktır.

VBA'yı MS-Office 97'den MS-Office 2013'e kadar tüm ofis sürümlerinde ve ayrıca mevcut en yeni sürümlerden herhangi biriyle kullanabilirsiniz. VBA arasında Excel VBA en popüler olanıdır. VBA kullanmanın avantajı, doğrusal programlama kullanarak MS Excel'de çok güçlü araçlar oluşturabilmenizdir.

VBA Uygulaması

MS-Excel'in kendisi birçok dahili işlev sağladığından, Excel'de VBA'yı neden kullanmanız gerektiğini merak edebilirsiniz. MS-Excel, yalnızca karmaşık hesaplamaları gerçekleştirmek için yeterli olmayabilecek temel dahili işlevleri sağlar. Bu koşullar altında, VBA en bariz çözüm haline gelir.

Örneğin, Excel'in yerleşik formüllerini kullanarak bir kredinin aylık geri ödemesini hesaplamak çok zordur. Aksine, böyle bir hesaplama için bir VBA programlamak kolaydır.

VBA Düzenleyiciye Erişim

Excel penceresinde "ALT + F11" tuşlarına basın. Aşağıdaki ekran görüntüsünde gösterildiği gibi bir VBA penceresi açılır.

Bu bölümde, adım adım basit bir makro yazmayı öğreneceksiniz.

Step 1- Önce, Excel 20XX'te 'Geliştirici' menüsünü etkinleştirin. Aynısını yapmak için Dosya → Seçenekler'i tıklayın.

Step 2- 'Şeridi Özelleştir' sekmesini tıklayın ve 'Geliştirici'yi işaretleyin. 'Tamam'ı tıklayın.

Step 3 - Menü çubuğunda 'Geliştirici' şeridi görünür.

Step 4 - VBA Düzenleyiciyi açmak için 'Visual Basic' düğmesine tıklayın.

Step 5- Bir düğme ekleyerek komut dosyası oluşturmaya başlayın. Ekle'ye tıklayın → Düğmeyi seçin.

Step 6 - Sağ tıklayın ve 'özellikler'i seçin.

Step 7 - Aşağıdaki ekran görüntüsünde gösterildiği gibi adı ve başlığı düzenleyin.

Step 8 - Şimdi düğmeye çift tıklayın ve alt prosedür taslağı aşağıdaki ekran görüntüsünde gösterildiği gibi görüntülenecektir.

Step 9 - Yalnızca bir mesaj ekleyerek kodlamaya başlayın.

Private Sub say_helloworld_Click()
   MsgBox "Hi"
End Sub

Step 10- Alt prosedürü yürütmek için düğmeye tıklayın. Alt prosedürün çıktısı aşağıdaki ekran görüntüsünde gösterilmektedir. Tasarım modunun açık olduğundan emin olun. Açık değilse açmak için tıklamanız yeterlidir.

Note - Daha sonraki bölümlerde, 1'den 10'a kadar olan adımlarda açıklandığı gibi basit bir düğme kullanarak göstereceğiz. Bu nedenle, bu bölümü iyice anlamak önemlidir.

Bu bölümde, yaygın olarak kullanılan excel VBA terminolojileri hakkında bilgi sahibi olacaksınız. Bu terminolojiler sonraki modüllerde kullanılacağından, bunların her birinin anlaşılması önemlidir.

Modüller

Modüller, kodun yazıldığı alandır. Bu yeni bir Çalışma Kitabıdır, dolayısıyla herhangi bir Modül yoktur.

Bir Modül eklemek için, Ekle → Modül'e gidin. Bir modül eklendiğinde 'module1' oluşturulur.

Modüller içerisinde VBA kodu yazabiliriz ve kod bir Prosedür içerisinde yazılır. Prosedür / Alt Prosedür, ne yapılacağını açıklayan bir dizi VBA ifadesidir.

Prosedür

Prosedürler, bir bütün olarak yürütülen ve Excel'e belirli bir görevi nasıl gerçekleştireceğini bildiren bir grup deyimdir. Gerçekleştirilen görev çok basit veya çok karmaşık bir görev olabilir. Bununla birlikte, karmaşık prosedürleri daha küçük prosedürlere ayırmak iyi bir uygulamadır.

İki ana Prosedür türü Alt ve İşlevdir.

Fonksiyon

İşlev, programınızın herhangi bir yerinde çağrılabilen yeniden kullanılabilir bir kod grubudur. Bu, aynı kodu tekrar tekrar yazma ihtiyacını ortadan kaldırır. Bu, programcıların büyük bir programı birkaç küçük ve yönetilebilir işleve bölmesine yardımcı olur.

Dahili İşlevlerin yanı sıra, VBA kullanıcı tanımlı işlevlerin de yazılmasına izin verir ve ifadeler arasında yazılır Function ve End Function.

Alt Prosedürler

Alt prosedürler, işlevlere benzer şekilde çalışır. Alt prosedürler bir değer DÖNDÜRMEZ iken, işlevler bir değer döndürebilir veya dönmeyebilir. Alt prosedürler çağrı anahtar sözcüğü olmadan çağrılabilir. Alt prosedürler her zamanSub ve End Sub ifadeler.

Yorumlar, program mantığını ve diğer programcıların gelecekte aynı kod üzerinde sorunsuz bir şekilde çalışabilecekleri kullanıcı bilgilerini belgelemek için kullanılır.

Tarafından geliştirilen, değiştirilen bilgiler gibi bilgileri içerir ve ayrıca birleştirilmiş mantığı da içerebilir. Yorumlar, yürütme sırasında yorumlayıcı tarafından yok sayılır.

VBA'daki yorumlar iki yöntemle belirtilir.

  • Tek Alıntı (') ile başlayan herhangi bir ifade yorum olarak kabul edilir. Aşağıda bir örnek verilmiştir.

' This Script is invoked after successful login 
' Written by : TutorialsPoint 
' Return Value : True / False
  • "REM" anahtar kelimesiyle başlayan herhangi bir ifade. Aşağıda bir örnek verilmiştir.

REM This Script is written to Validate the Entered Input 
REM Modified by  : Tutorials point/user2

MsgBox function bir mesaj kutusu görüntüler ve kullanıcının bir düğmeyi tıklamasını bekler ve ardından kullanıcı tarafından tıklanan düğmeye bağlı olarak bir eylem gerçekleştirilir.

Sözdizimi

MsgBox(prompt[,buttons][,title][,helpfile,context])

Parametre Açıklama

  • Prompt- Gerekli Bir Parametre. İletişim kutusunda mesaj olarak görüntülenen bir Dize. Maksimum bilgi istemi uzunluğu yaklaşık 1024 karakterdir. Mesaj bir satırdan fazlasını kapsıyorsa, satırlar, her satır arasında bir satırbaşı karakteri (Chr (13)) veya satır besleme karakteri (Chr (10)) kullanılarak ayrılabilir.

  • Buttons- İsteğe Bağlı Bir Parametre. Görüntülenecek düğmelerin türünü, kullanılacak simge stilini, varsayılan düğmenin kimliğini ve mesaj kutusunun modalitesini belirten bir Sayısal ifade. Boş bırakılırsa, düğmeler için varsayılan değer 0'dır.

  • Title- İsteğe Bağlı Bir Parametre. İletişim kutusunun başlık çubuğunda görüntülenen bir String ifadesi. Başlık boş bırakılırsa, uygulama adı başlık çubuğuna yerleştirilir.

  • Helpfile- İsteğe Bağlı Bir Parametre. İletişim kutusu için bağlama duyarlı yardım sağlamak için kullanılacak Yardım dosyasını tanımlayan bir String ifadesi.

  • Context- İsteğe Bağlı Bir Parametre. Yardım yazarı tarafından uygun Yardım konusuna atanan Yardım içerik numarasını tanımlayan sayısal bir ifade. Bağlam sağlanmışsa, yardım dosyası da sağlanmalıdır.

Buttons parametresi aşağıdaki değerlerden herhangi birini alabilir -

  • 0 vbOKOnly - Yalnızca Tamam düğmesini görüntüler.

  • 1 vbOKCancel - Tamam ve İptal düğmelerini görüntüler.

  • 2 vbAbortRetryIgnore - Durdur, Yeniden Dene ve Yoksay düğmelerini görüntüler.

  • 3 vbYesNoCancel - Evet, Hayır ve İptal düğmelerini görüntüler.

  • 4 vbYesNo - Evet ve Hayır düğmelerini görüntüler.

  • 5 vbRetryCancel - Yeniden Dene ve İptal düğmelerini görüntüler.

  • 16 vbCritical - Kritik Mesaj simgesini görüntüler.

  • 32 vbQuestion - Uyarı Sorgusu simgesini görüntüler.

  • 48 vbExclamation - Uyarı Mesajı simgesini görüntüler.

  • 64 vbInformation - Bilgi Mesajı simgesini görüntüler.

  • 0 vbDefaultButton1 - İlk düğme varsayılandır.

  • 256 vbDefaultButton2 - İkinci düğme varsayılandır.

  • 512 vbDefaultButton3 - Üçüncü düğme varsayılandır.

  • 768 vbDefaultButton4 - Dördüncü düğme varsayılandır.

  • 0 vbApplicationModal Application modal - Geçerli uygulama, kullanıcı ileti kutusuna yanıt verene kadar çalışmayacaktır.

  • 4096 vbSystemModal Sistem modu - Kullanıcı ileti kutusuna yanıt verene kadar tüm uygulamalar çalışmayacak.

Yukarıdaki değerler mantıksal olarak dört gruba ayrılır: first group(0 ila 5), ​​mesaj kutusunda görüntülenecek düğmeleri belirtir. second group (16, 32, 48, 64) görüntülenecek simgenin stilini açıklar, third group (0, 256, 512, 768), hangi düğmenin varsayılan olması gerektiğini ve fourth group (0, 4096) mesaj kutusunun modalitesini belirler.

Dönen Değerler

Mesaj Kutusu işlevi, kullanıcının mesaj kutusunda tıkladığı düğmeyi tanımlamak için kullanılabilecek aşağıdaki değerlerden birini döndürebilir.

  • 1 - vbOK - Tamam tıklandı
  • 2 - vbCancel - İptal tıklandı
  • 3 - vbAbort - İptal tıklandı
  • 4 - vbRetry - Yeniden dene tıklandı
  • 5 - vbIgnore - Yoksay tıklandı
  • 6 - vbYes - Evet tıklandı
  • 7 - vbNo - Hayır tıklandı

Misal

Function MessageBox_Demo() 
   'Message Box with just prompt message 
   MsgBox("Welcome")     
   
   'Message Box with title, yes no and cancel Butttons  
   int a = MsgBox("Do you like blue color?",3,"Choose options") 
   ' Assume that you press No Button  
   msgbox ("The Value of a is " & a) 
End Function

Çıktı

Step 1 - Yukarıdaki İşlev, VBA Penceresinde "Çalıştır" düğmesine tıklanarak veya aşağıdaki ekran görüntüsünde gösterildiği gibi Excel Çalışma Sayfasından işlev çağrılarak yürütülebilir.

Step 2 - "Hoş Geldiniz" mesajı ve "Tamam" Düğmesi ile Basit Mesaj kutusu görüntülenir

Step 3 - Tamam'ı tıkladıktan sonra, "evet, hayır ve iptal" düğmeleriyle birlikte bir mesajla birlikte başka bir iletişim kutusu görüntülenir.

Step 4- 'Hayır' düğmesine tıkladıktan sonra, bu düğmenin (7) değeri bir tam sayı olarak kaydedilir ve aşağıdaki ekran görüntüsünde gösterildiği gibi kullanıcıya bir mesaj kutusu olarak görüntülenir. Bu değer kullanılarak kullanıcının hangi butona tıkladığı anlaşılabilir.

InputBox functionkullanıcılardan değerler girmelerini ister. Değerleri girdikten sonra, kullanıcı OK düğmesine tıklarsa veya klavyede ENTER tuşuna basarsa, InputBox işlevi metin kutusundaki metni döndürür. Kullanıcı İptal düğmesini tıklarsa, işlev boş bir dize ("") döndürür.

Sözdizimi

InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

Parametre Açıklama

  • Prompt- Gerekli bir parametre. İletişim kutusunda mesaj olarak görüntülenen bir Dize. Maksimum bilgi istemi uzunluğu yaklaşık 1024 karakterdir. Mesaj bir satırdan fazlasını kapsıyorsa, satırlar, her satır arasında bir satırbaşı karakteri (Chr (13)) veya satır besleme karakteri (Chr (10)) kullanılarak ayrılabilir.

  • Title- İsteğe bağlı bir parametre. İletişim kutusunun başlık çubuğunda görüntülenen bir String ifadesi. Başlık boş bırakılırsa, uygulama adı başlık çubuğuna yerleştirilir.

  • Default- İsteğe bağlı bir parametre. Metin kutusunda kullanıcının görüntülenmesini istediği varsayılan bir metin.

  • XPos- İsteğe bağlı bir parametre. PozisyonuXeksen, yatay olarak ekranın sol tarafından istem mesafesini temsil eder. Boş bırakılırsa, giriş kutusu yatay olarak ortalanır.

  • YPos- İsteğe bağlı bir parametre. PozisyonuYeksen, ekranın sol tarafından dikey olarak istem mesafesini temsil eder. Boş bırakılırsa, giriş kutusu dikey olarak ortalanır.

  • Helpfile- İsteğe bağlı bir parametre. İletişim kutusu için bağlama duyarlı Yardım sağlamak için kullanılacak yardım dosyasını tanımlayan bir String ifadesi.

  • context- İsteğe bağlı bir parametre. Yardım yazarı tarafından uygun Yardım konusuna atanan Yardım içerik numarasını tanımlayan sayısal bir ifade. Bağlam sağlanmışsa, yardım dosyası da sağlanmalıdır.

Misal

Bir dikdörtgenin alanını, iki giriş kutusu (biri uzunluk, diğeri genişlik için) yardımıyla çalışma zamanında kullanıcıdan alarak hesaplayalım.

Function findArea() 
   Dim Length As Double 
   Dim Width As Double 
   
   Length = InputBox("Enter Length ", "Enter a Number") 
   Width = InputBox("Enter Width", "Enter a Number") 
   findArea = Length * Width 
End Function

Çıktı

Step 1 - Aynısını yürütmek için işlev adını kullanarak arayın ve aşağıdaki ekran görüntüsünde gösterildiği gibi Enter tuşuna basın.

Step 2- Yürütmenin ardından, İlk giriş kutusu (uzunluk) görüntülenir. Giriş kutusuna bir değer girin.

Step 3 - İlk değeri girdikten sonra, ikinci giriş kutusu (genişlik) görüntülenir.

Step 4- İkinci sayıyı girdikten sonra Tamam düğmesine tıklayın. Alan, aşağıdaki ekran görüntüsünde gösterildiği gibi görüntülenir.

Variablekod yürütme sırasında değiştirilebilen bir değeri tutmak için kullanılan adlandırılmış bir bellek konumudur. Bir değişkeni adlandırmanın temel kuralları aşağıdadır.

  • İlk karakter olarak bir harf kullanmalısınız.

  • Adda boşluk, nokta (.), Ünlem işareti (!) Veya @, &, $, # karakterlerini kullanamazsınız.

  • Adın uzunluğu 255 karakteri aşamaz.

  • Visual Basic ayrılmış anahtar sözcüklerini değişken adı olarak kullanamazsınız.

Syntax

VBA'da, değişkenleri kullanmadan önce bildirmeniz gerekir.

Dim <<variable_name>> As <<variable_type>>

Veri tipleri

Sayısal ve sayısal olmayan veri türleri olmak üzere iki ana kategoriye ayrılabilen birçok VBA veri türü vardır.

Sayısal Veri Türleri

Aşağıdaki tablo sayısal veri türlerini ve izin verilen değer aralığını göstermektedir.

Tür Değer aralığı
Bayt 0 ile 255
Tamsayı -32.768 ila 32.767
Uzun -2.147.483.648 ile 2.147.483.648
Tek

-3.402823E + 38 ila -1.401298E-45 negatif değerler için

1.401298E-45 ila 3.402823E + 38 pozitif değerler için.

Çift

-1.79769313486232e + 308 ila -4.94065645841247E-324 negatif değerler için

4,94065645841247E-324 ila 1,79769313486232e + 308 pozitif değerler için.

Para birimi -922.337.203.685.477.5808 ile 922.337.203.685.477,5807
Ondalık

Ondalık kullanılmıyorsa +/- 79,228,162,514,264,337,593,543,950,335

+/- 7.9228162514264337593543950335 (28 ondalık basamak).

Sayısal Olmayan Veri Türleri

Aşağıdaki tablo sayısal olmayan veri türlerini ve izin verilen değer aralığını göstermektedir.

Tür Değer aralığı
Dize (sabit uzunluk) 1 ila 65.400 karakter
Dize (değişken uzunluk) 0 ila 2 milyar karakter
Tarih 1 Ocak 100 - 31 Aralık 9999
Boole Doğru ya da yanlış
Nesne Herhangi bir gömülü nesne
Varyant (sayısal) İki katı kadar büyük herhangi bir değer
Varyant (metin) Değişken uzunluklu dizeyle aynı

Example

Değişkenlerin kullanımını göstermek için bir düğme oluşturalım ve onu 'Değişkenler_demo' olarak adlandıralım.

Private Sub say_helloworld_Click()
   Dim password As String
   password = "Admin#1"

   Dim num As Integer
   num = 1234

   Dim BirthDay As Date
   BirthDay = DateValue("30 / 10 / 2020")

   MsgBox "Passowrd is " & password & Chr(10) & "Value of num is " &
      num & Chr(10) & "Value of Birthday is " & BirthDay
End Sub

Output

Komut dosyası çalıştırıldığında, çıktı aşağıdaki ekran görüntüsünde gösterildiği gibi olacaktır.

Sabit, kod yürütme sırasında DEĞİŞTİRİLEMEZ olan bir değeri tutmak için kullanılan adlandırılmış bir bellek konumudur. Bir kullanıcı Sabit bir değeri değiştirmeye çalışırsa, komut dosyası yürütme işlemi bir hatayla sonuçlanır. Sabitler, değişkenlerin bildirildiği şekilde bildirilir.

Bir sabiti adlandırmanın kuralları aşağıdadır.

  • İlk karakter olarak bir harf kullanmalısınız.

  • Adda boşluk, nokta (.), Ünlem işareti (!) Veya @, &, $, # karakterlerini kullanamazsınız.

  • Adın uzunluğu 255 karakteri aşamaz.

  • Visual Basic ayrılmış anahtar sözcüklerini değişken adı olarak kullanamazsınız.

Sözdizimi

VBA'da, bildirilen Sabitlere bir değer atamamız gerekir. Sabitin değerini değiştirmeye çalışırsak bir hata atılır.

Const <<constant_name>> As <<constant_type>> = <<constant_value>>

Misal

Sabitlerle nasıl çalışılacağını göstermek için bir "Constant_demo" düğmesi oluşturalım.

Private Sub Constant_demo_Click() 
   Const MyInteger As Integer = 42 
   Const myDate As Date = #2/2/2020# 
   Const myDay As String = "Sunday" 
   
   MsgBox "Integer is " & MyInteger & Chr(10) & "myDate is " 
      & myDate & Chr(10) & "myDay is " & myDay  
End Sub

Çıktı

Komut dosyası çalıştırıldığında, çıktı aşağıdaki ekran görüntüsünde gösterildiği gibi görüntülenecektir.

Bir Operator basit bir ifade kullanılarak tanımlanabilir - 4 + 5 9'a eşittir. Burada 4 ve 5 olarak adlandırılır operands ve + denir operator. VBA, aşağıdaki operatör türlerini destekler -

  • Aritmetik operatörler
  • Karşılaştırma Operatörleri
  • Mantıksal (veya İlişkisel) Operatörler
  • Birleştirme Operatörleri

Aritmatik Operatörler

Aşağıdaki aritmetik operatörler VBA tarafından desteklenmektedir.

A değişkeninin 5, B değişkeninin 10 olduğunu varsayalım, o zaman -

Örnekleri Göster

Şebeke Açıklama Misal
+ İki işlenen ekler A + B 15 verecek
- İkinci işleneni ilkinden çıkarır A - B -5 verir
* Her iki işleneni de çarpar A * B 50 verecek
/ Payı paydaya böler B / A 2 verecek
% Modül operatörü ve bir tamsayı bölmesinden sonra kalan B% A 0 verir
^ Üs alma operatörü B ^ A 100000 verecek

Karşılaştırma Operatörleri

VBA tarafından desteklenen aşağıdaki karşılaştırma operatörleri vardır.

A değişkeninin 10 ve B değişkeninin 20 olduğunu varsayalım, o zaman -

Örnekleri Göster

Şebeke Açıklama Misal
= İki işlenenin değerinin eşit olup olmadığını kontrol eder. Evet ise, koşul doğrudur. (A = B) Yanlıştır.
<> İki işlenenin değerinin eşit olup olmadığını kontrol eder. Değerler eşit değilse, koşul doğrudur. (A <> B) Doğru.
> Sol işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder. Evet ise, koşul doğrudur. (A> B) Yanlıştır.
< Soldaki işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol eder. Evet ise, koşul doğrudur. (A <B) Doğru.
> = Sol işlenenin değerinin sağ işlenenin değerinden büyük veya ona eşit olup olmadığını kontrol eder. Evet ise, koşul doğrudur. (A> = B) Yanlıştır.
<= Soldaki işlenenin değerinin sağ işlenenin değerinden küçük veya ona eşit olup olmadığını kontrol eder. Evet ise, koşul doğrudur. (A <= B) Doğru.

Mantıksal Operatörler

Aşağıdaki mantıksal operatörler VBA tarafından desteklenmektedir.

A değişkeninin 10 ve B değişkeninin 0 olduğunu varsayın, sonra -

Örnekleri Göster

Şebeke Açıklama Misal
VE Mantıksal AND operatörü çağrıldı. Her iki koşul da Doğru ise, İfade doğrudur. a <> 0 VE b <> 0 Yanlıştır.
VEYA Mantıksal VEYA Operatörü çağrıldı. İki koşuldan herhangi biri Doğru ise, o zaman koşul doğrudur. a <> 0 VEYA b <> 0 doğrudur.
DEĞİL Mantıksal NOT Operatörü olarak adlandırıldı. İşlenenin mantıksal durumunu tersine çevirmek için kullanılır. Bir koşul doğruysa, Mantıksal NOT operatörü yanlış yapar. DEĞİL (a <> 0 VEYA b <> 0) yanlıştır.
ÖZELVEYA Mantıksal Dışlama olarak adlandırıldı. NOT ve OR Operatörünün birleşimidir. İfadelerden biri ve yalnızca biri Doğru olarak değerlendirilirse, sonuç Doğru olur. (a <> 0 XOR b <> 0) doğrudur.

Birleştirme Operatörleri

Aşağıdaki Birleştirme işleçleri VBA tarafından desteklenir.

A değişkeninin 5, B değişkeninin 10 olduğunu varsayalım -

Örnekleri Göster

Şebeke Açıklama Misal
+ Değişken olarak iki Değer ekler. Değerler Sayısaldır A + B 15 verecek
& İki Değeri birleştirir A & B 510 verecek

Değişken A = "Microsoft" ve değişken B = "VBScript" varsayalım, sonra -

Şebeke Açıklama Misal
+ İki Değeri birleştirir A + B, MicrosoftVBScript verecektir
& İki Değeri birleştirir A & B, MicrosoftVBScript verecektir

Note- Birleştirme Operatörleri hem sayılar hem de dizeler için kullanılabilir. Değişkenler sayısal değer veya dize değeri tutuyorsa çıktı bağlama bağlıdır.

Karar verme, programcıların bir komut dosyasının veya bölümlerinden birinin yürütme akışını kontrol etmesine izin verir. Uygulama, bir veya daha fazla koşullu ifadeyle yönetilir.

Aşağıda, çoğu programlama dilinde bulunan tipik bir karar verme yapısının genel biçimi verilmiştir.

VBA, aşağıdaki türden karar verme beyanları sağlar. Ayrıntılarını kontrol etmek için aşağıdaki bağlantıları tıklayın.

Sr.No. Açıklama ve Açıklama
1 eğer ifadesi

Bir if ifade, bir veya daha fazla ifadenin izlediği bir Boole ifadesinden oluşur.

2 if..else ifadesi

Bir if elseifade, bir veya daha fazla ifadenin izlediği bir Boole ifadesinden oluşur. Koşul Doğru ise, altındaki ifadelerIfifadeler yürütülür. Koşul yanlışsa,Else betiğin bir kısmı yürütülür.

3 if ... elseif..else ifadesi

Bir if bir veya daha fazla ifadenin ardından ElseIf Boolean ifadelerden oluşan ve ardından isteğe bağlı bir else statement, tüm koşullar yanlış olduğunda yürütülür.

4 yuvalanmış if ifadeleri

Bir if veya elseif bir başkasının içinde ifade if veya elseif beyan (lar).

5 anahtar deyimi

Bir switch ifadesi, bir değişkenin bir değerler listesine karşı eşitlik açısından test edilmesine izin verir.

Bir kod bloğunu birkaç kez çalıştırmanız gereken bir durum olabilir. Genel olarak, ifadeler sıralı olarak yürütülür: Bir fonksiyondaki ilk ifade önce çalıştırılır, ardından ikincisi vb.

Programlama dilleri, daha karmaşık yürütme yollarına izin veren çeşitli kontrol yapıları sağlar.

Bir döngü deyimi, bir deyimi veya deyim grubunu birden çok kez yürütmemizi sağlar. Aşağıda, VBA'daki bir döngü ifadesinin genel biçimi verilmiştir.

VBA, döngü gereksinimlerini karşılamak için aşağıdaki döngü türlerini sağlar. Ayrıntılarını kontrol etmek için aşağıdaki bağlantıları tıklayın.

Sr.No. Döngü Tipi ve Açıklaması
1 döngü için

Bir dizi ifadeyi birden çok kez yürütür ve döngü değişkenini yöneten kodu kısaltır.

2 her döngü için

Bu, grupta en az bir öğe varsa yürütülür ve bir gruptaki her öğe için tekrarlanır.

3 while..wend döngüsü

Bu, döngü gövdesini çalıştırmadan önce koşulu test eder.

4 do.. while döngüleri

Do..While ifadeleri, koşul True olduğu sürece yürütülür. (Yani,) Döngü, koşul Yanlış olana kadar tekrarlanmalıdır.

5 do .. dönene kadar

Do..Until ifadeleri, koşul False olduğu sürece çalıştırılacaktır. (Yani,) Döngü, koşul True olana kadar tekrarlanmalıdır.

Döngü Kontrol İfadeleri

Döngü kontrol ifadeleri, yürütmeyi normal sırasından değiştirir. Yürütme bir kapsam bıraktığında, döngüdeki kalan tüm ifadeler UYGULANMAZ.

VBA, aşağıdaki kontrol ifadelerini destekler. Ayrıntılarını kontrol etmek için aşağıdaki bağlantıları tıklayın.

S.No. Kontrol İfadesi ve Açıklama
1 Açıklama için çık

Sonlandırır For loop ifadesi ve yürütmeyi döngüden hemen sonra ifadeye aktarır

2 Do ifadesinden çık

Sonlandırır Do While ifadesi ve yürütmeyi döngüden hemen sonra ifadeye aktarır

Dizeler, harflerden, sayılardan, özel karakterlerden veya hepsinden oluşan bir karakter dizisidir. Bir değişkenin, çift tırnak "" içine alınmışsa bir dize olduğu söylenir.

Sözdizimi

variablename = "string"

Örnekler

str1 = "string"   ' Only Alphabets
str2 = "132.45"   ' Only Numbers
str3 = "!@#$;*"  ' Only Special Characters
Str4 = "Asc23@#"  ' Has all the above

String Fonksiyonları

Geliştiricilerin dizelerle çok etkili bir şekilde çalışmasına yardımcı olan önceden tanımlanmış VBA String işlevleri vardır. Aşağıda, VBA'da desteklenen String yöntemleri verilmiştir. Ayrıntılı olarak bilmek için lütfen yöntemlerin her birine tıklayın.

Sr.No. Fonksiyon Adı ve Tanımı
1 InStr

Belirtilen alt dizenin ilk oluşumunu döndürür. Arama soldan sağa doğru gerçekleşir.

2 InstrRev

Belirtilen alt dizenin ilk oluşumunu döndürür. Arama sağdan sola doğru gerçekleşir.

3 Lcase

Belirtilen dizenin küçük harfini döndürür.

4 Ucase

Belirtilen dizenin büyük harfini döndürür.

5 Ayrıldı

Dizenin sol tarafından belirli sayıda karakter döndürür.

6 Sağ

Dizenin sağ tarafından belirli sayıda karakter döndürür.

7 Orta

Belirtilen parametrelere göre bir dizeden belirli sayıda karakter döndürür.

8 Ltrim

Belirtilen dizenin sol tarafındaki boşlukları kaldırdıktan sonra bir dize döndürür.

9 Rtrim

Belirtilen dizenin sağ tarafındaki boşlukları kaldırdıktan sonra bir dize döndürür.

10 Kırpma

Hem baştaki hem de sondaki boşlukları kaldırdıktan sonra bir dize değeri döndürür.

11 Len

Verilen dizenin uzunluğunu döndürür.

12 Değiştir

Bir dizeyi başka bir dizeyle değiştirdikten sonra bir dize döndürür.

13 Uzay

Bir dizeyi belirtilen sayıda boşlukla doldurur.

14 StrComp

Belirtilen iki dizeyi karşılaştırdıktan sonra bir tamsayı değeri döndürür.

15 Dize

Belirtilen sayıda, belirtilen karaktere sahip bir dize döndürür.

16 StrReverse

Verilen dizedeki karakterlerin sırasını ters çevirdikten sonra bir dize döndürür.

VBScript Tarih ve Saat İşlevleri, geliştiricilerin tarih ve saati bir biçimden diğerine dönüştürmesine veya tarih veya saat değerini belirli bir koşula uyan biçimde ifade etmesine yardımcı olur.

Tarih İşlevleri

Sr.No. İşlev ve Açıklama
1 Tarih

Geçerli sistem tarihini döndüren bir İşlev.

2 CDate

Belirli bir girdiyi tarihe dönüştüren bir İşlev.

3 DateAdd

Belirli bir zaman aralığının eklendiği bir tarihi döndüren bir İşlev.

4 DateDiff

İki dönem arasındaki farkı döndüren bir İşlev.

5 DatePart

Verilen giriş tarihi değerinin belirli bir bölümünü döndüren bir İşlev.

6 Tarih Seri

Verilen yıl, ay ve tarih için geçerli bir tarih döndüren bir İşlev.

7 FormatDateTime

Verilen parametrelere göre tarihi biçimlendiren bir İşlev.

8 IsDate

Sağlanan parametrenin bir tarih olup olmadığına bakılmaksızın Boolean Değeri döndüren bir İşlev.

9 Gün

Belirtilen tarihin gününü temsil eden 1 ile 31 arasında bir tamsayı döndüren bir İşlev.

10 Ay

Belirtilen tarihin ayını temsil eden 1 ile 12 arasında bir tamsayı döndüren bir İşlev.

11 Yıl

Belirtilen tarihin yılını temsil eden bir tamsayı döndüren bir Fonksiyon.

12 AyAdı

Belirtilen tarih için belirli ayın adını döndüren bir İşlev.

13 Hafta içi

Belirtilen gün için haftanın gününü temsil eden bir tamsayı (1 ila 7) döndüren bir İşlev.

14 WeekDayName

Belirtilen gün için haftanın gün adını döndüren bir Fonksiyon.

Zaman Fonksiyonları

Sr.No. İşlev ve Açıklama
1 Şimdi

Geçerli sistem tarihini ve saatini döndüren bir İşlev.

2 Saat

Verilen zamanın saat bölümünü temsil eden, 0 ile 23 arasında bir tamsayı döndüren bir İşlev.

3 Dakika

Verilen zamanın dakika bölümünü temsil eden, 0 ile 59 arasında bir tamsayı döndüren bir İşlev.

4 İkinci

Verilen zamanın saniye bölümünü temsil eden, 0 ile 59 arasında bir tamsayı döndüren bir İşlev.

5 Zaman

Geçerli sistem saatini döndüren bir İşlev.

6 Zamanlayıcı

12:00 AM'den bu yana saniye ve milisaniye sayısını döndüren bir İşlev.

7 TimeSerial

Belirli saat, dakika ve saniye girdisi için zamanı döndüren bir İşlev.

8 Zaman değeri

Giriş dizesini bir saat biçimine dönüştüren bir İşlev.

Bir değişkenin bir değeri depolamak için bir kap olduğunu çok iyi biliyoruz. Bazen geliştiriciler, aynı anda tek bir değişkende birden fazla değeri tutabilecek konumdadır. Bir dizi değer tek bir değişkende depolandığında, o zamanarray variable.

Dizi Bildirimi

Diziler, bir dizi değişkeninin bildiriminde parantez kullanılması dışında, bir değişkenin bildirildiği şekilde bildirilir. Aşağıdaki örnekte, dizinin boyutu parantez içinde belirtilmiştir.

'Method 1 : Using Dim
Dim arr1()	'Without Size

'Method 2 : Mentioning the Size
Dim arr2(5)  'Declared with size of 5

'Method 3 : using 'Array' Parameter
Dim arr3
arr3 = Array("apple","Orange","Grapes")
  • Dizi boyutu 5 olarak gösterilse de dizi dizini SIFIR'dan başladığından 6 değer tutabilir.

  • Dizi Dizini negatif olamaz.

  • VBScript Dizileri, bir dizide her tür değişkeni depolayabilir. Dolayısıyla, bir dizi, tek bir dizi değişkeninde bir tamsayı, dize veya karakter depolayabilir.

Bir Diziye Değer Atama

Değerler, atanacak değerlerin her birine karşı bir dizi indeksi değeri belirlenerek diziye atanır. Bir dizge olabilir.

Misal

Bir düğme ekleyin ve aşağıdaki işlevi ekleyin.

Private Sub Constant_demo_Click()
   Dim arr(5)
   arr(0) = "1"           'Number as String
   arr(1) = "VBScript"    'String
   arr(2) = 100 		     'Number
   arr(3) = 2.45 		     'Decimal Number
   arr(4) = #10/07/2013#  'Date
   arr(5) = #12.45 PM#    'Time
  
   msgbox("Value stored in Array index 0 : " & arr(0))
   msgbox("Value stored in Array index 1 : " & arr(1))
   msgbox("Value stored in Array index 2 : " & arr(2))
   msgbox("Value stored in Array index 3 : " & arr(3))
   msgbox("Value stored in Array index 4 : " & arr(4))
   msgbox("Value stored in Array index 5 : " & arr(5))
End Sub

Yukarıdaki işlevi çalıştırdığınızda, aşağıdaki çıktıyı üretir.

Value stored in Array index 0 : 1
Value stored in Array index 1 : VBScript
Value stored in Array index 2 : 100
Value stored in Array index 3 : 2.45
Value stored in Array index 4 : 7/10/2013
Value stored in Array index 5 : 12:45:00 PM

Çok Boyutlu Diziler

Diziler sadece tek bir boyutla sınırlı değildir, ancak maksimum 60 boyuta sahip olabilirler. İki boyutlu diziler en yaygın kullanılan dizilerdir.

Misal

Aşağıdaki örnekte, çok boyutlu bir dizi 3 satır ve 4 sütun ile bildirilmiştir.

Private Sub Constant_demo_Click()
   Dim arr(2,3) as Variant	' Which has 3 rows and 4 columns
   arr(0,0) = "Apple" 
   arr(0,1) = "Orange"
   arr(0,2) = "Grapes"           
   arr(0,3) = "pineapple" 
   arr(1,0) = "cucumber"           
   arr(1,1) = "beans"           
   arr(1,2) = "carrot"           
   arr(1,3) = "tomato"           
   arr(2,0) = "potato"             
   arr(2,1) = "sandwitch"            
   arr(2,2) = "coffee"             
   arr(2,3) = "nuts"            
           
   msgbox("Value in Array index 0,1 : " &  arr(0,1))
   msgbox("Value in Array index 2,2 : " &  arr(2,2))
End Sub

Yukarıdaki işlevi çalıştırdığınızda, aşağıdaki çıktıyı üretir.

Value stored in Array index : 0 , 1 : Orange
Value stored in Array index : 2 , 2 : coffee

ReDim İfadesi

ReDim ifadesi, dinamik dizi değişkenlerini bildirmek ve depolama alanını tahsis etmek veya yeniden tahsis etmek için kullanılır.

Sözdizimi

ReDim [Preserve] varname(subscripts) [, varname(subscripts)]

Parametre Açıklama

  • Preserve - Son boyutun boyutunu değiştirdiğinizde var olan bir dizideki verileri korumak için kullanılan isteğe bağlı bir parametre.

  • Varname - Standart değişken adlandırma kurallarına uyması gereken, değişkenin adını belirten gerekli bir parametre.

  • Subscripts - Dizinin boyutunu belirten gerekli bir parametre.

Misal

Aşağıdaki örnekte, bir dizi yeniden tanımlanmış ve ardından dizinin mevcut boyutu değiştirildiğinde değerler korunmuştur.

Note - Başlangıçta olduğundan daha küçük bir dizi yeniden boyutlandırıldığında, elenen öğelerdeki veriler kaybolur.

Private Sub Constant_demo_Click()
   Dim a() as variant
   i = 0
   redim a(5)
   a(0) = "XYZ"
   a(1) = 41.25
   a(2) = 22
  
   REDIM PRESERVE a(7)
   For i = 3 to 7
   a(i) = i
   Next
  
   'to Fetch the output
   For i = 0 to ubound(a)
      Msgbox a(i)
   Next
End Sub

Yukarıdaki işlevi çalıştırdığınızda, aşağıdaki çıktıyı üretir.

XYZ
41.25
22
3
4
5
6
7

Dizi Yöntemleri

VBScript içinde, geliştiricilerin dizileri etkili bir şekilde kullanmalarına yardımcı olan çeşitli dahili işlevler vardır. Dizilerle birlikte kullanılan tüm yöntemler aşağıda listelenmiştir. Detaylı bilgi almak için lütfen metod ismine tıklayınız.

Sr.No. İşlev ve Açıklama
1 LBound

Verilen dizilerin en küçük alt simge durumuna karşılık gelen bir tamsayı döndüren bir İşlev.

2 UBound

Verilen dizilerin en büyük alt simge değerine karşılık gelen bir tamsayı döndüren bir İşlev.

3 Bölünmüş

Belirtilen sayıda değer içeren bir dizi döndüren bir Function. Bir sınırlayıcıya göre ayırın.

4 Katılmak

Bir dizide belirtilen sayıda alt dizeyi içeren bir dize döndüren bir İşlev. Bu, Bölme Yönteminin tam tersi bir işlevdir.

5 Filtrele

Belirli bir filtre kriterine göre bir dize dizisinin bir alt kümesini içeren sıfır tabanlı bir dizi döndüren bir Function.

6 IsArray

Girdi değişkeninin bir dizi olup olmadığını gösteren bir boolean değeri döndüren bir Function.

7 Sil

Dizi değişkenleri için ayrılmış belleği kurtaran bir İşlev.

Bir functionprogramınızın herhangi bir yerinde çağrılabilen yeniden kullanılabilir bir kod grubudur. Bu, aynı kodu tekrar tekrar yazma ihtiyacını ortadan kaldırır. Bu, programcıların büyük bir programı birkaç küçük ve yönetilebilir işleve bölmesini sağlar.

Dahili işlevlerin yanı sıra, VBA kullanıcı tanımlı işlevlerin de yazılmasına izin verir. Bu bölümde, VBA'da kendi işlevlerinizi nasıl yazacağınızı öğreneceksiniz.

İşlev Tanımı

Bir VBA işlevi isteğe bağlı bir dönüş ifadesine sahip olabilir. Bir işlevden bir değer döndürmek istiyorsanız bu gereklidir.

Örneğin, bir işlevde iki sayı iletebilir ve ardından işlevin, arama programınızda çarpımlarını döndürmesini bekleyebilirsiniz.

Note - Bir işlev, işlev adının kendisine atanmış bir dizi olarak virgülle ayrılmış birden çok değer döndürebilir.

Bir işlevi kullanmadan önce, o belirli işlevi tanımlamamız gerekir. VBA'da bir işlevi tanımlamanın en yaygın yolu,Function anahtar sözcüğü, ardından benzersiz bir işlev adı gelir ve bir parametre listesi ve bir ifade içerebilir veya içermeyebilir End Functionişlevin sonunu gösteren anahtar sözcük. Temel sözdizimi aşağıdadır.

Sözdizimi

Bir düğme ekleyin ve aşağıdaki işlevi ekleyin.

Function Functionname(parameter-list)
   statement 1
   statement 2
   statement 3
   .......
   statement n
End Function

Misal

Alanı döndüren aşağıdaki işlevi ekleyin. Bir değerin / değerlerin işlev adıyla birlikte döndürülebileceğini unutmayın.

Function findArea(Length As Double, Optional Width As Variant)
   If IsMissing(Width) Then
      findArea = Length * Length
   Else
      findArea = Length * Width
   End If
End Function

Bir Fonksiyon Çağırma

Bir işlevi çağırmak için, aşağıdaki ekran görüntüsünde gösterildiği gibi işlev adını kullanarak işlevi çağırın.

Aşağıda gösterilen alanın çıktısı kullanıcıya gösterilecektir.

Sub Procedures işlevlere benzer, ancak birkaç farklılık vardır.

  • Alt prosedürler işlevler bir değer döndürebilir veya döndüremeyebilirken bir değer DÖNDÜRMEYİN.

  • Alt prosedürler arama anahtar sözcüğü olmadan çağrılabilir.

  • Alt prosedürler her zaman Sub ve End Sub ifadeleri içine alınır.

Misal

Sub Area(x As Double, y As Double)
   MsgBox x * y
End Sub

Çağrı Prosedürleri

Komut dosyası içinde herhangi bir yerde bir Prosedürü çağırmak için, bir işlevden çağrı yapabilirsiniz. Alt prosedür bir değer DÖNDÜRMEYECEKTİR, bir işlevinkiyle aynı şekilde kullanamayacağız.

Function findArea(Length As Double, Width As Variant)
   area Length, Width    ' To Calculate Area 'area' sub proc is called
End Function

Şimdi, aşağıdaki ekran görüntüsünde gösterildiği gibi yalnızca işlevi çağırabilir, ancak alt prosedürü çağıramazsınız.

Alan hesaplanır ve yalnızca Mesaj kutusunda gösterilir.

Sonuç hücresi SIFIR gösterir, çünkü alan değeri işlevden döndürülmez. Kısacası, excel çalışma sayfasından bir alt prosedüre doğrudan çağrı yapamazsınız.

VBA, olay odaklı bir programlama, bir hücreyi veya hücre değerleri aralığını manuel olarak değiştirdiğinizde tetiklenebilir. Değişiklik etkinliği işleri kolaylaştırabilir, ancak biçimlendirmeyle dolu bir sayfayı çok hızlı bir şekilde sonlandırabilirsiniz. İki tür olay vardır.

  • Çalışma Sayfası Olayları
  • Çalışma Kitabı Etkinlikleri

Çalışma Sayfası Olayları

Çalışma Sayfası Olayları, çalışma sayfasında bir değişiklik olduğunda tetiklenir. Sayfa sekmesine sağ tıklama yapılarak ve 'kodu görüntüle' seçilerek ve daha sonra kod yapıştırılarak oluşturulur.

Kullanıcı bu çalışma sayfalarının her birini seçebilir ve desteklenen tüm Çalışma Sayfası olaylarının listesini almak için açılır menüden "Çalışma Sayfası" nı seçebilir.

Kullanıcı tarafından eklenebilecek desteklenen çalışma sayfası olayları aşağıdadır.

Private Sub Worksheet_Activate() 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 
Private Sub Worksheet_Calculate() 
Private Sub Worksheet_Change(ByVal Target As Range) 
Private Sub Worksheet_Deactivate() 
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Misal

Diyelim ki, çift tıklamadan önce bir mesaj görüntülememiz gerekiyor.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   MsgBox "Before Double Click"
End Sub

Çıktı

Herhangi bir hücreye çift tıklandığında, aşağıdaki ekran görüntüsünde gösterildiği gibi kullanıcıya mesaj kutusu görüntülenir.

Çalışma Kitabı Etkinlikleri

Çalışma kitabının tamamında bir değişiklik olduğunda çalışma kitabı olayları tetiklenir. Aşağıdaki ekran görüntüsünde gösterildiği gibi 'Bu Çalışma Kitabı'nı seçip açılır menüden' çalışma kitabı'nı seçerek çalışma kitabı olaylarının kodunu ekleyebiliriz. Hemen Workbook_open alt prosedürü aşağıdaki ekran görüntüsünde görüldüğü gibi kullanıcıya görüntülenir.

Aşağıda, kullanıcı tarafından eklenebilecek desteklenen Çalışma Kitabı olayları verilmiştir.

Private Sub Workbook_AddinUninstall() 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
Private Sub Workbook_Deactivate() 
Private Sub Workbook_NewSheet(ByVal Sh As Object) 
Private Sub Workbook_Open() 
Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
Private Sub Workbook_WindowActivate(ByVal Wn As Window) 
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) 
Private Sub Workbook_WindowResize(ByVal Wn As Window)

Misal

Diyelim ki, her yeni sayfa oluşturulduğunda kullanıcıya yeni bir sayfanın başarıyla oluşturulduğuna dair bir mesaj göstermemiz gerekiyor.

Private Sub Workbook_NewSheet(ByVal Sh As Object)
   MsgBox "New Sheet Created Successfully"
End Sub

Çıktı

Yeni bir excel sayfası oluşturduktan sonra, aşağıdaki ekran görüntüsünde gösterildiği gibi kullanıcıya bir mesaj görüntülenir.

Programlamada üç tür hata vardır: (a) Sözdizimi Hataları, (b) Çalışma Zamanı Hataları ve (c) Mantıksal Hatalar.

Sözdizimi hataları

Ayrıştırma hataları olarak da adlandırılan sözdizimi hataları, VBScript için yorumlama zamanında meydana gelir. Örneğin, aşağıdaki satır, kapanış parantezi eksik olduğundan sözdizimi hatasına neden olur.

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   y = Ucase(x
End Function

Çalışma zamanı hataları

İstisnalar olarak da adlandırılan çalışma zamanı hataları, yorumlamadan sonra yürütme sırasında ortaya çıkar.

Örneğin, aşağıdaki satır bir çalışma zamanı hatasına neden olur çünkü burada sözdizimi doğrudur, ancak çalışma zamanında var olmayan bir işlev olan fnmultiply'yi çağırmaya çalışır.

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

Mantıksal Hatalar

Mantıksal hatalar, izlenmesi en zor hata türleri olabilir. Bu hatalar bir sözdizimi veya çalışma zamanı hatasının sonucu değildir. Bunun yerine, betiğinizi çalıştıran mantıkta bir hata yaptığınızda ve beklediğiniz sonucu alamadığınızda ortaya çıkarlar.

Bu hataları yakalayamazsınız, çünkü programınıza ne tür bir mantık koymak istediğiniz iş gereksinimlerinize bağlıdır.

Örneğin, bir sayıyı sıfıra bölmek veya sonsuz döngüye giren bir komut dosyası yazmak.

Err Nesne

Bir çalışma zamanı hatamız varsa, hata mesajını görüntüleyerek yürütme durur. Bir geliştirici olarak, hatayı yakalamak istiyorsak,Error Nesne kullanılıyor.

Misal

Aşağıdaki örnekte, Err.Number hata numarasını verir ve Err.Description hata açıklamasını verir.

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

Hata yönetimi

VBA, bir hata işleme rutini sağlar ve bir hata işleme rutinini devre dışı bırakmak için de kullanılabilir. Bir Hata Durumunda ifadesi olmadan, meydana gelen herhangi bir çalışma zamanı hatası ölümcüldür: bir hata mesajı görüntülenir ve yürütme aniden durur.

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Sr.No. Anahtar Kelime ve Açıklama
1

GoTo line

Gerekli satır bağımsız değişkeninde belirtilen satırda başlayan hata işleme yordamını etkinleştirir. Belirtilen satır Hata Durumunda ifadesiyle aynı prosedürde olmalıdır, aksi takdirde derleme zamanı hatası oluşur.

2

GoTo 0

Mevcut prosedürde etkinleştirilmiş hata işleyiciyi devre dışı bırakır ve Hiçbir şey olarak sıfırlar.

3

GoTo -1

Mevcut prosedürde etkinleştirilen istisnayı devre dışı bırakır ve Nothing olarak sıfırlar.

4

Resume Next

Bir çalışma zamanı hatası oluştuğunda, denetimin, hatanın oluştuğu ifadenin hemen ardından ifadeye gittiğini ve yürütmenin bu noktadan itibaren devam ettiğini belirtir.

Misal

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x, y, z As Integer
   x = 50
   y = 0
   z = x / y   ' Divide by ZERO Error Raises
  
   ErrorHandler:    ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 10   ' Divide by zero error
         MsgBox ("You attempted to divide by zero!")
      Case Else
         MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
   End Select
   Resume Next
End Sub

VBA kullanarak programlama yaparken, bir kullanıcının ilgileneceği birkaç önemli nesne vardır.

  • Uygulama Nesneleri
  • Çalışma Kitabı Nesneleri
  • Çalışma Sayfası Nesneleri
  • Aralık Nesneleri

Uygulama Nesneleri

Uygulama nesnesi aşağıdakilerden oluşur -

  • Uygulama genelinde ayarlar ve seçenekler.
  • ActiveCell, ActiveSheet vb. Gibi en üst düzey nesneleri döndüren yöntemler.

Misal

'Example 1 :
Set xlapp = CreateObject("Excel.Sheet") 
xlapp.Application.Workbooks.Open "C:\test.xls"

'Example 2 :
Application.Windows("test.xls").Activate

'Example 3:
Application.ActiveCell.Font.Bold = True

Çalışma Kitabı Nesneleri

Çalışma Kitabı nesnesi, Çalışma Kitapları koleksiyonunun bir üyesidir ve şu anda Microsoft Excel'de açık olan tüm Çalışma Kitabı nesnelerini içerir.

Misal

'Ex 1 : To close Workbooks
Workbooks.Close

'Ex 2 : To Add an Empty Work Book
Workbooks.Add

'Ex 3: To Open a Workbook
Workbooks.Open FileName:="Test.xls", ReadOnly:=True

'Ex : 4 - To Activate WorkBooks
Workbooks("Test.xls").Worksheets("Sheet1").Activate

Çalışma Sayfası Nesneleri

Çalışma Sayfası nesnesi, Çalışma Sayfaları koleksiyonunun bir üyesidir ve bir çalışma kitabındaki tüm Çalışma Sayfası nesnelerini içerir.

Misal

'Ex 1 : To make it Invisible
Worksheets(1).Visible = False

'Ex 2 : To protect an WorkSheet
Worksheets("Sheet1").Protect password:=strPassword, scenarios:=True

Aralık Nesneleri

Aralık Nesneleri bir hücreyi, satırı, sütunu veya bir veya daha fazla sürekli hücre bloğu içeren hücre seçimini temsil eder.

'Ex 1 : To Put a value in the cell A5
Worksheets("Sheet1").Range("A5").Value = "5235"

'Ex 2 : To put a value in range of Cells
Worksheets("Sheet1").Range("A1:A4").Value = 5

Ayrıca Excel Dosyasını okuyabilir ve hücrenin içeriğini VBA kullanarak bir Metin Dosyasına yazabilirsiniz. VBA, kullanıcıların iki yöntem kullanarak metin dosyalarıyla çalışmasına izin verir -

  • Dosya Sistemi Nesnesi
  • Yazma Komutu kullanarak

Dosya Sistemi Nesnesi (FSO)

Adından da anlaşılacağı gibi, FSO'lar geliştiricilerin sürücüler, klasörler ve dosyalarla çalışmasına yardımcı olur. Bu bölümde, FSO'nun nasıl kullanılacağını tartışacağız.

Sr.No. Nesne Türü ve Açıklaması
1

Drive

Sürücü bir Nesnedir. Sisteme bağlı bir sürücü hakkında bilgi toplamanıza izin veren yöntemler ve özellikler içerir.

2

Drives

Sürücüler bir Koleksiyondur. Fiziksel veya mantıksal olarak sisteme bağlı sürücülerin bir listesini sağlar.

3

File

Dosya bir Nesnedir. Geliştiricilerin bir dosyayı oluşturmasına, silmesine veya taşımasına olanak tanıyan yöntemler ve özellikler içerir.

4

Files

Dosyalar bir Koleksiyondur. Bir klasörde bulunan tüm dosyaların bir listesini sağlar.

5

Folder

Klasör bir Nesnedir. Geliştiricilerin klasörleri oluşturmasına, silmesine veya taşımasına izin veren yöntemler ve özellikler sağlar.

6

Folders

Klasörler bir Koleksiyondur. Bir klasör içindeki tüm klasörlerin bir listesini sağlar.

7

TextStream

TextStream bir Nesnedir. Geliştiricilerin metin dosyalarını okumasını ve yazmasını sağlar.

Sürüş

Drivebelirli bir disk sürücüsünün veya ağ paylaşımının özelliklerine erişim sağlayan bir nesnedir. Aşağıdaki özellikler tarafından desteklenmektedirDrive nesne -

  • AvailableSpace
  • DriveLetter
  • DriveType
  • FileSystem
  • FreeSpace
  • IsReady
  • Path
  • RootFolder
  • SerialNumber
  • ShareName
  • TotalSize
  • VolumeName

Misal

Step 1- FSO kullanarak komut dosyası oluşturmaya geçmeden önce, Microsoft Scripting Runtime'ı etkinleştirmeliyiz. Aynısını yapmak için, aşağıdaki ekran görüntüsünde gösterildiği gibi Araçlar → Referanslar'a gidin.

Step 2 - "Microsoft Scripting RunTime" ekleyin ve Tamam'ı tıklayın.

Step 3 - Bir Metin Dosyasına yazmak istediğiniz Verileri ekleyin ve bir Komut Düğmesi ekleyin.

Step 4 - Şimdi senaryo zamanı.

Private Sub fn_write_to_text_Click()
   Dim FilePath As String
   Dim CellData As String
   Dim LastCol As Long
   Dim LastRow As Long
  
   Dim fso As FileSystemObject
   Set fso = New FileSystemObject
   Dim stream As TextStream
  
   LastCol = ActiveSheet.UsedRange.Columns.Count
   LastRow = ActiveSheet.UsedRange.Rows.Count
    
   ' Create a TextStream.
   Set stream = fso.OpenTextFile("D:\Try\Support.log", ForWriting, True)
  
   CellData = ""
  
   For i = 1 To LastRow
      For j = 1 To LastCol
         CellData = Trim(ActiveCell(i, j).Value)
         stream.WriteLine "The Value at location (" & i & "," & j & ")" & CellData
      Next j
   Next i
  
   stream.Close
   MsgBox ("Job Done")
End Sub

Çıktı

Komut dosyasını çalıştırırken, imleci çalışma sayfasının ilk hücresine yerleştirdiğinizden emin olun. Support.log dosyası, "D: \ Try" altındaki aşağıdaki ekran görüntüsünde gösterildiği gibi oluşturulur.

Dosyanın içeriği aşağıdaki ekran görüntüsünde gösterilmektedir.

Komut Yaz

FSO'nun aksine, herhangi bir referans eklememize gerek YOKTUR, ancak sürücüler, dosyalar ve klasörlerle çalışamayacağız. Sadece akışı metin dosyasına ekleyebileceğiz.

Misal

Private Sub fn_write_to_text_Click()
   Dim FilePath As String
   Dim CellData As String
   Dim LastCol As Long
   Dim LastRow As Long
  
   LastCol = ActiveSheet.UsedRange.Columns.Count
   LastRow = ActiveSheet.UsedRange.Rows.Count
    
   FilePath = "D:\Try\write.txt"
   Open FilePath For Output As #2
  
   CellData = ""
   For i = 1 To LastRow
      For j = 1 To LastCol
         CellData = "The Value at location (" & i & "," & j & ")" & Trim(ActiveCell(i, j).Value)
         Write #2, CellData
      Next j
   Next i
  
   Close #2
   MsgBox ("Job Done")
End Sub

Çıktı

Komut dosyası çalıştırıldığında, aşağıdaki ekran görüntüsünde gösterildiği gibi "D: \ Try" konumunda "write.txt" dosyası oluşturulur.

Dosyanın içeriği aşağıdaki ekran görüntüsünde gösterilmektedir.

VBA'yı kullanarak belirli kriterlere göre grafikler oluşturabilirsiniz. Bir örnek kullanarak bir göz atalım.

Step 1 - Grafiğin üretilmesi gereken verileri girin.

Step 2 - 3 düğme oluşturun - biri çubuk grafik, diğeri pasta grafik oluşturmak ve diğeri sütun grafik oluşturmak için.

Step 3 - Bu tür grafiklerin her birini oluşturmak için bir Makro geliştirin.

' Procedure to Generate Pie Chart
Private Sub fn_generate_pie_graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlPie
   Next cht
End Sub

' Procedure to Generate Bar Graph
Private Sub fn_Generate_Bar_Graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlBar
   Next cht
End Sub

' Procedure to Generate Column Graph
Private Sub fn_generate_column_graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlColumn
   Next cht
End Sub

Step 4- İlgili düğmeye tıklandığında, grafik oluşturulur. Aşağıdaki çıktıda Pasta Grafiği oluştur düğmesine tıklayın.

Bir User Formkullanıcı veri girişini daha kontrol edilebilir hale getiren ve kullanıcı için kullanımı daha kolay hale getiren özel olarak oluşturulmuş bir iletişim kutusudur. Bu bölümde, basit bir form tasarlamayı ve excel'e veri eklemeyi öğreneceksiniz.

Step 1- Alt + F11 tuşlarına basarak VBA Penceresine gidin ve "Ekle" Menüsüne gidin ve "Kullanıcı Formu" nu seçin. Seçildikten sonra, aşağıdaki ekran görüntüsünde gösterildiği gibi kullanıcı formu görüntülenir.

Step 2 - Verilen kontrolleri kullanarak formları tasarlayın.

Step 3- Her bir kontrolü ekledikten sonra, kontrollerin adlandırılması gerekir. Başlık, formda görünene karşılık gelir ve ad, o öğe için VBA kodunu yazarken görünecek mantıksal ada karşılık gelir.

Step 4 - Eklenen kontrollerin her birinin karşısındaki isimler aşağıdadır.

Kontrol Mantıksal Ad Başlık
Nereden frmempform Çalışan Formu
Çalışan Kimlik Etiketi Kutusu empid Çalışan kimliği
ad Etiket Kutusu İsim İsim
soyadı Etiket Kutusu Soyadı Soyadı
dob Etiket Kutusu dob Doğum tarihi
mailid Etiket Kutusu posta kimliği Email kimliği
Passportholder Etiket Kutusu Pasaport sahibi Pasaport sahibi
Emp ID Metin Kutusu txtempid Uygulanamaz
Ad Metin Kutusu txtfirstname Uygulanamaz
Soyadı Metin Kutusu txtlastname Uygulanamaz
E-posta Kimliği Metin Kutusu txtemailid Uygulanamaz
Tarih Combo Box cmbdat Uygulanamaz
Ay Birleşik Giriş Kutusu cmbmonth Uygulanamaz
Yıl Açılan Kutu cmbyear Uygulanamaz
Evet Radyo Düğmesi Radyolar Evet
Radyo Düğmesi Yok radiono Hayır
Gönder Düğmesi btnsubmit Sunmak
İptal Düğmesi btncancel İptal etmek

Step 5 - Forma sağ tıklayıp 'Kodu Görüntüle'yi seçerek form yükleme olayı için kod ekleyin.

Step 6 - Nesneler açılır menüsünden 'Kullanıcı Formu'nu seçin ve aşağıdaki ekran görüntüsünde gösterildiği gibi' Başlat 'yöntemini seçin.

Step 7 - Formu yükledikten sonra metin kutularının temizlendiğinden, açılır kutuların doldurulduğundan ve Radyo düğmelerinin sıfırlandığından emin olun.

Private Sub UserForm_Initialize()
   'Empty Emp ID Text box and Set the Cursor 
   txtempid.Value = ""
   txtempid.SetFocus
   
   'Empty all other text box fields
   txtfirstname.Value = ""
   txtlastname.Value = ""
   txtemailid.Value = ""
   
   'Clear All Date of Birth Related Fields
   cmbdate.Clear
   cmbmonth.Clear
   cmbyear.Clear
   
   'Fill Date Drop Down box - Takes 1 to 31
   With cmbdate
      .AddItem "1"
      .AddItem "2"
      .AddItem "3"
      .AddItem "4"
      .AddItem "5"
      .AddItem "6"
      .AddItem "7"
      .AddItem "8"
      .AddItem "9"
      .AddItem "10"
      .AddItem "11"
      .AddItem "12"
      .AddItem "13"
      .AddItem "14"
      .AddItem "15"
      .AddItem "16"
      .AddItem "17"
      .AddItem "18"
      .AddItem "19"
      .AddItem "20"
      .AddItem "21"
      .AddItem "22"
      .AddItem "23"
      .AddItem "24"
      .AddItem "25"
      .AddItem "26"
      .AddItem "27"
      .AddItem "28"
      .AddItem "29"
      .AddItem "30"
      .AddItem "31"
   End With
   
   'Fill Month Drop Down box - Takes Jan to Dec
   With cmbmonth
      .AddItem "JAN"
      .AddItem "FEB"
      .AddItem "MAR"
      .AddItem "APR"
      .AddItem "MAY"
      .AddItem "JUN"
      .AddItem "JUL"
      .AddItem "AUG"
      .AddItem "SEP"
      .AddItem "OCT"
      .AddItem "NOV"
      .AddItem "DEC"
   End With
   
   'Fill Year Drop Down box - Takes 1980 to 2014
   With cmbyear
      .AddItem "1980"
      .AddItem "1981"
      .AddItem "1982"
      .AddItem "1983"
      .AddItem "1984"
      .AddItem "1985"
      .AddItem "1986"
      .AddItem "1987"
      .AddItem "1988"
      .AddItem "1989"
      .AddItem "1990"
      .AddItem "1991"
      .AddItem "1992"
      .AddItem "1993"
      .AddItem "1994"
      .AddItem "1995"
      .AddItem "1996"
      .AddItem "1997"
      .AddItem "1998"
      .AddItem "1999"
      .AddItem "2000"
      .AddItem "2001"
      .AddItem "2002"
      .AddItem "2003"
      .AddItem "2004"
      .AddItem "2005"
      .AddItem "2006"
      .AddItem "2007"
      .AddItem "2008"
      .AddItem "2009"
      .AddItem "2010"
      .AddItem "2011"
      .AddItem "2012"
      .AddItem "2013"
      .AddItem "2014"
   End With
   
   'Reset Radio Button. Set it to False when form loads.
   radioyes.Value = False
   radiono.Value = False

End Sub

Step 8- Şimdi kodu Gönder düğmesine ekleyin. Gönder düğmesine tıkladıktan sonra, kullanıcı değerleri çalışma sayfasına ekleyebilmelidir.

Private Sub btnsubmit_Click()
   Dim emptyRow As Long
  
   'Make Sheet1 active
   Sheet1.Activate
  
   'Determine emptyRow
   emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
  
   'Transfer information
   Cells(emptyRow, 1).Value = txtempid.Value
   Cells(emptyRow, 2).Value = txtfirstname.Value
   Cells(emptyRow, 3).Value = txtlastname.Value
   Cells(emptyRow, 4).Value = cmbdate.Value & "/" & cmbmonth.Value & "/" & cmbyear.Value
   Cells(emptyRow, 5).Value = txtemailid.Value
  
   If radioyes.Value = True Then
      Cells(emptyRow, 6).Value = "Yes"
   Else
      Cells(emptyRow, 6).Value = "No"
   End If
End Sub

Step 9 - Kullanıcı İptal düğmesini tıkladığında formu kapatmak için bir yöntem ekleyin.

Private Sub btncancel_Click()
   Unload Me
End Sub

Step 10- "Çalıştır" düğmesine tıklayarak formu çalıştırın. Değerleri forma girin ve 'Gönder' düğmesini tıklayın. Değerler, aşağıdaki ekran görüntüsünde gösterildiği gibi otomatik olarak çalışma sayfasına akacaktır.