Ôóíêöèè VBA (÷.1). Ïîíÿòèå ôóíêöèè.
Ôóíêöèÿ - ýòî âñòðîåííàÿ ôîðìóëà, âûïîëíÿþùàÿ äåéñòâèÿ íàä âûðàæåíèÿìè è ãåíåðèðóþùàÿ êàêîå-òî çíà÷åíèå, êîòîðîå VBA âñòàâëÿåò â ïðîãðàììó â òîì ìåñòå, ãäå ïîÿâëÿåòñÿ èìÿ ýòîé ôóíêöèè.
Íå ñëåäóåò ïóòàòü òåðìèíû ôóíêöèÿ è ïðîöåäóðà. Ïðîöåäóðà, êàê ïðàâèëî, âûïîëíÿåò êàêóþ-òî îïðåäåëåííóþ çàäà÷ó (çàäà÷è). Ôóíêöèÿ îïåðèðóåò îïðåäåëåííûìè äàííûìè è âñåãäà âîçâðàùàåò íåêîòîðîå ðåçóëüòèðóþùåå çíà÷åíèå.
 ïðèâåäåííîì âûøå ëèñòèíãå ôóíêöèÿ CStr ïðåîáðàçóåò çíà÷åíèå äðóãîé ôóíêöèè Now (ïîëó÷åíèå ñèñòåìíîé äàòû) â ñòðîêó è ðåçóëüòèðóþùåå çíà÷åíèå ïðèñâàèâàåòñÿ ïåðåìåííîé DT. Îáðàòèòå âíèìàíèå, ÷òî ïåðåìåííàÿ ÒÌ àâòîìàòè÷åñêè ïðåîáðàçóåòñÿ VBA ê ñòðîêîâîìó òèïó â îïåðàòîðå âûâîäà òåêñòîâîãî ñîîáùåíèÿ íà ýêðàí. Ïîäîáíûå "âîëüíîñòè" â ïðîãðàììèðîâàíèè äîñòóïíû äàëåêî íå âî âñåõ ÿçûêàõ, ïîýòîìó, íå ñòîèò èìè çëîóïîòðåáëÿòü, äàáû íå âûðàáîòàòü âðåäíóþ ïðèâû÷êó â íàïèñàíèè "íåðÿøëèâûõ" ïðîãðàììíûõ êîäîâ.
