Mga Pamamaraan ng "Function" at "Sub" sa VBA

Built-in na VBA Function

Bago ka magsimulang gumawa ng sarili mong mga function ng VBA, magandang malaman na ang Excel VBA ay may maraming koleksyon ng mga prebuilt built-in na function na magagamit mo habang isinusulat ang iyong code.

Ang isang listahan ng mga function na ito ay maaaring matingnan sa VBA editor:

  • Magbukas ng Excel workbook at ilunsad ang VBA editor (i-click para gawin ito Alt + F11), at pagkatapos ay pindutin F2.
  • Pumili ng library mula sa dropdown na listahan sa kaliwang tuktok ng screen VBA.
  • May lalabas na listahan ng mga built-in na klase at function ng VBA. Mag-click sa pangalan ng function upang ipakita ang maikling paglalarawan nito sa ibaba ng window. pagpindot F1 ay magbubukas ng online na pahina ng tulong para sa tampok na iyon.

Bilang karagdagan, ang kumpletong listahan ng mga built-in na function ng VBA na may mga halimbawa ay makikita sa Visual Basic Developer Center.

Mga custom na pamamaraan na "Function" at "Sub" sa VBA

Sa Excel Visual Basic, isang set ng mga command na nagsasagawa ng isang partikular na gawain ay inilalagay sa isang pamamaraan. tungkulin (Function) o sub (Subroutine). Ang pangunahing pagkakaiba sa pagitan ng mga pamamaraan tungkulin и sub ganun ba ang procedure tungkulin nagbabalik ng resulta, pamamaraan sub – hindi.

Samakatuwid, kung kailangan mong magsagawa ng mga aksyon at makakuha ng ilang mga resulta (halimbawa, sum ng ilang mga numero), kung gayon ang pamamaraan ay karaniwang ginagamit tungkulin, at upang maisagawa lamang ang ilang mga aksyon (halimbawa, baguhin ang pag-format ng isang pangkat ng mga cell), kailangan mong piliin ang pamamaraan sub.

Mga argumento

Maaaring maipasa ang iba't ibang data sa mga pamamaraan ng VBA gamit ang mga argumento. Ang listahan ng argumento ay tinukoy kapag nagdedeklara ng isang pamamaraan. Halimbawa, ang pamamaraan sub sa VBA ay nagdaragdag ng ibinigay na integer (Integer) sa bawat cell sa napiling hanay. Maaari mong ipasa ang numerong ito sa pamamaraan gamit ang isang argumento, tulad nito:

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

Tandaan na ang pagkakaroon ng mga argumento para sa mga pamamaraan tungkulin и sub sa VBA ay opsyonal. Ang ilang mga pamamaraan ay hindi nangangailangan ng mga argumento.

Mga Opsyonal na Argumento

Ang mga pamamaraan ng VBA ay maaaring magkaroon ng mga opsyonal na argumento. Ito ay mga argumento na maaaring tukuyin ng user kung gusto nila, at kung aalisin ang mga ito, ginagamit ng pamamaraan ang mga default na halaga para sa kanila.

Ang pagbabalik sa nakaraang halimbawa, upang gumawa ng isang integer argument sa isang function na opsyonal, ito ay idedeklara tulad nito:

Sub AddToCells(Opsyonal i Bilang Integer = 0)

Sa kasong ito, ang integer argument i ang default ay magiging 0.

Maaaring may ilang opsyonal na argumento sa isang pamamaraan, lahat ng ito ay nakalista sa dulo ng listahan ng argumento.

Pagpasa ng mga argumento sa pamamagitan ng halaga at sa pamamagitan ng sanggunian

Ang mga argumento sa VBA ay maaaring ipasa sa isang pamamaraan sa dalawang paraan:

  • NiVal – pagpasa ng argumento ayon sa halaga. Nangangahulugan ito na ang halaga lamang (iyon ay, isang kopya ng argumento) ang ipinapasa sa pamamaraan, at samakatuwid ang anumang mga pagbabagong ginawa sa argumento sa loob ng pamamaraan ay mawawala kapag lumabas ang pamamaraan.
  • NiRef – pagpasa ng argumento sa pamamagitan ng sanggunian. Iyon ay, ang aktwal na address ng lokasyon ng argumento sa memorya ay ipinasa sa pamamaraan. Ang anumang mga pagbabagong ginawa sa isang argumento sa loob ng pamamaraan ay mase-save kapag lumabas ang pamamaraan.

