Тартиби "Функсия" ва "Зер" дар VBA

Функсияҳои VBA дарунсохт

Пеш аз оғози сохтани функсияҳои VBA-и худ, хуб аст, ки бидонед, ки Excel VBA дорои маҷмӯи ғании функсияҳои пешакӣ сохташуда мебошад, ки шумо метавонед ҳангоми навиштани рамзи худ истифода баред.

Рӯйхати ин функсияҳоро дар муҳаррири VBA дидан мумкин аст:

  • Китоби кории Excel-ро кушоед ва муҳаррири VBA-ро оғоз кунед (барои ин кор клик кунед Alt + F11) ва баъд пахш кунед F2.
  • Аз рӯйхати афтанда дар тарафи чапи болои экран китобхонаеро интихоб кунед VBA.
  • Рӯйхати синфҳо ва функсияҳои дарунсохт VBA пайдо мешавад. Номи функсияро клик кунед, то тавсифи мухтасари онро дар поёни равзана нишон диҳед. пахш кардан F1 саҳифаи кӯмаки онлайнро барои ин хусусият мекушояд.

Илова бар ин, рӯйхати пурраи функсияҳои дарунсохташудаи VBA-ро бо мисолҳо дар Маркази таҳиягари Visual Basic пайдо кардан мумкин аст.

Тартиби фармоишии "Функсия" ва "Зер" дар VBA

Дар Excel Visual Basic, маҷмӯи фармонҳое, ки вазифаи мушаххасро иҷро мекунанд, дар процедура ҷойгир карда шудаанд. функсия (Функсия) ё Sub (Зерпрограмма). Фарқи асосии байни расмиёт функсия и Sub ин тартиб аст функсия баргардонидани натиҷа, тартиб Sub — не.

Аз ин рӯ, агар ба шумо лозим аст, ки амалҳоро иҷро кунед ва ягон натиҷа гиред (масалан, якчанд рақамҳоро ҷамъ кунед), пас одатан тартиб истифода мешавад. функсия, ва барои ба таври оддӣ иҷро кардани баъзе амалҳо (масалан, тағир додани формати гурӯҳи ячейкаҳо), шумо бояд тартибро интихоб кунед. Sub.

Аргентина

Бо истифода аз аргументҳо маълумотҳои гуногунро ба расмиёти VBA интиқол додан мумкин аст. Рӯйхати аргументҳо ҳангоми эълони процедура муайян карда мешавад. Масалан, тартиби Sub дар VBA адади додашударо (Бутун) ба ҳар як чашмаки диапазони интихобшуда илова мекунад. Шумо метавонед ин рақамро ба расмият бо истифода аз аргумент интиқол диҳед, ба монанди:

Sub AddToCells(i As Integer) ... End Sub

Дар хотир доред, ки дорои далелҳо барои расмиёти функсия и Sub дар VBA ихтиёрӣ аст. Баъзе равандҳо далелҳоро талаб намекунанд.

Далелҳои ихтиёрӣ

Тартиби VBA метавонанд далелҳои ихтиёрӣ дошта бошанд. Ин далелҳое мебошанд, ки корбар метавонад муайян кунад, агар онҳо бихоҳанд, ва агар онҳо партофта шаванд, тартиб барои онҳо арзишҳои пешфарзро истифода мебарад.

Бозгашт ба мисоли қаблӣ, барои ихтиёрӣ кардани як аргументи бутун ба функсия, он чунин эълон карда мешавад:

Sub AddToCells(Ихтиёрӣ i ҳамчун бутун = 0)

Дар ин ҳолат, аргументи бутун i пешфарз 0 хоҳад буд.

Дар раванд якчанд далелҳои ихтиёрӣ вуҷуд дошта метавонанд, ки ҳамаи онҳо дар охири рӯйхати аргументҳо номбар шудаанд.

Гузаронидани далелҳо аз рӯи арзиш ва истинод

Аргументҳоро дар VBA бо ду роҳ ба расмиёт интиқол додан мумкин аст:

  • ByVal – гузаронидани аргумент аз рӯи арзиш. Ин маънои онро дорад, ки танҳо арзиш (яъне нусхаи аргумент) ба процедура интиқол дода мешавад ва аз ин рӯ, ҳама гуна тағйироте, ки ба аргумент дар дохили процедура ворид карда шудааст, ҳангоми баромадан аз процедура гум мешавад.
  • By Ref – бо истинод баён кардани далел. Яъне суроғаи воқеии ҷойгиршавии аргумент дар хотира ба процедура интиқол дода мешавад. Ҳама гуна тағироте, ки ба аргумент дар дохили раванд ворид карда шудааст, ҳангоми баромадан аз раванд захира карда мешавад.

