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.