"Function" ug "Sub" nga mga Pamaagi sa VBA

Gitukod-sa VBA Functions

Sa dili ka pa magsugod sa paghimo sa imong kaugalingon nga mga gimbuhaton sa VBA, maayo nga mahibal-an nga ang Excel VBA adunay daghang koleksyon sa mga prebuilt built-in nga function nga magamit nimo samtang nagsulat sa imong code.

Ang usa ka lista niini nga mga gimbuhaton mahimong makita sa VBA editor:

  • Ablihi ang usa ka workbook sa Excel ug ilunsad ang VBA editor (i-klik aron mahimo kini Alt + F11), ug dayon i-press F2.
  • Pagpili og librarya gikan sa dropdown list sa ibabaw nga wala sa screen VBA.
  • Usa ka lista sa mga built-in nga VBA nga mga klase ug mga gimbuhaton ang makita. Pag-klik sa ngalan sa function aron ipakita ang mubo nga paghulagway niini sa ilawom sa bintana. pagpugos F1 magbukas sa online nga panid sa tabang alang sa kana nga bahin.

Dugang pa, ang usa ka kompleto nga lista sa mga built-in nga VBA function nga adunay mga pananglitan makita sa Visual Basic Developer Center.

Custom nga mga pamaagi "Function" ug "Sub" sa VBA

Sa Excel Visual Basic, usa ka hugpong sa mga sugo nga naghimo sa usa ka piho nga buluhaton gibutang sa usa ka pamaagi. function (Function) o sub (Subroutine). Ang nag-unang kalainan tali sa mga pamaagi function и sub mao na ang procedure function mibalik resulta, pamaagi sub – dili.

Busa, kung kinahanglan nimo nga buhaton ang mga aksyon ug makakuha usa ka sangputanan (pananglitan, daghang mga numero), nan ang pamaagi kasagarang gigamit function, ug aron mahimo ra ang pipila nga mga aksyon (pananglitan, usba ang pag-format sa usa ka grupo sa mga cell), kinahanglan nimo nga pilion ang pamaagi sub.

Mga argumento

Ang lainlaing mga datos mahimong ipasa sa mga pamaagi sa VBA gamit ang mga argumento. Ang lista sa argumento gipiho kung nagpahayag sa usa ka pamaagi. Pananglitan, ang pamaagi sub sa VBA nagdugang sa gihatag nga integer (Integer) sa matag cell sa pinili nga range. Mahimo nimong ipasa kini nga numero sa pamaagi gamit ang usa ka argumento, sama niini:

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

Hinumdomi nga adunay mga argumento alang sa mga pamaagi function и sub sa VBA kay opsyonal. Ang ubang mga pamaagi wala magkinahanglan og mga argumento.

Opsyonal nga mga argumento

Ang mga pamaagi sa VBA mahimong adunay opsyonal nga mga argumento. Kini ang mga argumento nga mahimong ipiho sa user kung gusto nila, ug kung wala sila, ang pamaagi naggamit sa mga default nga kantidad alang kanila.

Pagbalik sa miaging pananglitan, aron makahimo usa ka integer nga argumento sa usa ka opsyonal nga function, kini ipahayag nga sama niini:

Sub AddToCells(Opsyonal i Ingong Integer = 0)

Sa kini nga kaso, ang integer nga argumento i ang default mahimong 0.

Mahimong adunay daghang mga opsyonal nga argumento sa usa ka pamaagi, nga ang tanan gilista sa katapusan sa listahan sa argumento.

Pagpasa sa mga argumento pinaagi sa bili ug sa pakisayran

Ang mga argumento sa VBA mahimong ipasa sa usa ka pamaagi sa duha ka paagi:

  • Pinaagi sa – pagpasa sa usa ka argumento pinaagi sa bili. Kini nagpasabot nga ang bili lamang (nga mao, usa ka kopya sa argumento) ang gipasa ngadto sa pamaagi, ug busa ang bisan unsang mga kausaban nga gihimo sa argumento sulod sa pamaagi mawala kung ang pamaagi mogawas.
  • NiRef – pagpasa sa usa ka argumento pinaagi sa pakisayran. Sa ato pa, ang aktuwal nga adres sa lokasyon sa argumento sa memorya gipasa sa pamaagi. Ang bisan unsang mga pagbag-o nga gihimo sa usa ka argumento sa sulod sa pamaagi maluwas kung ang pamaagi mogawas.