Âû, íàâåðíîå, óæå îáðàòèëè âíèìàíèå, ÷òî íåêîòîðûå ôóíêöèè íå òðåáóþò àðãóìåíòîâ.  âûøåïðèâåäåííîì ëèñòèíãå ôóíêöèè Time, Now íå òðåáóþò íèêàêèõ àðãóìåíòîâ, îíè ïðîñòî âîçâðàùàþò òåêóùèå ñèñòåìíîå âðåìÿ è äàòó.  òî æå âðåìÿ ôóíêöèÿ CStr òðåáóåò íàëè÷èÿ àðãóìåíòà.
Ôóíêöèè, íå òðåáóþùèå àðãóìåíòîâ, ïðîñòî ââîäÿòñÿ â êîä ïðîãðàììû.
Ôóíêöèè, òðåáóþùèå ââîäà îäíîãî èëè íåñêîëüêèõ àðãóìåíòîâ, ââîäÿòñÿ â êîä ïðîãðàììû ñëåäóþùèì îáðàçîì: ïèøåòñÿ íàçâàíèå ôóíêöèè, à çàòåì, â êðóãëûõ ñêîáêàõ ÷åðåç çàïÿòóþ ïåðå÷èñëÿþòñÿ çíà÷åíèÿ àðãóìåíòîâ.
Òèï äàííûõ çíà÷åíèÿ, âîçâðàùàåìîãî ôóíêöèåé, çàâèñèò îò ýòîé êîíêðåòíîé ôóíêöèè. Áîëüøèíñòâî ôóíêöèé âîçâðàùàþò çíà÷åíèÿ òèïà Variant, String, Double, Integer. VBA ìîæåò àâòîìàòè÷åñêè ïðåîáðàçîâûâàòü ðåçóëüòàò êàêîé-ëèáî ôóíêöèè â òèï äàííûõ, ñîâìåñòèìûé ñ äðóãèìè çíà÷åíèÿìè â âûðàæåíèè, ñîäåðæàùåì ýòó ôóíêöèþ. Âñå ïðàâèëà ñîâìåñòèìîñòè òèïîâ äàííûõ, ðàññìîòðåííûå äëÿ êîíñòàíò è ïåðåìåííûõ, ïðèìåíèìû òàêæå ê çíà÷åíèÿì, âîçâðàùàåìûì ôóíêöèÿì.
Èãíîðèðîâàíèå ðåçóëüòàòà ôóíêöèè
Âîçâðàùàåìîå çíà÷åíèå ôóíêöèè, êàê ïðàâèëî, èñïîëüçóåòñÿ â äàëüíåéøèõ âû÷èñëåíèÿõ ïðîãðàììû. Îäíàêî â íåêîòîðûõ ñëó÷àÿõ ìîæíî íå èñïîëüçîâàòü âîçâðàùàåìîå ôóíêöèåé çíà÷åíèå.
Èìåííî òàê èñïîëüçóåòñÿ â âûøåïðèâåäåííîì ëèñòèíãå ôóíêöèÿ MsgBox, õîòÿ çäåñü îíà èñïîëüçóåòñÿ â êà÷åñòâå ïðîöåäóðû (ò.ê. íå èñïîëüçóåò âîçâðàùàåìûå çíà÷åíèÿ).
 äåéñòâèòåëüíîñòè æå, VBA ïðåäîñòàâëÿåò íåñêîëüêî âñòðîåííûõ êîíñòàíò äëÿ îïðåäåëåíèÿ êíîïîê â îêíå ñîîáùåíèÿ MsgBox.
Îäíàêî, ðåçóëüòàò âûáîðà ïîëüçîâàòåëÿ îïÿòü íèêàêèì îáðàçîì íå âîçâðàùàåòñÿ è íå èñïîëüçóåòñÿ â äàëüíåéøåì êîäå ïðîãðàììû. Èñïðàâèì ýòîò íþàíñ.
Ïðè âûïîëíåíèè ïîñëåäíåãî ëèñòèíãà VBA ïîñëå îòâåòà ïîëüçîâàòåëÿ (êîòîðûé íàæàë íà îäíó èç òðåõ êíîïîê) çàêðûâàåò îêíî è â ïåðåìåííîé Otvet ñîõðàíÿåò ÷èñëî, ñîîòâåòñòâóþùåå âûáðàííîé êíîïêå.
Äâà ïîñëåäíèõ ïðèìåðà èñïîëüçîâàíèÿ MsgBox ïîêàçûâàþò âàæíûé ôàêò, êàñàþùèéñÿ ôóíêöèé: îïóñêàÿ êðóãëûå ñêîáêè âîêðóã ñïèñêà àðãóìåíòîâ ôóíêöèè, ìû òåì ñàìûì èãíîðèðóåì ðåçóëüòàò ôóíêöèè.  ýòîì ñëó÷àå VBA èíòåðïðåòèðóåò âûçîâ ôóíêöèè, êàê âûçîâ ïðîöåäóðû, è íå âîçâðàùàåò ðåçóëüòàò.
 òî æå âðåìÿ VBA çàïðåùàåò èãíîðèðîâàíèå ðåçóëüòàòà ôóíêöèè, èìÿ êîòîðîé ÿâëÿåòñÿ êëþ÷åâûì ñëîâîì VBA (íàïðèìåð, CStr), è òåõ ôóíêöèé, åäèíñòâåííûì íàçíà÷åíèåì êîòîðûõ ÿâëÿåòñÿ ïðåäîñòàâëåíèå íåêîòîðîãî âîçâðàùàåìîãî çíà÷åíèÿ, íàïðèìåð, ìàòåìàòè÷åñêèõ.