Истифодаи калимаҳои калидӣ ByVal or By Ref дар эъломияи процедура, шумо метавонед муайян кунед, ки чӣ гуна аргумент ба процедура интиқол дода мешавад. Ин дар мисолҳои зерин нишон дода шудааст:

Sub AddToCells(ByVal i As Integer) ... End Sub
Дар ин ҳолат, аргументи бутун i аз рӯи арзиш гузашт. Пас аз тарк кардани тартиб Sub ҳама бо i тағиротҳо гум мешаванд.
Sub AddToCells(ByRef i As Integer) ... End Sub
Дар ин ҳолат, аргументи бутун i бо истинод гузашт. Пас аз тарк кардани тартиб Sub ҳама бо i Тағйирот дар тағирёбандае, ки ба расмият гузаронида шудааст, нигоҳ дошта мешаванд Sub.

Дар хотир доред, ки далелҳо дар VBA бо нобаёнӣ бо истинод интиқол дода мешаванд. Ба ибораи дигар, агар калимаҳои калидӣ истифода нашаванд ByVal or By Ref, он гоҳ далел аз рӯи истинод мегузарад.

Пеш аз гузаштан ба расмиёти функсия и Sub ба таври муфассал, ба назар гирифтани хусусиятҳо ва фарқиятҳои байни ин ду намуди расмиёт муфид хоҳад буд. Дар зер муҳокимаҳои мухтасари расмиёти VBA оварда шудаанд функсия и Sub ва мисолхои оддй нишон дода шудаанд.

Тартиби VBA «Функсия»

Муҳаррири VBA тартибро эътироф мекунад функсиявақте ки он бо як гурӯҳи фармонҳое дучор мешавад, ки дар байни изҳороти зерини кушода ва пӯшида ҷойгиранд:

Функсия ... Функсияи хотимавӣ

Тавре ки дар боло зикр гардид, тартиби функсия дар VBA (бар хилофи Sub) арзишро бармегардонад. Барои баргардонидани арзишҳо қоидаҳои зерин татбиқ мешаванд:

  • Навъи маълумоти арзиши баргардонидан бояд дар сарлавҳаи расмиёт эълон карда шавад функсия.
  • Тағйирёбанда, ки арзиши баргардониданиро дар бар мегирад, бояд ҳамон тавре номгузорӣ карда шавад функсия. Ин тағирёбанда лозим нест, ки алоҳида эълон карда шавад, зеро он ҳамеша ҳамчун қисми ҷудонашавандаи процедура мавҷуд аст. функсия.

Ин дар мисоли зерин хуб нишон дода шудааст.

Мисол Функсияи VBA: Иҷрои амалиёти математикӣ дар 3 адад

Дар зер намунаи рамзи тартиби VBA оварда шудааст функсия, ки се аргументи навъи онро мегирад Дучандон (рақамҳои шинокунандаи нуқтаҳои дақиқи дукарата). Дар натиҷа, тартиб шумораи дигари намудро бармегардонад Дучандонба ҷамъи ду далели аввал бо тарси далели сеюм баробар аст:

Функсия SumMinus(dNum1 ҳамчун дучандон, dNum2 ҳамчун дучандон, dNum3 ҳамчун дучандон) ҳамчун дукарата ҷамъМинус = dNum1 + dNum2 - dNum3 Функсияи ниҳоӣ

Ин тартиби хеле соддаи VBA функсия нишон медиҳад, ки чӣ гуна маълумот тавассути аргументҳо ба тартиби интиқол дода мешавад. Шумо мебинед, ки навъи маълумоте, ки бо тартиби баргардонида шудааст, ҳамчун муайян карда мешавад Дучандон (суханҳо мегӯянд Ҳамчун дукарата пас аз рӯйхати далелҳо). Ин мисол инчунин нишон медиҳад, ки чӣ тавр натиҷаи тартиб функсия дар як тағирёбанда бо ҳамон ном бо номи процедура нигоҳ дошта мешавад.

Даъват кардани тартиби VBA "Функсия"

Агар тартиби дар боло оддӣ функсия ба модул дар муҳаррири Visual Basic ворид карда шудааст, онро метавон аз дигар расмиёти VBA даъват кард ё дар варақаи корӣ дар китоби кории Excel истифода бурд.

Раванди VBA "Функсия" -ро аз тартиби дигар даъват кунед

