C, PHP, VB, .NET

Дневникът на Филип Петров


* Променливи, оператори и константи във VBA

Публикувано на 22 септември 2015 в раздел Макроси VBA.

VBA включва всички стандартни примитивни типове данни, които вече са ви познати от уводните курсове по програмиране. Декрарирането на променлива се извършва по следния начин:

Dim <varname> As <Vartype>

Основните типове данни са следните:

Тип Вид Стойности
Boolean Булев True или False
Byte Цяло число 0 до 255
Integer Цяло число -32,768 до 32,767
Long Цяло число -2,147,483,648 до 2,147,483,648
LongLong Цяло число (само при
64 битови системи)
-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
LongPtr Указател Long при 32 битови и LongLong при 64 битови системи
Single Плаваща запетая -3.402823E+38 до -1.401298E-45 за отрицателни числа
1.401298E-45 до 3.402823E+38 за положителни числа
Double Плаваща запетая -1.79769313486232e+308 до -4.94065645841247E-324 за отрицателни числа
4.94065645841247E-324 до 1.79769313486232e+308 за положителни числа
Currency Фиксиран числов -922,337,203,685,477.5808 до 922,337,203,685,477.5807
Decimal Фиксиран числов +/- 79,228,162,514,264,337,593,543,950,335 ако няма десетична запетая
+/- 7.9228162514264337593543950335 (28 цифри след десетичната запетая.
String(фиксирана дължина) Текстови 1 до 65,400 символа (кодировката е според източника)
String(променлива дължина) Текстови 0 до 2 милиарда символа (кодировката е според източника)
Date Дата и час January 1, 100 до December 31, 9999 и време от 00:00:00 до 23:59:59
Object Референтен Всякакъв обект
Variant Променлив Всякакъв без String(фиксирана дължина)

Ако например искаме да инициализираме променлива MyVar, която да е цяло число от тип Integer, ще напишем следния код:

Dim MyVar As Integer

За да присвоите стойност на тази променлива, използвате оператор за присвояване "=":

MyVar = 10

Важно е в самото начало да се отбележи, че във VBA няма специален символ за край на команда. В други програмни езици съществуват разделители като например ";" и чрез тях можете да изпълните две команди на един ред. При VBA е задължително всяка команда да е на отделен ред. Въпреки това има начин да се декларират променливи на един ред. Ето един пример:

Dim Var1 As Long, Var2 As Integer, Var3 As Single

Специално отбелязваме, че е необходимо да запишете типа на всяка една от изброените променливи. Ако не го направите, те ще станат Variant. Например ако напишете следното:

Dim Var1, Var2, Var3 As Long

може погрешно да си помислите, че сте декларирали и трите променливи като Long. Това не е така. Вие реално сте декларирали следното:

Dim Var1 As Variant, Var2 As Variant, Var3 As Long

Декларирането на променливите във VBA не е задължително. Ако използвате променлива, която не е декларирана, тя автоматично приема тип данни Variant. Този тип данни е по-специален от останалите, защото не е строго фиксиран. Ако например присвоите Byte на Variant променлива и извършвате аритметични операции с нея, тя ще се интерпретира като Byte. Ако обаче по някаква причина прехвърлите типа, тази променлива автоматично ще бъде интерпретирана като по-големия тип - в примера Integer. На пръв поглед този тип данни изглежда много удобен, но все пак трябва да знаете, че той е по-малко ефективен от гледна точка на бързодействие спрямо останалите (разликата е незабележима при малки проекти, но би могло да бъде осезаема при огромно количество изчисления). Затова е добра практика да се научим да подбираме коректно типовете данни, когато можем да ги фиксираме.

Ето един пример за това как можем да декрарираме различни променливи и да им присвоим съответни стойности:

 Dim BoolVar As Boolean
 BoolVar = True
 
 Dim ByteVar As Byte
 ByteVar = 213
 
 Dim IntVar As Integer
 IntVar = 13991
 
 Dim LongVar As Long
 LongVar = 19918330
 
 Dim SingleVar As Single
 SingleVar = 13.98
 
 Dim DoubleVar As Double
 DoubleVar = 5559.223
 
 Dim VarlenStringVar As String
 VarlenStringVar = "abcdefgh"
 
 Dim FixedlenStringVar As String * 4
 FixedlenStringVar = "abcd"
 
 Dim DateVar As Date
 DateVar = #9/22/2015#
 
 Dim DateTimeVar As Date
 DateTimeVar = #9/22/2015 5:15:00 PM#
 
 Dim VariantVar As Variant
 VariantVar = 10
 VariantVar = 12.55
 VariantVar = "abcd"
 VariantVar = #9/22/2015#

Възможно е да поставяте коментари в кода. Това се прави или чрез оператор REM или чрез неговия съкратен запис единична кавичка:

Rem this is a comment
'This is also a comment

Аритметичните операции са стандартните, които може да видите във всеки език за програмиране:

Оператор Тип Описание Пример
+ Аритметичен Събира числа от всякакъв тип Dim A As Integer
A = 6 + 5
'11
- Аритметичен Изважда числа от всякакъв тип Dim B As Integer
B = 10 - 6
'4
* Аритметичен Умножава числа от всякакъв тип Dim C As Integer
C = 3 * B
'12
\ Аритметичен Дели цели числа Dim D As Integer
D = 32 \ 20
'1
MOD Аритметичен Остатък от деление на цели числа Dim E As Integer
E = 32 MOD 20
'8
/ Аритметичен Дели числа с плаваща запетая Dim F As Double
F = 30 / 20
'1.5
^ Аритметичен Експонента, работи с всякакви числа, но връща винаги Double Dim G As Double
G = 3 ^ 2
'9.0 - винаги Double
= Присвояване
Сравнение
Дава стойност на променлива или сравнява изрази Dim H As Integer
H = 8
'Присвоява 8 на H
Dim HEven As Boolean
HEven = (H Mod 2 = 0)
'Проверява дали H Mod 2 e 0
'и връща true или false на HEven
<, <=, >, >=, <> Сравнение Сравняват изрази Dim I As Integer, J As Integer
I = 3
J = 4
IJCompare As Boolean
IJCompare = I < J
'true
IJCompare = I >= J
'false
IJCompare = I <> J
'true
AND Логически Логическо "И" - ако и двете са истина, връща true - иначе false Dim LogicalCmp As Boolean
LogicalCmp = (I = 3) AND (J = 4)
'true
LogicalCmp = (I <5) AND (J > 8)
'false, J не е по-голямо от 8
OR Логически Логическо "ИЛИ" - ако поне едно от двете е истина, връща true - иначе false LogicalCmp = (I < 5) OR (J > 8)
'true, I е по-малко от 5
NOT Логически Логическо отрицание - превръща true във false или false във true LogicalCmp = NOT (I < 5)
'false, защото I < 5 връща true
XOR Логически Изключващо "ИЛИ" - ако само едното е истина, връща true - иначе false LogicalCmp = (I < 5) XOR (J >8)
'true, само едно от двете е вярно
LogicalCmp = (I < 5) XOR (J >0)
'false, и двете са вярни
LogicalCmp = (I <= 0) XOR (J > 10)
'false, нито едно не е вярно
AndAlso Логически Логическо "И" с прекъсване ако първия израз е false LogicalCmp = (I = 3) AndAlso (J = 4)
'true, и двете са проверени
LogicalCmp = (I = 3) AndAlso (J > 10)
'false, и двете са проверени
LogicalCmp = (I < 0) AndAlso (J = 4)
'false, само първото е проверено
& Конкатенация Долепва два текстови низа. Ако подадем данни, които не са текстови низ, те се превръщат в String Dim StrConcatVar As String
StrConcatVar = I & J
'34
StrConcatVar = "I = " & I & ", J = " & J
'I = 3, J = 4

Има и други оператори, които са или по-рядко използвани, или прекалено сложни за обаснение на този етап. Някои от тях ще разгледаме по-нататък.

Възможно е да дефинирате и константи. Това са такива променливи, които след инициализация не могат да бъдат променяни. Константите се декларират и инициализират по следния начин:

Const NameOfConst As Integer = 10

След тази декларация NameOfConst вече не може да си променя стойността.

 



Един коментар


Добави коментар

Адресът на електронната поща няма да се публикува


*