Paggamit ng mga keyword NiVal or NiRef sa deklarasyon ng pamamaraan, maaari mong tukuyin kung paano ipinasa ang argumento sa pamamaraan. Ito ay ipinapakita sa mga halimbawa sa ibaba:

Sub AddToCells(ByVal i As Integer) ... End Sub
Sa kasong ito, ang integer argument i naipasa sa halaga. Pagkatapos umalis sa pamamaraan sub lahat ginawa gamit i mawawala ang mga pagbabago.
Sub AddToCells(ByRef i As Integer) ... End Sub
Sa kasong ito, ang integer argument i ipinasa sa pamamagitan ng sanggunian. Pagkatapos umalis sa pamamaraan sub lahat ginawa gamit i ang mga pagbabago ay maiimbak sa variable na naipasa sa procedure sub.

Tandaan na ang mga argumento sa VBA ay ipinasa sa pamamagitan ng sanggunian bilang default. Sa madaling salita, kung hindi ginagamit ang mga keyword NiVal or NiRef, pagkatapos ay ipapasa ang argumento sa pamamagitan ng sanggunian.

Bago magpatuloy sa mga pamamaraan tungkulin и sub nang mas detalyado, magiging kapaki-pakinabang na tingnan muli ang mga tampok at pagkakaiba sa pagitan ng dalawang uri ng pamamaraang ito. Ang mga sumusunod ay maikling talakayan ng mga pamamaraan ng VBA tungkulin и sub at mga simpleng halimbawa ay ipinapakita.

Pamamaraan ng VBA "Function"

Kinikilala ng editor ng VBA ang pamamaraan tungkulinkapag nakatagpo ito ng isang pangkat ng mga utos na nakapaloob sa pagitan ng mga sumusunod na pambungad at pangwakas na mga pahayag:

Function ... End Function

Tulad ng nabanggit kanina, ang pamamaraan tungkulin sa VBA (kumpara sa sub) ay nagbabalik ng isang halaga. Nalalapat ang mga sumusunod na panuntunan sa pagbabalik ng mga halaga:

  • Dapat ideklara ang uri ng data ng return value sa header ng procedure tungkulin.
  • Ang variable na naglalaman ng return value ay dapat na pinangalanang pareho sa procedure tungkulin. Ang variable na ito ay hindi kailangang ideklara nang hiwalay, dahil ito ay palaging umiiral bilang isang mahalagang bahagi ng pamamaraan. tungkulin.

Ito ay mahusay na inilalarawan sa sumusunod na halimbawa.

Halimbawa ng Function ng VBA: Pagsasagawa ng Mathematical Operation sa 3 Numero

Ang sumusunod ay isang halimbawa ng isang VBA procedure code tungkulin, na tumatagal ng tatlong argumento ng uri Double (double-precision na mga floating-point na numero). Bilang resulta, ang pamamaraan ay nagbabalik ng isa pang bilang ng uri Doublekatumbas ng kabuuan ng unang dalawang argumento minus ang ikatlong argumento:

Function SumMinus(dNum1 Bilang Double, dNum2 Bilang Double, dNum3 Bilang Double) Bilang Double SumMinus = dNum1 + dNum2 - dNum3 End Function

Ang napakasimpleng pamamaraan ng VBA na ito tungkulin inilalarawan kung paano ipinapasa ang data sa isang pamamaraan sa pamamagitan ng mga argumento. Makikita mo na ang uri ng data na ibinalik ng pamamaraan ay tinukoy bilang Double (sabi ng mga salita Bilang Doble pagkatapos ng listahan ng mga argumento). Ipinapakita rin ng halimbawang ito kung paano ang resulta ng pamamaraan tungkulin naka-imbak sa isang variable na may parehong pangalan bilang pangalan ng pamamaraan.

Ang pagtawag sa pamamaraan ng VBA na "Function"