тартиб функсия мумкин аст аз тартиби дигари VBA тавассути таъини ин раванд ба тағирёбанда даъват карда шавад. Мисоли зерин занг ба расмиятро нишон медиҳад Суминус, ки дар боло муайян карда шуд.

Sub main() Ҳаҷми кам ҳамчун Ҷамъи дукарата = ҶамъоварӣМинус(5, 4, 3) Охирин Зер

Аз варақаи корӣ ба расмиёти VBA "Функсия" занг занед

Тартиби VBA функсия метавонад аз варақаи кории Excel ҳамон тавре ки ҳама гуна функсияи дарунсохташудаи Excel даъват карда шавад. Аз ин рӯ, тартиби дар мисоли қаблӣ сохташуда функсия - Суминус бо ворид кардани ифодаи зерин ба ячейкаи варақи корӣ даъват кардан мумкин аст:

=SumMinus(10, 5, 2)

Тартиби VBA "Sub"

Муҳаррири VBA мефаҳмад, ки дар пеши он тартиби мавҷуд аст Subвақте ки он бо як гурӯҳи фармонҳое дучор мешавад, ки дар байни изҳороти зерини кушода ва пӯшида ҷойгиранд:

Зер ... Охири зер

Тартиби VBA "Sub": Мисол 1. Мутобиқсозии марказ ва тағир додани андозаи ҳарф дар диапазони интихобшудаи чашмакҳо

Намунаи тартиби оддии VBA-ро дида бароед Sub, ки вазифаи он тағир додани формати диапазони интихобшудаи чашмакҳо мебошад. Чашмакҳо дар марказ ҷойгир шудаанд (ҳам амудӣ ва ҳам уфуқӣ) ва андозаи шрифт ба андозаи аз ҷониби корбар муайяншуда тағир дода мешавад:

Зерформати_марказшуда_ва_андоза(iFontSize ихтиёрӣ ҳамчун бутун = 10) Selection.HorizontalAlignment = Интихоби xlCenter.VerticalAlignment = Интихоби xlCenter.Font.Size = iFontSize End Sub

Ин тартиб Sub амалҳоро иҷро мекунад, аммо натиҷа намедиҳад.

Ин мисол инчунин далели ихтиёриро истифода мебарад Андозаи шрифт. Агар далел Андозаи шрифт ба расмият дароварда нашудааст Sub, пас арзиши пешфарз он 10 аст. Аммо, агар далел Андозаи шрифт ба тартиб гузашт Sub, пас диапазони интихобшудаи чашмакҳо ба андозаи шрифти муайянкардаи корбар муқаррар карда мешавад.

Тартиби зерсохтори VBA: Намунаи 2: Ба марказ мутобиқсозӣ ва шрифти ғафс дар диапазони интихобшудаи чашмакҳо

Тартиби зерин ба тартиби дар боло баррасӣшуда монанд аст, аммо ин дафъа ба ҷои тағир додани андоза, он услуби шрифти ғафсро ба диапазони интихобшудаи чашмакҳо татбиқ мекунад. Ин як тартиби намунавӣ аст Sub, ки ҳеҷ далеле надорад:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = Selection xlCenter.VerticalAlignment = Selection xlCenter.Font.Bold = True End Sub

Даъват кардани тартиби "Sub" дар Excel VBA

Раванди VBA "Sub" -ро аз тартиби дигар даъват кунед

Барои занг задан ба тартиби VBA Sub аз тартиби дигари VBA, шумо бояд калимаи калидиро нависед тамос, номи тартиб Sub ва минбаъд дар қавсҳо далелҳои тартиб дода мешаванд. Ин дар мисоли зер нишон дода шудааст:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Агар тартиби Формат_марказшуда_ва_андозашуда зиёда аз як аргумент дорад, онҳо бояд бо вергул ҷудо карда шаванд. Монанди ин:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Аз варақаи корӣ ба расмиёти VBA "Sub" занг занед

тартиб Sub бевосита ба ячейкаи варақи Excel дохил кардан мумкин нест, чуноне ки бо тартиби анҷом дода мешавад функсиязеро тартиби Sub арзишро барнамегардонад. Бо вуҷуди ин, тартиби Sub, ки ягон далел надоранд ва ҳамчунон эълон карда мешаванд умумӣ (чунон ки дар зер нишон дода шудааст) барои истифодабарандагони варақаи корӣ дастрас хоҳад буд. Ҳамин тариқ, агар расмиёти оддӣ дар боло баррасӣ Sub воридшуда ба модул дар Editor Visual Basic, тартиби Формат_марказшуда_ва_болд барои истифода дар варақаи кории Excel дастрас хоҳад буд, ва тартиби Формат_марказшуда_ва_андозашуда - дастрас нахоҳад шуд, зеро он далелҳо дорад.