Paggamit sa mga keyword Pinaagi sa or NiRef sa deklarasyon sa pamaagi, mahimo nimong ipiho kung giunsa ang argumento gipasa sa pamaagi. Gipakita kini sa mga pananglitan sa ubos:

Sub AddToCells(ByVal i As Integer) ... End Sub
Sa kini nga kaso, ang integer nga argumento i gipasa sa bili. Human sa pagbiya sa pamaagi sub ang tanan gihimo uban sa i ang mga pagbag-o mawala.
Sub AddToCells(ByRef i As Integer) ... Katapusan nga Sub
Sa kini nga kaso, ang integer nga argumento i gipasa pinaagi sa pakisayran. Human sa pagbiya sa pamaagi sub ang tanan gihimo uban sa i ang mga pagbag-o itago sa variable nga gipasa sa pamaagi sub.

Hinumdomi nga ang mga argumento sa VBA gipasa pinaagi sa reference pinaagi sa default. Sa laing pagkasulti, kung wala gigamit ang mga keyword Pinaagi sa or NiRef, unya ang argumento ipasa pinaagi sa pakisayran.

Sa wala pa ipadayon ang mga pamaagi function и sub sa mas detalyado, kini mahimong mapuslanon sa pagkuha sa lain nga pagtan-aw sa mga bahin ug mga kalainan tali niining duha ka matang sa mga pamaagi. Ang mosunod mao ang mubu nga mga diskusyon sa mga pamaagi sa VBA function и sub ug yanong mga pananglitan gipakita.

Ang pamaagi sa VBA "Function"

Giila sa editor sa VBA ang pamaagi functionsa diha nga kini makasugat og usa ka grupo sa mga sugo nga gilakip sa taliwala sa mosunod nga pagbukas ug panapos nga mga pahayag:

Function ... Katapusan nga Function

Sama sa gihisgutan sa sayo pa, ang pamaagi function sa VBA (sukwahi sa sub) mibalik ug bili. Ang mosunod nga mga lagda magamit sa pagbalik sa mga bili:

  • Ang tipo sa datos sa kantidad sa pagbalik kinahanglan nga ipahayag sa ulohan sa pamaagi function.
  • Ang variable nga adunay sulod nga kantidad sa pagbalik kinahanglan nga nganlan nga parehas sa pamaagi function. Kini nga variable dili kinahanglan nga ipahayag nga gilain, tungod kay kini kanunay nga naglungtad ingon usa ka hinungdanon nga bahin sa pamaagi. function.

Kini maayong pagkailustrar sa mosunod nga pananglitan.

Ehemplo sa Function sa VBA: Pagbuhat sa usa ka Mathematical Operation sa 3 ka Numero

Ang mosunod usa ka pananglitan sa usa ka VBA procedure code function, nga nagkinahanglan og tulo ka argumento sa matang double (doble nga katukma nga floating-point nga mga numero). Ingon usa ka sangputanan, ang pamaagi nagbalik sa lain nga gidaghanon sa tipo doublekatumbas sa sumada sa unang duha ka argumento minus ang ikatulo nga argumento:

Function SumMinus(dNum1 As Doble, dNum2 As Doble, dNum3 As Doble) As Doble SumMinus = dNum1 + dNum2 - dNum3 End Function

Kining yano kaayo nga pamaagi sa VBA function naghulagway kung giunsa ang datos gipasa sa usa ka pamaagi pinaagi sa mga argumento. Makita nimo nga ang tipo sa datos nga gibalik sa pamaagi gihubit ingon double (ang mga pulong nag-ingon Ingon Doble pagkahuman sa lista sa mga argumento). Kini nga pananglitan nagpakita usab kung giunsa ang resulta sa pamaagi function gitipigan sa usa ka variable nga adunay parehas nga ngalan sa ngalan sa pamaagi.

Pagtawag sa pamaagi sa VBA nga "Function"

Kung ang labaw sa yano nga pamaagi function gisal-ut sa usa ka module sa Visual Basic editor, mahimo kini nga tawagan gikan sa ubang mga pamaagi sa VBA o gamiton sa usa ka worksheet sa usa ka workbook sa Excel.

