Pwosedi "Fonksyon" ak "Sub" nan VBA

Fonksyon VBA entegre

Anvan ou kòmanse kreye pwòp fonksyon VBA ou, li bon pou w konnen ke Excel VBA gen yon koleksyon rich nan fonksyon entegre prekonstwi ke ou ka itilize pandan w ap ekri kòd ou a.

Ou ka wè yon lis fonksyon sa yo nan editè VBA:

  • Louvri yon liv Excel epi lanse editè VBA a (klike pou fè sa Alt + F11), ak Lè sa a peze F2.
  • Chwazi yon bibliyotèk nan lis deroule ki anlè a gòch nan ekran an VBA.
  • Yon lis bati-an klas VBA ak fonksyon ap parèt. Klike sou non fonksyon an pou montre yon deskripsyon tou kout nan pati anba fenèt la. peze F1 pral louvri paj èd sou entènèt la pou karakteristik sa a.

Anplis de sa, ou ka jwenn yon lis konplè nan fonksyon VBA entegre ak egzanp nan Sant Developer Visual Basic.

Pwosedi koutim "Fonksyon" ak "Sub" nan VBA

Nan Excel Visual Basic, yo mete yon seri kòmandman ki fè yon travay espesifik nan yon pwosedi. fonksyon (Fonksyon) oswa Gwoup (Sousroutine). Diferans prensipal ki genyen ant pwosedi yo fonksyon и Gwoup se ke pwosedi a fonksyon retounen rezilta, pwosedi Gwoup – pa.

Se poutèt sa, si ou bezwen fè aksyon epi jwenn kèk rezilta (pa egzanp, sòm plizyè nimewo), Lè sa a, pwosedi a anjeneral yo itilize. fonksyon, ak nan lòd tou senpleman fè kèk aksyon (pa egzanp, chanje fòma a nan yon gwoup selil), ou bezwen chwazi pwosedi a. Gwoup.

Agiman

Done divès ka pase nan pwosedi VBA lè l sèvi avèk agiman. Lis agiman an espesifye lè yo deklare yon pwosedi. Pou egzanp, pwosedi a Gwoup nan VBA ajoute nonb antye relatif yo bay (Nteger) nan chak selil nan seri a chwazi. Ou ka pase nimewo sa a nan pwosedi a lè l sèvi avèk yon agiman, tankou sa a:

Sub AddToCells(mwen kòm nonb antye) ... End Sub

Kenbe nan tèt ou ke gen agiman pou pwosedi yo fonksyon и Gwoup nan VBA se opsyonèl. Gen kèk pwosedi ki pa mande pou diskisyon.

Agiman si ou vle

Pwosedi VBA ka gen agiman si ou vle. Sa yo se agiman ke itilizatè a ka presize si yo vle, epi si yo omisyon, pwosedi a sèvi ak valè yo default pou yo.

Retounen nan egzanp anvan an, pou fè yon agiman nonb antye relatif nan yon fonksyon si ou vle, li ta dwe deklare tankou sa a:

Sub AddToCells (Opsyonèl i As Integer = 0)

Nan ka sa a, agiman an antye i default la pral 0.

Kapab genyen plizyè agiman opsyonèl nan yon pwosedi, yo tout ki nan lis nan fen lis agiman an.

Pase agiman pa valè ak referans

Agiman nan VBA ka pase nan yon pwosedi nan de fason:

  • ByVal – pase yon agiman pa valè. Sa vle di ke se sèlman valè a (ki se, yon kopi agiman an) pase nan pwosedi a, ak Se poutèt sa nenpòt chanjman ki fèt nan agiman an andedan pwosedi a pral pèdi lè pwosedi a sòti.
  • ByRef – pase yon agiman pa referans. Sa vle di, adrès aktyèl la nan kote agiman an nan memwa pase nan pwosedi a. Nenpòt chanjman ki fèt nan yon agiman andedan pwosedi a pral sove lè pwosedi a sòti.

Sèvi ak mo kle ByVal or ByRef nan deklarasyon pwosedi a, ou ka presize kijan agiman an pase nan pwosedi a. Sa a montre nan egzanp ki anba a:

Sub AddToCells(ByVal i As Integer) ... End Sub
Nan ka sa a, agiman an antye i pase pa valè. Apre ou fin kite pwosedi a Gwoup tout fèt ak i chanjman yo pral pèdi.
Sub AddToCells(ByRef i As Integer) ... End Sub
Nan ka sa a, agiman an antye i pase pa referans. Apre ou fin kite pwosedi a Gwoup tout fèt ak i chanjman yo pral estoke nan varyab ki te pase nan pwosedi a Gwoup.

Sonje ke agiman nan VBA yo pase pa referans pa default. Nan lòt mo, si mo kle yo pa itilize ByVal or ByRef, Lè sa a, agiman an pral pase pa referans.