Ин аст роҳи осони иҷро кардани (ё иҷро кардани) раванд Sub, аз варақаи корӣ дастрас аст:

  • матбуот Alt + F8 (тугмаро пахш кунед Alt ва ҳангоми нигоҳ доштани он тугмаро пахш кунед F8).
  • Дар рӯйхати макросҳои пайдошуда макросеро, ки мехоҳед иҷро кунед, интихоб кунед.
  • матбуот давидан (давидан)

Барои анҷом додани расмиёти Sub зуд ва осон, шумо метавонед ба он миёнабури клавиатура таъин кунед. Барои ин:

  • матбуот Alt + F8.
  • Дар рӯйхати макросҳои пайдошуда макросеро интихоб кунед, ки мехоҳед ба он миёнабури клавиатура таъин кунед.
  • матбуот параметрҳо (Интихобҳо) ва дар қуттии муколамае, ки пайдо мешавад, миёнабури клавиатураро ворид кунед.
  • матбуот OK ва муколамаро пӯшед Макро (Макро).

Диққат: Ҳангоми таъин кардани миёнабури клавиатура ба макрос, боварӣ ҳосил кунед, ки он ҳамчун стандарт дар Excel истифода намешавад (масалан, Ctrl + C). Агар шумо миёнабури мавҷудаи клавиатураро интихоб кунед, он ба макрос аз нав таъин карда мешавад ва дар натиҷа корбар метавонад тасодуфан макросро оғоз кунад.

Доираи тартиби VBA

Қисми 2-и ин дарсӣ доираи тағирёбандаҳо ва доимӣ ва нақши калимаҳои калидиро баррасӣ кард. умумӣ и бахши хусусї. Ин калимаҳои калидӣ инчунин метавонанд бо расмиёти VBA истифода шаванд:

Ҷамъиятии Sub AddToCells(i As Integer) ... End Sub
Агар пеш аз эъломияи тартиб калимаи калидӣ бошад умумӣ, пас тартиб барои ҳамаи модулҳои ин лоиҳаи VBA дастрас хоҳад буд.
Private Sub AddToCells(i As Integer) ... End Sub
Агар пеш аз эъломияи тартиб калимаи калидӣ бошад бахши хусусї, пас ин тартиб танҳо барои модули ҷорӣ дастрас хоҳад буд. Онро ҳангоми дар ягон модули дигар ё аз китоби кории Excel даъват кардан мумкин нест.

Дар хотир доред, ки агар пеш аз эълони тартиби VBA функсия or Sub калимаи калидӣ ворид карда нашудааст, хосияти пешфарз барои тартиби муқаррар карда мешавад умумӣ (яъне он дар ҳама ҷо дар ин лоиҳаи VBA дастрас хоҳад буд). Ин дар муқоиса бо эъломияҳои тағирёбанда аст, ки ба таври нобаёнӣ ҳастанд бахши хусусї.

Хуруҷи барвақт аз расмиёти VBA "Function" ва "Sub"

Агар ба шумо лозим ояд, ки иҷрои расмиёти VBA-ро қатъ кунед функсия or Sub, бидуни мунтазири анҷоми табиии он, пас барои ин операторҳо мавҷуданд Функсияи баромадан и Баромади зер. Истифодаи ин операторҳо дар зер бо истифода аз тартиби оддӣ ҳамчун намуна нишон дода шудааст. функсияA, ки интизори гирифтани далели мусбӣ барои иҷрои амалиёти минбаъда. Агар ба расмият арзиши ғайримусбӣ интиқол дода шавад, пас ҳеҷ гуна амалиёти дигар иҷро карда намешавад, бинобар ин ба корбар бояд паёми хато нишон дода шавад ва тартиб фавран хориҷ шавад:

Функсияи VAT_Amount(sVAT_Rate ҳамчун ягона) ҳамчун ягона VAT_Amount = 0 Агар sVAT_Rate <= 0 Пас MsgBox "Интизории арзиши мусбии sVAT_Rate, вале гирифта шуд" & sVAT_Rate Хуруҷ Функсияи ба итмом мерасад, агар ... анҷом

Лутфан қайд кунед, ки пеш аз анҷом додани тартиб функсия - VAT_Маблағи, функсияи VBA дарунсохт ба код ворид карда шудааст MsgBox, ки поп-апи огоҳиро ба корбар нишон медиҳад.

Дин ва мазҳаб