Tawga ang pamaagi sa VBA nga "Function" gikan sa laing pamaagi

pamaagi function mahimong tawgon gikan sa lain nga pamaagi sa VBA pinaagi lamang sa pag-assign niana nga pamaagi sa usa ka variable. Ang mosunod nga pananglitan nagpakita sa usa ka tawag sa usa ka pamaagi Summinus, nga gihubit sa ibabaw.

Sub main() Dim total as Doble total = SumMinus(5, 4, 3) End Sub

Tawga ang pamaagi sa VBA nga "Function" gikan sa usa ka worksheet

VBA nga pamaagi function mahimong tawgon gikan sa usa ka worksheet sa Excel sa parehas nga paagi sama sa bisan unsang ubang built-in nga function sa Excel. Busa, ang pamaagi nga gihimo sa miaging pananglitan function - Summinus mahimong tawgon pinaagi sa pagsulod sa mosunod nga ekspresyon sa usa ka worksheet cell:

=SumMinus(10, 5, 2)

Ang pamaagi sa VBA "Sub"

Ang editor sa VBA nakasabut nga adunay usa ka pamaagi sa atubangan niini subsa diha nga kini makasugat og usa ka grupo sa mga sugo nga gilakip sa taliwala sa mosunod nga pagbukas ug panapos nga mga pahayag:

Sub ... Katapusan nga Sub

Pamaagi sa VBA "Sub": Panig-ingnan 1. Pag-align sa sentro ug pagbag-o sa gidak-on sa font sa pinili nga han-ay sa mga selula

Tagda ang usa ka pananglitan sa usa ka yano nga pamaagi sa VBA sub, kansang tahas mao ang pag-usab sa pag-format sa pinili nga han-ay sa mga selula. Ang mga selyula gisentro (parehas nga patindog ug pinahigda) ug ang gidak-on sa font giusab sa gipiho sa user:

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

Kini nga pamaagi sub naghimo og mga aksyon apan wala magbalik og resulta.

Kini nga pananglitan naggamit usab ug Opsyonal nga argumento Gidak-on sa Font. Kung ang argumento Gidak-on sa Font wala gipasa sa procedure sub, nan ang default nga kantidad niini mao ang 10. Apan, kung ang argumento Gidak-on sa Font gipasa sa procedure sub, unya ang pinili nga han-ay sa mga selula itakda sa gidak-on sa font nga gitakda sa tiggamit.

VBA Sub Procedure: Pananglitan 2: Center Align ug Bold Font sa Pinili nga Range sa Cells

Ang mosunod nga pamaagi susama sa usa nga bag-o lang gihisgutan, apan niining higayona, imbes nga usbon ang gidak-on, kini magamit ang usa ka maisugon nga estilo sa font sa pinili nga han-ay sa mga selula. Kini usa ka pananglitan nga pamaagi sub, nga walay mga argumento:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = Tinuod nga Katapusan Sub

Pagtawag sa "Sub" nga Pamaagi sa Excel VBA

Tawga ang pamaagi sa VBA nga "Sub" gikan sa laing pamaagi

Sa pagtawag sa usa ka pamaagi sa VBA sub gikan sa laing pamaagi sa VBA, kinahanglan nimo nga isulat ang keyword Tawag, ngalan sa pamaagi sub ug dugang pa sa parentesis mao ang mga argumento sa pamaagi. Gipakita kini sa pananglitan sa ubos:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Kung ang pamaagi Format_Nasentro_Ug_Gidak-on adunay labaw pa sa usa ka argumento, sila kinahanglan nga bulagon pinaagi sa mga koma. Ingon ani:

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

Tawga ang pamaagi sa VBA nga "Sub" gikan sa worksheet

pamaagi sub dili direkta nga masulod sa usa ka Excel sheet cell, ingon nga mahimo sa usa ka pamaagi functionkay ang procedure sub dili mubalik ug bili. Apan, mga pamaagi sub, nga walay mga argumento ug gideklarar nga Public (sama sa gipakita sa ubos) mahimong magamit sa mga tiggamit sa worksheet. Busa, kung ang yano nga mga pamaagi nga gihisgutan sa ibabaw sub gisulod sa usa ka module sa Visual Basic Editor, ang pamaagi Format_Nasentro_Ug_Bold mahimong magamit sa usa ka worksheet sa Excel, ug ang pamaagi Format_Nasentro_Ug_Gidak-on – dili magamit tungod kay kini adunay mga argumento.

