Íåîáÿçàòåëüíûå àðãóìåíòû ôóíêöèé VBA
Çàäàíèå òèïà íåîáÿçàòåëüíîãî àðãóìåíòà
Äëÿ òîãî, ÷òîáû ïðàâèëüíî èñïîëüçîâàòü ôóíêöèè è îáíàðóæèâàòü îïåðàòîðû, êîòîðûå ïåðåäàþò ôóíêöèè íåâåðíûå çíà÷åíèÿ îáúÿâëÿåòñÿ òèï íåîáÿçàòåëüíîãî àðãóìåíòà (èíà÷å îíè èìåþò òèï Variant). Òèï íåîáÿçàòåëüíîãî àðãóìåíòà îáúÿâëÿåòñÿ òåì æå ñïîñîáîì, ÷òî è òèï îáÿçàòåëüíîãî àðãóìåíòà - ïðè ïîìîùè êëþ÷åâîãî ñëîâà As:
Function NameFunct(tStr As String, Optional neobArgument As Integer) As String
Çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ íåîáÿçàòåëüíûõ àðãóìåíòîâ
Ìîæíî óêàçûâàòü VBA ïðèñâàèâàòü íåîáÿçàòåëüíîìó àðãóìåíòó çíà÷åíèå ïî óìîë÷àíèþ. VBA èñïîëüçóåò çíà÷åíèå ïî óìîë÷àíèþ êàæäûé ðàç, êîãäà ôóíêöèÿ âûçûâàåòñÿ áåç ýòîãî âêëþ÷åííîãî íåîáÿçàòåëüíîãî àðãóìåíòà.
Çíà÷åíèå ïî óìîë÷àíèþ ïðèñâàèâàåòñÿ íåîáÿçàòåëüíîìó àðãóìåíòó ñ ïîìîùüþ çíàêà ðàâåíñòâà è ïðåäîñòàâëåíèÿ çíà÷åíèÿ òàê æå, êàê ïðè îáúÿâëåíèè èìåíîâàííîé êîíñòàíòû:
Function GetBookName(Optional lDflt As String = "Book1") As String
Ïåðåäà÷à àðãóìåíòîâ
Ñóùåñòâóþò äâà ñïîñîáà äëÿ ïåðåäà÷è èíôîðìàöèè â ôóíêöèþ-ïðîöåäóðó: ïî ññûëêå (ïî óìîë÷àíèþ) è ïî çíà÷åíèþ.
Ïðè ïåðåäà÷å äàííûõ ôóíêöèè ïî ññûëêå íà ñàìîì äåëå ïåðåäàåòñÿ òîëüêî àäðåñ ïàìÿòè, êîòîðûé ññûëàåòñÿ íà èñõîäíûå äàííûå, îïðåäåëåííûå â ñïèñêå àðãóìåíòîâ ôóíêöèè âî âðåìÿ åå âûçîâà.
Ýòî îçíà÷àåò, ÷òî åñëè ôóíêöèÿ èçìåíÿåò çíà÷åíèå â ëþáîì èç àðãóìåíòîâ, òî èñõîäíûå äàííûå òàêæå èçìåíÿþòñÿ.
Ïðè ïåðåäà÷å àðãóìåíòà ïî çíà÷åíèþ VBA äåëàåò êîïèþ èñõîäíûõ äàííûõ è ïåðåäàåò ýòó êîïèþ ôóíêöèè. Åñëè ôóíêöèÿ èçìåíÿåò çíà÷åíèå â àðãóìåíòå, ïåðåäàâàåìîì ïî çíà÷åíèþ, èçìåíÿåòñÿ òîëüêî êîïèÿ äàííûõ, à èñõîäíûå äàííûå íå èçìåíÿþòñÿ.

Ò.ê. ïåðåäà÷à ïî ññûëêå ïîçâîëÿåò ôóíêöèè èçìåíÿòü çíà÷åíèå èñõîäíûõ äàííûõ åå àðãóìåíòîâ, àðãóìåíòû, ïåðåäàâàåìûå ïî ññûëêå, ìîãóò ïîëó÷èòü íåæåëàòåëüíûå ïîáî÷íûå çíà÷åíèÿ.
 ëèñòèíãå, ïðåäñòàâëåííîì âûøå, ïîêàçàíî, ÷òî äî ïðèìåíåíèÿ ôóíêöèè Argument ñòðîêîâàÿ ïåðåìåííàÿ s1 ñîäåðæàëà òåêñòîâóþ ñòðîêó â íèæíåì ðåãèñòðå, à ïîñëå ïðèìåíåíèÿ ôóíêöèè îíà óæå ñîäåðæèò ñòðîêó â âåðõíåì ðåãèñòðå.
Ñòðîãî ãîâîðÿ, ïîáî÷íûå ðåçóëüòàòû ÿâëÿþòñÿ íåîáÿçàòåëüíûìè è â áîëüøèíñòâå ñëó÷àåâ - íåæåëàòåëüíûìè. Äëÿ ïðåäóïðåæäåíèÿ òàêèõ ïîáî÷íûõ ðåçóëüòàòîâ íåîáõîäèìî, ÷òîáû ôóíêöèÿ ðàáîòàëà ñ êîïèåé çíà÷åíèÿ àðãóìåíòà, à íå ñ èñõîäíûìè äàííûìè.
×òîáû ÿâíî óêàçàòü, ïåðåäàåò VBA àðãóìåíò ïî çíà÷åíèþ èëè ïî ññûëêå, íàäî èñïîëüçîâàòü êëþ÷åâûå ñëîâà ByVal, ByRef ïåðåä àðãóìåíòîì, äëÿ êîòîðîãî íåîáõîäèìî çàäàòü ìåòîä ïåðåäà÷è.

Ñëåäóåò îáúÿâëÿòü àðãóìåíò ñ êëþ÷åâûì ñëîâîì ByVal äëÿ ïåðåäà÷è åãî ïî çíà÷åíèþ, åñëè èìåþòñÿ ñîìíåíèÿ, ñëåäóåò ëè ïåðåäàâàòü ýòîò êîíêðåòíûé àðãóìåíò ïî ññûëêå èëè ïî çíà÷åíèþ.