Kung ang itaas ay simpleng pamamaraan tungkulin ipinasok sa isang module sa Visual Basic editor, maaari itong tawagan mula sa iba pang mga pamamaraan ng VBA o gamitin sa isang worksheet sa isang Excel workbook.

Tawagan ang VBA procedure na "Function" mula sa ibang procedure

Pamamaraan tungkulin maaaring tawagan mula sa isa pang pamamaraan ng VBA sa pamamagitan lamang ng pagtatalaga ng pamamaraang iyon sa isang variable. Ang sumusunod na halimbawa ay nagpapakita ng isang tawag sa isang pamamaraan Summinus, na tinukoy sa itaas.

Sub main() Dim total bilang Double total = SumMinus(5, 4, 3) End Sub

Tawagan ang VBA procedure na "Function" mula sa isang worksheet

Pamamaraan ng VBA tungkulin ay maaaring tawagan mula sa isang Excel worksheet sa parehong paraan tulad ng anumang iba pang built-in na Excel function. Samakatuwid, ang pamamaraan na nilikha sa nakaraang halimbawa tungkulin - Summinus maaaring tawagan sa pamamagitan ng pagpasok ng sumusunod na expression sa isang worksheet cell:

=SumMinus(10, 5, 2)

Pamamaraan ng VBA "Sub"

Naiintindihan ng editor ng VBA na mayroong isang pamamaraan sa harap nito subkapag nakatagpo ito ng isang pangkat ng mga utos na nakapaloob sa pagitan ng mga sumusunod na pambungad at pangwakas na mga pahayag:

Sub ... End Sub

Pamamaraan ng VBA "Sub": Halimbawa 1. Pag-align sa gitna at pagbabago ng laki ng font sa isang napiling hanay ng mga cell

Isaalang-alang ang isang halimbawa ng isang simpleng pamamaraan ng VBA sub, na ang gawain ay baguhin ang pag-format ng napiling hanay ng mga cell. Ang mga cell ay nakasentro (parehong patayo at pahalang) at ang laki ng font ay binago sa tinukoy ng gumagamit:

Sub Format_Centered_And_Sized(Opsyonal na iFontSize Bilang Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Ang pamamaraang ito sub nagsasagawa ng mga aksyon ngunit hindi nagbabalik ng resulta.

Gumagamit din ang halimbawang ito ng Opsyonal na argumento Laki ng Font. Kung ang argumento Laki ng Font hindi naipasa sa procedure sub, kung gayon ang default na halaga nito ay 10. Gayunpaman, kung ang argument Laki ng Font naipasa sa procedure sub, pagkatapos ay itatakda ang napiling hanay ng mga cell sa laki ng font na tinukoy ng user.

VBA Sub Procedure: Halimbawa 2: Center Align at Bold Font sa Napiling Saklaw ng Mga Cell

Ang sumusunod na pamamaraan ay katulad ng kakatalakay lang, ngunit sa pagkakataong ito, sa halip na baguhin ang laki, naglalapat ito ng naka-bold na istilo ng font sa napiling hanay ng mga cell. Ito ay isang halimbawang pamamaraan sub, na hindi kumukuha ng mga argumento:

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

Pagtawag sa "Sub" na Pamamaraan sa Excel VBA

Tawagan ang VBA procedure na “Sub” mula sa ibang procedure

Upang tumawag ng VBA procedure sub mula sa isa pang pamamaraan ng VBA, kailangan mong isulat ang keyword tawag, pangalan ng pamamaraan sub at higit pa sa panaklong ay ang mga argumento ng pamamaraan. Ito ay ipinapakita sa halimbawa sa ibaba:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Kung ang pamamaraan Format_Centered_And_Sized ay may higit sa isang argumento, dapat silang paghiwalayin ng mga kuwit. Ganito:

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

Tawagan ang VBA procedure na “Sub” mula sa worksheet

Pamamaraan sub ay hindi maaaring direktang ipasok sa isang Excel sheet cell, tulad ng maaaring gawin sa isang pamamaraan tungkulinkasi yung procedure sub hindi nagbabalik ng halaga. Gayunpaman, ang mga pamamaraan sub, na walang mga argumento at idineklara bilang Publiko (tulad ng ipinapakita sa ibaba) ay magiging available sa mga gumagamit ng worksheet. Kaya, kung ang mga simpleng pamamaraan na tinalakay sa itaas sub ipinasok sa isang module sa Visual Basic Editor, ang pamamaraan Format_Centered_And_Bold ay magagamit para sa paggamit sa isang Excel worksheet, at ang pamamaraan Format_Centered_And_Sized – hindi magiging available dahil mayroon itong mga argumento.

Narito ang isang madaling paraan upang magpatakbo (o magsagawa) ng isang pamamaraan sub, naa-access mula sa worksheet:

  • pindutin Alt + F8 (pindutin ang key Alt at habang pinipigilan ito, pindutin ang key F8).
  • Sa listahan ng mga macro na lalabas, piliin ang gusto mong patakbuhin.
  • pindutin Tumakbo (tumakbo)

Upang magsagawa ng isang pamamaraan sub mabilis at madali, maaari kang magtalaga ng keyboard shortcut dito. Para dito:

  • pindutin Alt + F8.
  • Sa listahan ng mga macro na lalabas, piliin ang isa kung saan mo gustong magtalaga ng keyboard shortcut.
  • pindutin parameter (Mga Opsyon) at sa lalabas na dialog box, ilagay ang keyboard shortcut.
  • pindutin OK at isara ang dialog Macro (Macro).

Attention: Kapag nagtatalaga ng keyboard shortcut sa isang macro, tiyaking hindi ito ginagamit bilang pamantayan sa Excel (halimbawa, Ctrl + C). Kung pipili ka ng umiiral nang keyboard shortcut, ito ay itatalaga muli sa macro, at bilang resulta, maaaring simulan ng user ang macro nang hindi sinasadya.

Saklaw ng Pamamaraan ng VBA

Ang Bahagi 2 ng tutorial na ito ay tinalakay ang saklaw ng mga variable at constant at ang papel ng mga keyword. Publiko и pribado. Ang mga keyword na ito ay maaari ding gamitin sa mga pamamaraan ng VBA:

Pampublikong Sub AddToCells(i As Integer) ... End Sub
Kung ang deklarasyon ng pamamaraan ay nauunahan ng keyword Publiko, pagkatapos ay magiging available ang pamamaraan sa lahat ng mga module sa proyektong VBA na iyon.
Pribadong Sub AddToCells(i As Integer) ... End Sub
Kung ang deklarasyon ng pamamaraan ay nauunahan ng keyword pribado, kung gayon ang pamamaraang ito ay magagamit lamang para sa kasalukuyang module. Hindi ito matatawag habang nasa anumang iba pang module o mula sa isang Excel workbook.

Tandaan na kung bago magdeklara ng VBA procedure tungkulin or sub keyword ay hindi ipinasok, ang default na ari-arian ay nakatakda para sa pamamaraan Publiko (iyon ay, ito ay magagamit sa lahat ng dako sa proyektong ito ng VBA). Kabaligtaran ito sa mga variable na deklarasyon, na bilang default ay pribado.

Maagang paglabas mula sa mga pamamaraan ng VBA "Function" at "Sub"

Kung kailangan mong wakasan ang pagpapatupad ng isang pamamaraan ng VBA tungkulin or sub, nang hindi naghihintay para sa natural na pagtatapos nito, pagkatapos ay para dito mayroong mga operator Lumabas sa Function и Exit Sub. Ang paggamit ng mga operator na ito ay ipinapakita sa ibaba gamit ang isang simpleng pamamaraan bilang isang halimbawa. tungkulinA na inaasahan na makatanggap ng isang positibong argumento upang magsagawa ng karagdagang mga operasyon. Kung ang isang hindi positibong halaga ay ipinasa sa pamamaraan, pagkatapos ay walang karagdagang mga operasyon na maaaring isagawa, kaya ang user ay dapat magpakita ng isang mensahe ng error at ang pamamaraan ay dapat na lumabas kaagad:

Function VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Inaasahang Positive value ng sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function

Mangyaring tandaan na bago kumpletuhin ang pamamaraan tungkulin - VAT_Halaga, ang isang built-in na VBA function ay ipinasok sa code MsgBox, na nagpapakita ng popup ng babala sa user.

Mag-iwan ng Sagot