Ania ang usa ka sayon ​​​​nga paagi sa pagpadagan (o pagpatuman) sa usa ka pamaagi sub, ma-access gikan sa worksheet:

  • press Alt + F8 (ipindot ang yawi alt ug samtang gipugngan kini, pindota ang yawe F8).
  • Sa lista sa mga macro nga makita, pilia ang usa nga gusto nimong padaganon.
  • press run (dagan)

Sa pagbuhat sa usa ka pamaagi sub dali ug dali, mahimo kang mag-assign ug keyboard shortcut niini. Alang niini:

  • press Alt + F8.
  • Sa lista sa mga macro nga makita, pilia ang usa nga gusto nimo nga hatagan usa ka shortcut sa keyboard.
  • press lantugi (Mga Opsyon) ug sa dialog box nga makita, isulod ang keyboard shortcut.
  • press OK ug isira ang dialog Macro (Macro).

Pang-atensyon nga: Kung nag-assign sa usa ka shortcut sa keyboard sa usa ka macro, siguruha nga wala kini gigamit ingon sukaranan sa Excel (pananglitan, Ctrl + C). Kung mopili ka sa naa na nga keyboard shortcut, kini i-reassign sa macro, ug isip resulta, ang user mahimong magsugod sa macro sa aksidente.

Sakop sa Pamaagi sa VBA

Ang Bahin 2 sa kini nga panudlo naghisgot sa kasangkaran sa mga variable ug kanunay ug ang papel sa mga keyword. Public и Private. Kini nga mga keyword mahimo usab nga gamiton sa mga pamaagi sa VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Kung ang deklarasyon sa pamaagi giunhan sa keyword Public, unya ang pamaagi mahimong magamit sa tanan nga mga module sa kana nga proyekto sa VBA.
Pribadong Sub AddToCells(i As Integer) ... End Sub
Kung ang deklarasyon sa pamaagi giunhan sa keyword Private, nan kini nga pamaagi magamit ra alang sa karon nga module. Dili kini matawag samtang naa sa bisan unsang lain nga module o gikan sa usa ka workbook sa Excel.

Hinumdumi nga kung sa wala pa ipahayag ang usa ka pamaagi sa VBA function or sub keyword wala gisal-ut, ang default nga kabtangan gitakda alang sa pamaagi Public (nga mao, kini magamit bisan asa niining VBA nga proyekto). Sukwahi kini sa mga variable nga deklarasyon, nga sa kasagaran mao ang Private.

Sayo nga paggawas gikan sa mga pamaagi sa VBA "Function" ug "Sub"

Kung kinahanglan nimo nga tapuson ang pagpatuman sa usa ka pamaagi sa VBA function or sub, nga wala maghulat sa natural nga pagtapos niini, nan alang niini adunay mga operator Exit Function и Paggawas sa Sub. Ang paggamit niini nga mga operator gipakita sa ubos gamit ang usa ka yano nga pamaagi isip usa ka pananglitan. functionUsa ka nga nagpaabut nga makadawat usa ka positibo nga argumento aron mahimo ang dugang nga mga operasyon. Kung ang usa ka dili positibo nga kantidad gipasa sa pamaagi, nan wala nay dugang nga mga operasyon ang mahimo, busa ang tiggamit kinahanglan nga ipakita ang usa ka mensahe sa sayup ug ang pamaagi kinahanglan nga mogawas dayon:

Function VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Kung sVAT_Rate <= 0 Unya MsgBox "Gidahom nga Positibo nga bili sa sVAT_Rate apan Nadawat " & sVAT_Rate Exit Function Tapuson Kung ... End Function

Palihug timan-i nga sa dili pa makompleto ang pamaagi function - VAT_Amount, usa ka built-in nga VBA function ang gisal-ot sa code MsgBox, nga nagpakita sa usa ka pasidaan nga popup sa tiggamit.

Leave sa usa ka Reply