Ñîâìåñòèìîñòü òèïîâ äàííûõ VBA
Îïåðàòîðû è âûðàæåíèÿ
Âûðàæåíèå - ýòî çíà÷åíèå èëè ãðóïïà çíà÷åíèé, âûðàæàþùàÿ îòäåëüíîå çíà÷åíèå. Êàæäîå âûðàæåíèå âû÷èñëÿåòñÿ äî îòäåëüíîãî çíà÷åíèÿ. Íàïðèìåð, âûðàæåíèå 10+20 èìååò ðåçóëüòàò 30.
Âûðàæåíèÿ ñîñòîÿò èç îäíîé èëè áîëåå ÷àñòåé:
- Êîíñòàíòû
- Ïåðåìåííûå
- Îïåðàòîðû
- Ìàññèâû
- Ýëåìåíòû ìàññèâà
- Ôóíêöèè
Âñå âûðàæåíèÿ èìåþò ðåçóëüòàòîì îäíî çíà÷åíèå, èìåþùåå îäèí èç òèïîâ äàííûõ, î êîòîðûõ ãîâîðèëîñü íà ïðåäûäóùèõ óðîêàõ.
Âûðàæåíèÿ ìîãóò òàêæå èìåòü ðåçóëüòàòîì îäíî èç ñïåöèàëüíûõ çíà÷åíèé Empty èëè Null.
Çíà÷åíèå Empty ïðåäñòàâëÿåò íåèíèöèàëèçèðîâàííóþ ïåðåìåííóþ òèïà Variant (èëè ðåçóëüòàò âûðàæåíèÿ, ñîäåðæàùèé íåèíèöèàëèçèðîâàííóþ ïåðåìåííóþ òèïà Variant).
Çíà÷åíèå Null ïðåäñòàâëÿåò âûðàæåíèå, ñîäåðæàùåå íåâåðíûå äàííûå.
Îïåðàòîðû èñïîëüçóþòñÿ äëÿ îáúåäèíåíèÿ, ñðàâíåíèÿ èëè äðóãèõ äåéñòâèé íàä îïðåäåëåííûìè çíà÷åíèÿìè â âûðàæåíèè. Îïåðàòîðàì ïðèñâîåíû èìåíà, ïîñêîëüêó îíè ÿâëÿþòñÿ ñèìâîëàìè, îáîçíà÷àþùèìè òî, ÷òî ñ ðàçëè÷íûìè çíà÷åíèÿìè â âûðàæåíèè äîëæíû áûòü âûïîëíåíû îïðåäåëåííûå ìàòåìàòè÷åñêèå è äðóãèå îïåðàöèè.
Ýëåìåíòû äàííûõ, íàä êîòîðûìè îïåðàòîð âûïîëíÿåò äåéñòâèå, íàçûâàþòñÿ îïåðàíäàìè. Íàïðèìåð, â âûðàæåíèè 10+20 ÷èñëà 10 è 20 ÿâëÿþòñÿ îïåðàíäàìè îïåðàòîðà ñëîæåíèÿ. Âûðàæåíèå ìîæåò ñîäåðæàòü îäèí, íåñêîëüêî îïåðàòîðîâ èëè íè îäíîãî.
Íå âñå òèïû äàííûõ ñîâìåñòèìû äðóã ñ äðóãîì, è íåëüçÿ èñïîëüçîâàòü íåñîâìåñòèìûå òèïû äàííûõ â îäíîì è òîì æå âûðàæåíèè. Íàïðèìåð, íåëüçÿ ïðîèçâåñòè àðèôìåòè÷åñêîå ñëîæåíèå íàä ÷èñëîì è ñòðîêîé. Ïðè îáðàáîòêå âûðàæåíèÿ, ñîäåðæàùåãî ðàçëè÷íûå òèïû äàííûõ, VBA ñíà÷àëà ïûòàåòñÿ óñòðàíèòü ëþáîå ðàçëè÷èå òèïîâ, ïðåîáðàçóÿ çíà÷åíèÿ â âûðàæåíèè â ñîâìåñòèìûå òèïû äàííûõ. Åñëè óñòðàíèòü êàêèå-ëèáî ðàçëè÷èÿ ïðåîáðàçîâàíèåì òèïîâ íå óäàåòñÿ, îòîáðàæàåòñÿ îøèáêà âðåìåíè èñïîëíåíèÿ è ïðîöåäóðà ïðåêðàùàåò âûïîëíÿòüñÿ.
VBA ïðåäîñòàâëÿåò ðàçëè÷íûå ôóíêöèè äëÿ ïðåîáðàçîâàíèÿ îäíîãî òèïà äàííûõ â äðóãîé (î íèõ áóäåò ðàññêàçàíî ïîçæå).
VBA èñïîëüçóåò ðàçëè÷íûå ïðàâèëà äëÿ àâòîìàòè÷åñêîãî ïðåîáðàçîâàíèÿ äàííûõ â ñîâìåñòèìûå òèïû. Êàê ïðàâèëî, áîëüøèíñòâî âûðàæåíèé, èñïîëüçóþùèõ ðàçíûå òèïû äàííûõ, âûçûâàþò îøèáêó íåñîâïàäåíèÿ òèïîâ òîëüêî òîãäà, êîãäà îáà îïåðàíäà â âûðàæåíèè èìåþò îïðåäåëåííûå è ðàçíûå òèïû. Âûðàæåíèÿ íå âûçûâàþò îøèáêó íåñîâïàäåíèÿ òèïîâ, êîãäà îäèí èç îïåðàíäîâ ÿâëÿåòñÿ ïåðåìåííîé òèïà Variant. VBA ëåã÷å âûïîëíÿåò àâòîìàòè÷åñêèå ïðåîáðàçîâàíèÿ òèïîâ ñ äàííûìè òèïà Variant.
Ïðåîáðàçîâàíèÿ ÷èñëåííûõ òèïîâ
VBA ïðåîáðàçóåò ÷èñëåííûå òèïû äàííûõ â âûðàæåíèè â òèï íàèáîëüøåé òî÷íîñòè, êîòîðûé çàòåì äàåò ðåçóëüòàòó âûðàæåíèÿ. Íàïðèìåð, îïåðàíäàìè âûðàæåíèÿ ÿâëÿþòñÿ ÷èñëà 10(Integer) è 20.89 (Single) - ðåçóëüòàò âûðàæåíèÿ áóäåò èìåòü òèï Single.
Íî, åñëè ïåðåìåííîé òèïà Integer ïîïûòàòüñÿ ïðèñâîèòü ÷èñëåííîå âûðàæåíèå òèïà Single, òî VBA ïðîèçâåäåò îêðóãëåíèå äî íåîáõîäèìîé òî÷íîñòè.
Ïðåîáðàçîâàíèå ñòðîê è ÷èñåë
Ïðè ïðåîáðàçîâàíèè ÷èñëà â ñòðîêó VBA ñîçäàåò ñòðîêó, ñîäåðæàùóþ âñå öèôðû ýòîãî ÷èñëà è äåñÿòè÷íûé çíàê (åñëè òàêîâîé èìååòñÿ). Íàïðèìåð, ÷èñëî 123.849 áóäåò ïðåîáðàçîâàíî â ñòðîêó "123.849".
Åñëè ÷èñëî î÷åíü áîëüøîå èëè î÷åíü ìàëåíüêîå - VBA ñîçäàñò ñòðîêó â ýêñïîíåíöèàëüíîì âèäå. Íàïðèìåð: 123000000 ïðåîáðàçóåòñÿ â "123Å6".
Îáðàòíîå ïðåîáðàçîâàíèå âîçìîæíî, åñëè òîëüêî ñòðîêà ñîäåðæèò ñèìâîëüíîå ïðåäñòàâëåíèå ÷èñëà â äåñÿòè÷íîì ôîðìàòå èëè ýêñïîíåíöèàëüíîì, ïðè ýòîì â êà÷åñòâå ðàçäåëèòåëÿ äðîáíîé ÷àñòè èñïîëüçóåòñÿ òî÷êà (íî íå çàïÿòàÿ).
Ïðåîáðàçîâàíèÿ Boolean
Êîãäà VBA ïðåîáðàçóåò çíà÷åíèÿ òèïà Boolean â ÷èñëà, çíà÷åíèå True ïðåîáðàçóåòñÿ â 1, à False - â 0.
Êîãäà ïðîèñõîäèò îáðàòíîå ïðåîáðàçîâàíèå, òî VBA ïðåîáðàçóåò 0 â False, à ëþáîå äðóãîå ÷èñëî - â True.
Åñëè ïðîèñõîäèò ïðåîáðàçîâàíèå òèïà Boolean â ñòðîêè, òî VBA èñïîëüçóåò ñòðîêó "True" äëÿ ëîãè÷åñêîãî çíà÷åíèÿ True è ñòðîêó "False" - äëÿ False. Îáðàòíîãî ïðåîáðàçîâàíèÿ ñòðîêè â òèï Boolean íå ïðåäóñìîòðåíî.
Ïðåîáðàçîâàíèå Date
Êîãäà VBA ïðåîáðàçóåò òèï äàííûõ Date â ÷èñëî, ðåçóëüòàòîì ÿâëÿåòñÿ ÷èñëåííîå çíà÷åíèå - ÷èñëî òèïà Double, êîòîðîå ñîäåðæèò êîëè÷åñòâî äíåé îò 30 äåêàáðÿ 1899 (îòðèöàòåëüíîå ÷èñëî ïðåäñòàâëÿåò äàòó, áîëåå ðàííþþ ÷åì 30 äåêàáðÿ 1899). Äåñÿòè÷íàÿ ÷àñòü ÷èñëà âûðàæàåò âðåìÿ äíÿ êàê ÷àñòü äíÿ; 0 - ýòî ïîëíî÷ü, 0.5 - ýòî ïîëäåíü.
Ïðåîáðàçîâàíèå ÷èñëåííûõ òèïîâ äàííûõ â òèïû Date ÿâëÿåòñÿ ïðîñòî îáðàòíûì ïðåîáðàçîâàíèþ òèïà Date â ÷èñëî.