Anvan ou kontinye ak pwosedi yo fonksyon и Gwoup an plis detay, li pral itil yo pran yon lòt gade nan karakteristik yo ak diferans ki genyen ant de kalite pwosedi sa yo. Sa ki anba la yo se diskisyon kout sou pwosedi VBA fonksyon и Gwoup ak egzanp senp yo montre.

Pwosedi VBA "Fonksyon"

Editè a VBA rekonèt pwosedi a fonksyonlè li rankontre yon gwoup kòmandman ki fèmen ant deklarasyon sa yo ouvèti ak fèmen:

Fonksyon ... Fen Fonksyon

Kòm mansyone pi bonè, pwosedi a fonksyon nan VBA (kòm opoze a Gwoup) retounen yon valè. Règ sa yo aplike pou valè retounen:

  • Kalite done valè retounen yo dwe deklare nan tèt pwosedi a fonksyon.
  • Varyab ki genyen valè retounen a dwe rele menm jan ak pwosedi a fonksyon. Varyab sa a pa bezwen deklare separeman, paske li toujou egziste kòm yon pati entegral nan pwosedi a. fonksyon.

Sa a byen ilistre nan egzanp sa a.

Egzanp Fonksyon VBA: Fè yon Operasyon Matematik sou 3 Nimewo

Sa ki anba la a se yon egzanp yon kòd pwosedi VBA fonksyon, ki pran twa agiman nan kalite Double (doub-presizyon nimewo k ap flote). Kòm yon rezilta, pwosedi a retounen yon lòt kantite kalite Doubleegal a sòm de premye agiman yo mwens twazyèm agiman an:

Fonksyon SumMinus(dNum1 Kòm Double, dNum2 Kòm Double, dNum3 Kòm Double) Kòm Double SumMinus = dNum1 + dNum2 - dNum3 Fen Fonksyon

Pwosedi VBA sa a trè senp fonksyon montre kouman done yo pase nan yon pwosedi atravè agiman. Ou ka wè ki kalite done retounen nan pwosedi a defini kòm Double (mo yo di Kòm doub apre lis agiman yo). Egzanp sa a montre tou ki jan rezilta pwosedi a fonksyon ki estoke nan yon varyab ki gen menm non ak non pwosedi a.

Rele pwosedi VBA "Fonksyon"

Si pwosedi ki pi wo a senp fonksyon mete nan yon modil nan editè Visual Basic, li ka rele nan lòt pwosedi VBA oswa itilize sou yon fèy travay nan yon liv Excel.

Rele pwosedi VBA "Fonksyon" nan yon lòt pwosedi

pwosedi fonksyon ka rele soti nan yon lòt pwosedi VBA pa tou senpleman asiyen pwosedi sa a nan yon varyab. Egzanp sa a montre yon apèl nan yon pwosedi Summis, ki te defini pi wo a.

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

Rele pwosedi VBA "Fonksyon" nan yon fèy travay

Pwosedi VBA fonksyon ka rele nan yon fèy travay Excel menm jan ak nenpòt lòt fonksyon Excel entegre. Se poutèt sa, pwosedi a te kreye nan egzanp anvan an fonksyon - Summis Ou ka rele lè w antre ekspresyon sa a nan yon selil fèy travay:

=SumMinus(10, 5, 2)

Pwosedi VBA «Sub»

Editè a VBA konprann ke gen yon pwosedi devan li Gwouplè li rankontre yon gwoup kòmandman ki fèmen ant deklarasyon sa yo ouvèti ak fèmen:

Sub... End Sub

Pwosedi VBA "Sub": Egzanp 1. Sant aliyman ak chanjman gwosè font nan yon seri selil chwazi

Konsidere yon egzanp yon senp pwosedi VBA Gwoup, ki gen travay se chanje fòma seri selil yo chwazi yo. Selil yo santre (tou de vètikal ak orizontal) epi gwosè font la chanje nan itilizatè a ki espesifye:

Sub Format_Centered_And_Sized(Opsyonèl iFontSize kòm nonb antye relatif = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Pwosedi sa a Gwoup fè aksyon men li pa retounen yon rezilta.

Egzanp sa a tou itilize yon agiman Opsyonèl FontSize. Si agiman an FontSize pa pase nan pwosedi Gwoup, Lè sa a, valè default li se 10. Sepandan, si agiman an FontSize pase nan pwosedi Gwoup, Lè sa a, seri selil yo chwazi yo pral mete nan gwosè a font espesifye pa itilizatè a.

Pwosedi VBA Sub: Egzanp 2: Sant aliman ak Font fonse nan seri selil chwazi yo

Pwosedi sa a se menm jan ak sa ki jis diskite a, men fwa sa a, olye pou yo redimansyonman, li aplike yon style font fonse nan seri selil yo chwazi. Sa a se yon pwosedi egzanp Gwoup, ki pa pran okenn agiman:

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

Rele "Sub" Pwosedi nan Excel VBA

Rele pwosedi VBA "Sub" nan yon lòt pwosedi

Pou rele yon pwosedi VBA Gwoup soti nan yon lòt pwosedi VBA, ou bezwen ekri mo kle a Rele, non pwosedi Gwoup ak plis nan parantèz yo se agiman yo nan pwosedi a. Sa a montre nan egzanp ki anba a:

Sub main() Rele Format_Centered_And_Sized(20) End Sub

Si pwosedi a Fòma_santre_ak_gwosè gen plis pase yon agiman, yo dwe separe pa vigil. Tankou sa a:

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

Rele pwosedi VBA "Sub" nan fèy travay la

pwosedi Gwoup pa ka antre dirèkteman nan yon selil fèy Excel, menm jan yo ka fè ak yon pwosedi fonksyonpaske pwosedi a Gwoup pa retounen yon valè. Sepandan, pwosedi yo Gwoup, ki pa gen okenn agiman epi yo deklare kòm Piblik (jan yo montre anba a) ap disponib pou itilizatè yo nan fèy travay la. Kidonk, si pwosedi yo senp diskite pi wo a Gwoup antre nan yon modil nan Editè a Visual Basic, pwosedi a Fòma_Centre_Et_Gras ap disponib pou itilize nan yon fèy travay Excel, ak pwosedi a Fòma_santre_ak_gwosè – p ap disponib paske li gen agiman.

Isit la se yon fason fasil yo kouri (oswa egzekite) yon pwosedi Gwoup, aksesib nan fèy travay la:

  • Laprès Alt + F8 (peze kle Alt epi pandan w kenbe l desann, peze kle a F8).
  • Nan lis makro ki parèt, chwazi youn nan ou vle kouri.
  • Laprès kouri (kouri)

Pou fè yon pwosedi Gwoup byen vit ak fasil, ou ka bay yon rakoursi klavye pou li. Pou sa:

  • Laprès Alt + F8.
  • Nan lis makro ki parèt, chwazi youn nan ou vle bay yon rakoursi klavye a.
  • Laprès paramèt (Opsyon) ak nan bwat dyalòg ki parèt, antre nan chemen kout klavye a.
  • Laprès OK epi fèmen dyalòg la Macro (Makro).

Atansyon: Lè w bay yon rakoursi klavye nan yon makro, asire w ke li pa itilize kòm estanda nan Excel (pa egzanp, Ctrl + C). Si ou chwazi yon rakoursi klavye ki deja egziste, li pral reyaji nan makro a, epi kòm yon rezilta, itilizatè a ka kòmanse makro a pa aksidan.

Dimansyon Pwosedi VBA

Pati 2 nan leson patikilye sa a te diskite sou sijè ki abòde lan varyab ak konstan ak wòl mo kle yo. Piblik и Prive. Mo kle sa yo ka itilize tou ak pwosedi VBA:

Public Sub AddToCells(mwen kòm nonb antye) ... End Sub
Si deklarasyon an pwosedi a preced pa mo kle a Piblik, Lè sa a, pwosedi a ap disponib nan tout modil nan pwojè VBA sa a.
Private Sub AddToCells(mwen kòm nonb antye) ... End Sub
Si deklarasyon an pwosedi a preced pa mo kle a Prive, Lè sa a, pwosedi sa a ap disponib sèlman pou modil aktyèl la. Li pa ka rele pandan ke yo nan nenpòt lòt modil oswa nan yon liv Excel.

Sonje ke si anvan ou deklare yon pwosedi VBA fonksyon or Gwoup mo kle pa mete, se pwopriyete default la mete pou pwosedi a Piblik (sa vle di, li pral disponib toupatou nan pwojè VBA sa a). Sa a se kontrèman ak deklarasyon varyab, ki pa default yo Prive.

Sòti bonè nan pwosedi VBA "Fonksyon" ak "Sub"

Si ou bezwen mete fen nan ekzekisyon an nan yon pwosedi VBA fonksyon or Gwoup, san yo pa tann pou fini natirèl li yo, Lè sa a, pou sa a gen operatè Sòti Fonksyon и Sòti Sub. Itilizasyon operatè sa yo montre anba a lè l sèvi avèk yon pwosedi senp kòm yon egzanp. fonksyonA ki espere resevwa yon agiman pozitif pou fè plis operasyon. Si yo pase yon valè ki pa pozitif nan pwosedi a, Lè sa a, pa gen okenn lòt operasyon ka fèt, kidonk itilizatè a ta dwe montre yon mesaj erè epi pwosedi a ta dwe sòti imedyatman:

Fonksyon VAT_Amount(sVAT_Rate As Single) Kòm Single VAT_Amount = 0 Si sVAT_Rate <= 0 Lè sa a, MsgBox "Te espere yon valè pozitif nan sVAT_Rate men li te resevwa " & sVAT_Rate Fonksyon Sòti Fen Si ... Fonksyon Fen

Tanpri sonje ke anvan ou konplete pwosedi a fonksyon - VAT_Amount, yon fonksyon VBA entegre nan kòd la MsgBox, ki montre yon popup avètisman bay itilizatè a.

Kite yon Reply