Èìåíîâàííûå àðãóìåíòû ôóíêöèè
Àðãóìåíòû ôóíêöèè íåîáõîäèìî ïåðå÷èñëÿòü â îïðåäåëåííîì ïîðÿäêå. Òàê äëÿ ôóíêöèè MsgBox ïåðâûé àðãóìåíò ÿâëÿåòñÿ ñîîáùåíèåì äëÿ îòîáðàæåíèÿ, âòîðîé - ýòî ÷èñëî è òèï êíîïîê äëÿ äèàëîãîâîãî îêíà, òðåòèé - çàãîëîâîê äèàëîãîâîãî îêíà. Îá ýòîì ïîäñêàçûâàåò âñïëûâàþùåå îêíî "Êðàòêèå ñâåäåíèÿ", ïîÿâëÿþùååñÿ ïðè ââîäå èìåíè ôóíêöèè.
Ñëåäóåò îáðàòèòü âíèìàíèå, ÷òî åñëè âòîðîé (íåîáÿçàòåëüíûé) àðãóìåíò îïóñòèòü, âñå æå íåîáõîäèìî âêëþ÷àòü îòìå÷àþùèå çàïÿòûå äëÿ âòîðîãî àðãóìåíòà â ñïèñîê àðãóìåíòîâ.
Ïðè ïðîïóñêå èëè ïåðåñòàíîâêå àðãóìåíòîâ â ñïèñêå àðãóìåíòîâ ôóíêöèè ìîæíî ïîëó÷èòü îøèáêè íåñîâïàäåíèÿ òèïîâ èëè, åùå õóæå, íå ïîëó÷èòü íèêàêîé îøèáêè âîîáùå.  ðåçóëüòàòå ïðîãðàììà ìîæåò ðàáîòàòü íåïðàâèëüíî, à âàì áóäåò òðóäíî íàéòè ïðè÷èíó "íåèñïðàâíîñòè".
×òîáû ïðåäîòâðàòèòü ïîäîáíûå îøèáêè, VBA äàåò âîçìîæíîñòü èñïîëüçîâàíèÿ èìåíîâàííûõ àðãóìåíòîâ ôóíêöèé. Îáðàòèòå âíèìàíèå íà ñëåäóþùèé ëèñòèíã.
Îáå ñòðîêè èìåþò îäèí è òîò æå ðåçóëüòàò. Ïåðâûé îïåðàòîð èñïîëüçóåò îáû÷íûé ìåòîä ïåðå÷èñëåíèÿ àðãóìåíòîâ, à âòîðîé - ìåòîä èìåíîâàííûõ àðãóìåíòîâ. Ïðè÷åì, îáðàòèòå, âíèìàíèå, âî âòîðîì ñëó÷àå ïîðÿäîê ñëåäîâàíèÿ àðãóìåíòîâ èçìåíåí.  ìåòîäå èìåíîâàííûõ àðãóìåíòîâ ýòî äîïóñêàåòñÿ.
Ïîëíûé ñèíòàêñèñ ôóíêöèè MsgBox ñëåäóþùèé:
MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, Context])
Åäèíñòâåííûì îáÿçàòåëüíûì àðãóìåíòîì ÿâëÿåòñÿ àðãóìåíò Prompt, êîòîðûé ìîæåò áûòü ëþáûì ñòðîêîâûì âûðàæåíèåì è ñîäåðæèò èíôîðìàöèþ, êîòîðàÿ âûâîäèòñÿ â äèàëîãîâîì îêíå. Âñå îñòàëüíûå àðãóìåíòû - íåîáÿçàòåëüíûå.
Àðãóìåíò Title - ñòðîêà äëÿ çàãîëîâêà äèàëîãîâîãî îêíà.
Àðãóìåíò HelpFile - ñòðîêîâîå âûðàæåíèå, ñîäåðæàùåå èìÿ ñïðàâî÷íîãî ôàéëà Windows (êîòîðûé óæå äîëæåí áûòü ñîçäàí).
Àðãóìåíò Context - ÷èñëåííîå âûðàæåíèå, óêàçûâàþùåå ðàçäåë â ñïðàâî÷íîì ôàéëå, îòíîñÿùèéñÿ ê îòîáðàæàåìîìó äèàëîãîâîìó îêíó.
Àðãóìåíò Buttons - ÷èñëåííîå âûðàæåíèå, êîòîðîå çàäàåò êîëè÷åñòâî è òèï êíîïîê â äèàëîãîâîì îêíå. Òàêæå óêàçûâàåò êíîïêó ïî óìîë÷àíèþ è, ñîäåðæèò ëè ýòî äèàëîãîâîå îêíî ñòàíäàðòíûå çíà÷êè Windows äëÿ ïðåäóïðåäèòåëüíûõ ñîîáùåíèé è çàïðîñîâ ïîëüçîâàòåëÿ.
Àðãóìåíòû-êîíñòàíòû ôóíêöèè MsgBox
Êîíñòàíòà | Íàçíà÷åíèå |
vbAbortRetryIgnore | Îòîáðàæàåò êîìàíäíûå êíîïêè Ñòîï, Ïîâòîð, Ïðîïóñòèòü |
vbApplicationModal | Äëÿ ïðîäîëæåíèÿ ðàáîòû ñ ïðèëîæåíèåì ïîëüçîâàòåëü äîëæåí îòâåòèòü íà çàïðîñ äèàëîãîâîãî îêíà. |
vbCritical | Îòîáðàæàåòñÿ îêíî ñ ïðåäóïðåäèòåëüíûì çíà÷êîì êðèòè÷åñêîé îøèáêè. |
vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 |
Íîìåð êîìàíäíîé êíîïêè â äèàëîãîâîì îêíå ÿâëÿþùåéñÿ êíîïêîé ïî óìîë÷àíèþ. |
vbExclamation | Æåëòûé çíàê âîïðîñà. Èñïîëüçóåòñÿ äëÿ îòîáðàæåíèÿ âàæíîé èíôîðìàöèè íå òðåáóþùåé îòâåòà. |
vbInformation | Îòîáðàæàåò çíà÷îê èíôîðìàöèè. Èñïîëüçóåòñÿ äëÿ îòîáðàæåíèÿ ñïðàâî÷íîé èíôîðìàöèè. |
vbMsgBoxHelpButton | Äîáàâëÿåò ê äèàëîãîâîìó îêíó êíîïêó Ñïðàâêà. Ïðè ùåë÷êå íà ýòîé êíîïêå îòêðûâàåòñÿ ôàéë, êîòîðûé çàäàí â àðãóìåíòå HelpFile, â ðàçäåëå, çàäàííîì àðãóìåíòîì Context. |
vbOKCancel | Îòîáðàæàåò êíîïêè ÎÊ è Îòìåíà. |
vbOKOnly | Îòîáðàæàåò òîëüêî êíîïêó ÎÊ - àíàëîãè÷íà ïðîïóñêó àðãóìåíòà Buttons. |
vbQuestion | Îòîáðàæàåò çíà÷îê âîïðîñà. Èñïîëüçóåòñÿ êîãäà íàäî çàäàòü ïîëüçîâàòåëþ êàêîé-òî âàæíûé âîïðîñ. |
vbRetryCancel | Îòîáðàæàåò êíîïêè Ïîâòîð è Îòìåíà. |
vbSystemModal | Äèàëîãîâîå îêíî âñåãäà îñòàåòñÿ âïåðåäè äðóãèõ îêîí ïîêà íå áóäåò çàêðûòî. |
vbYesNo | Îòîáðàæàåò êíîïêè Äà è Íåò. |
vbYesNoCancel | Îòîáðàæàåò êíîïêè Äà, Íåò è Îòìåíà. |
Âîçâðàùàåìûå çíà÷åíèÿ-êîíñòàíòû ôóíêöèè MsgBox
Êîíñòàíòà | Íàçíà÷åíèå |
vbAbort | Ïîëüçîâàòåëü âûáèðàåò êíîïêó Ñòîï |
vbCancel | Ïîëüçîâàòåëü âûáèðàåò êíîïêó Îòìåíà |
vbIgnore | Ïîëüçîâàòåëü âûáèðàåò êíîïêó Ïðîïóñòèòü |
vbNo | Ïîëüçîâàòåëü âûáèðàåò êíîïêó Íåò |
vbOK | Ïîëüçîâàòåëü âûáèðàåò êíîïêó ÎÊ |
vbRetry | Ïîëüçîâàòåëü âûáèðàåò êíîïêó Ïîâòîð |
vbYes | Ïîëüçîâàòåëü âûáèðàåò êíîïêó Äà |
Ôóíêöèÿ InputBox
InputBox - åùå îäíà äîâîëüíî ÷àñòî èñïîëüçóåìàÿ ôóíêöèÿ äëÿ îáìåíà äàííûìè ñ ïîëüçîâàòåëåì.
Ïîëíûé ñèíòàêñèñ ôóíêöèè InputBox ñëåäóþùèé:
InputBox (Prompt [, Title] [, Default] [, XPos] [, YPos] [, HelpFile, Context])
Àðãóìåíòû Prompt (åäèíñòâåííûé îáÿçàòåëüíûé àðãóìåíò), Title, HelpFile, Context - àíàëîãè÷íû óæå ðàññìîòðåííûì îäíîèìåííûì àðãóìåíòàì ôóíêöèè MsgBox.
Àðãóìåíò Default - ñòðîêîâîå âûðàæåíèå, èñïîëüçóþùååñÿ êàê çíà÷åíèå ïî óìîë÷àíèþ äëÿ ïîëüçîâàòåëüñêîãî ââîäà.
Àðãóìåíòû XPos, YPos - ëþáûå ÷èñëåííûå âûðàæåíèÿ. Ýòè àðãóìåíòû çàäàþò êîîðäèíàòû âûâîäà äèàëîãîâîãî îêíà íà ýêðàíå ìîíèòîðà. XPos - ãîðèçîíòàëüíîå ðàññòîÿíèå îò ëåâîãî êðàÿ îêíà. YPos - âåðòèêàëüíîå ðàññòîÿíèå îò âåðõíåãî êðàÿ îêíà. Îáà ðàññòîÿíèÿ èçìåðÿþòñÿ â òâèïàõ (1 òâèï = 1/20 òî÷êè = 0,0007 äþéìà). Ñëåäóåò áûòü âíèìàòåëüíûì ïðè èñïîëüçîâàíèè ýòèõ àðãóìåíòîâ, ò.ê. ïðè èõ áîëüøèõ çíà÷åíèÿõ äèàëîãîâîå îêíî ìîæåò "óåõàòü" çà ïðåäåëû ýêðàíà ìîíèòîðà.
 êà÷åñòâå ïðèìåðà èñïîëüçîâàíèÿ ôóíêöèè InputBox ïðèâåäåí íèæåñëåäóþùèé ëèñòèíã, êîòîðûé çàïðàøèâàåò ïîëüçîâàòåëÿ ââåñòè èìÿ ôàéëà, è ïðåäëàãàåò èìÿ ïî óìîë÷àíèþ.
Ïðè âûçîâå InputBox ìîæíî èñïîëüçîâàòü èìåíîâàííûå àðãóìåíòû.
Íåëüçÿ ñìåøèâàòü èìåíîâàííûå àðãóìåíòû ñ îáû÷íûì ñïèñêîì àðãóìåíòîâ â îäíîì è òîì æå âûçîâå ôóíêöèè.