Mövzu № 8. Visual Basic-də verilənlərin tiplərinin çevrilməsi Kompilyasiya zamanı VBA tiplər arasındakı "fərqləri" aradan götürməyə çalışaraq, bütün verilənləri bir tipə çevirməyə çalışır. Bu mümkün olmasa tiplərin uyğun gəlməməsi haqqında (type-mismatch) istifadəçiyə xəbər verir və öz işini dayandırır. Yalnız ifadədə mövcud tip fərqləri aradan götürüldükdən sonra kodun kompilyasiyası mümkündür.
Proqramlaşdırmada tiplərin xüsusi funksiyalarla çevrilməsini təmin etmək daha effktiv kodun yaranmasına səbəb olur. VB/VBA-nın avtomat tip çevirmələrindən imkan daxilində az istifadə etmək daha məqsədəuyğundur Çünki, avtomat tip çevirmələri proqramın yerinə yetirilməsi üçün izafi vaxt və yaddaş itkisinə səbəb olur. İndi isə VB/VBA proqramlaşdırmasında tip və tip çevirmələrilərində daha çox istifadə olunan bəzi daxili funksiyalarla tanış olaq.
TypeName() – verilənin tipini göstərən funksiya1.
Bu funksiya vasitəsilə verilənin tipini müəyyən edə bilərik. Aşağıdakı koddu analiz edək:
Expressions.e_TypeName1 (ilkin kod) 1) Sub e_TypeName1()
2) Dim a As String, b As Integer, c As Boolean
3) d = "21.03.2009"
4) f = 12.1234
5) e = 122323434
6) g = 1234
7) m = 12
8) n = False
9) Debug.Print TypeName(a) ' res: String
10) Debug.Print TypeName(b) ' res: Integer
11) Debug.Print TypeName(c) ' res: Boolean
12) Debug.Print TypeName(d) ' res: String
13) Debug.Print TypeName(f) ' res: Double
14) Debug.Print TypeName(e) ' res: Long
15) Debug.Print TypeName(g) ' res: Integer
16) Debug.Print TypeName(m) ' res: Integer
17) Debug.Print TypeName(n) ' res: Boolean
18) End Sub
Analiz: 2-ci sətrdəa, b, c dəyişənləri açıq şəkildə, müəyyən tipdə elan olunublar. Bu 3 dəyişənin tipini 9-11-ci sətrlərdə yoxlayırıq. Nəticələr, gözlədiyimizdən fərqli deyil.
3-cü sətrdəbiz elan edilməmiş d dəyişənini "21.03.2009" tarix tipi kimi inisilizasiya etsəkdə, bu dəyişənin VBA tərəfindən String tipi(!!!) kimi "başa" düşüldüyü ortaya çıxır. (12-ci sətr)
4-cü sətrdə elan olunmamış f dəyişənini 12.1234 ədədi ilə inisilizasiya etdik. VBA bu ədədi Double tipi kimi başa düşdü. Göründüyü kimi VBA bu halda Double tipinini Currency tipindən "üstün" tutdu. (13-cü sətr)
5-ci sətrdə elan olunmamış e dəyişənini 122323434 ədədi ilə inisilizasiya etdik. VBA bu ədədi Long tipi kimi başa düşdü. VBA burda özünü "ağıllı" aparıb, bu uzunluqda ədədin yalnız Long tipində olmasını düzgün müəyyən etdi. (14-cü sətr)
6-cı sətrdə elan olunmamış g dəyişənini 1223 ədədi ilə inisilizasiya etdik. VBA bu ədədi Integer tipi kimi başa düşdü. (15-ci sətr)
7-ci sətrdə elan olunmamış m dəyişənini 12 ədədi ilə inisilizasiya etdik. VBA bu ədədi Byte tipi kimi qəbul edə bilərdi, amma o, üstünlüyü Integer(!!!) tipinə verdi. (16-cı sətr)
8-ci sətrdə elan olunmamış n dəyişənini True ilə inisilizasiya etdik. VBA bu ədədi Boolean tipi kimi qəbul etdi.(17-ci sətr)
Nəticə: VBA-nın "çaşmaması"(!!!) üçün dəyişənləri, tiplərini açıq göstərməklə elan etmək lazımdır. Yəni dəyişənin tipinin VBA tərəfindən avtomatik müəyyən olunmasına imkan verilməməlidir!