"ფუნქცია" და "ქვე" პროცედურები VBA-ში

შინაარსი

ჩაშენებული VBA ფუნქციები

სანამ დაიწყებთ საკუთარი VBA ფუნქციების შექმნას, კარგია იცოდეთ, რომ Excel VBA-ს აქვს წინასწარ ჩაშენებული ფუნქციების მდიდარი კოლექცია, რომელიც შეგიძლიათ გამოიყენოთ კოდის დაწერისას.

ამ ფუნქციების სია შეგიძლიათ ნახოთ VBA რედაქტორში:

  • გახსენით Excel სამუშაო წიგნი და გაუშვით VBA რედაქტორი (დააწკაპუნეთ ამის გასაკეთებლად Alt + F11), შემდეგ კი დააჭირეთ F2.
  • აირჩიეთ ბიბლიოთეკა ჩამოსაშლელი სიიდან ეკრანის ზედა მარცხენა მხარეს VBA.
  • გამოჩნდება ჩაშენებული VBA კლასებისა და ფუნქციების სია. დააწკაპუნეთ ფუნქციის სახელზე, რათა ნახოთ მისი მოკლე აღწერა ფანჯრის ბოლოში. დაჭერით F1 გახსნის ონლაინ დახმარების გვერდს ამ ფუნქციისთვის.

გარდა ამისა, ჩაშენებული VBA ფუნქციების სრული სია მაგალითებით შეგიძლიათ იხილოთ Visual Basic Developer Center-ში.

მორგებული პროცედურები "ფუნქცია" და "ქვე" VBA-ში

Excel Visual Basic-ში ბრძანებების ნაკრები, რომლებიც ასრულებენ კონკრეტულ დავალებას, მოთავსებულია პროცედურაში. ფუნქცია (ფუნქცია) ან Sub (ქვეპროგრამა). მთავარი განსხვავება პროცედურებს შორის ფუნქცია и Sub ეს არის პროცედურა ფუნქცია აბრუნებს შედეგს, პროცედურას Sub – არა.

ამიტომ, თუ თქვენ გჭირდებათ მოქმედებების შესრულება და რაიმე შედეგის მიღება (მაგალითად, რამდენიმე რიცხვის შეჯამება), მაშინ ჩვეულებრივ გამოიყენება პროცედურა. ფუნქციადა იმისათვის, რომ უბრალოდ შეასრულოთ რამდენიმე მოქმედება (მაგალითად, შეცვალოთ უჯრედების ჯგუფის ფორმატირება), თქვენ უნდა აირჩიოთ პროცედურა Sub.

არგუმენტები

სხვადასხვა მონაცემები შეიძლება გადაეცეს VBA პროცედურებს არგუმენტების გამოყენებით. არგუმენტების სია მითითებულია პროცედურის გამოცხადებისას. მაგალითად, პროცედურა Sub VBA-ში ამატებს მოცემულ მთელ რიცხვს (Integer) არჩეული დიაპაზონის თითოეულ უჯრედს. თქვენ შეგიძლიათ გადასცეთ ეს ნომერი პროცედურას არგუმენტის გამოყენებით, როგორიცაა:

Sub AddToCells(i როგორც მთელი რიცხვი) ... ბოლო Sub

გაითვალისწინეთ, რომ პროცედურების არგუმენტები ფუნქცია и Sub VBA-ში არჩევითია. ზოგიერთი პროცედურა არ საჭიროებს არგუმენტებს.

არჩევითი არგუმენტები

VBA პროცედურებს შეიძლება ჰქონდეს არჩევითი არგუმენტები. ეს არის არგუმენტები, რომლებიც მომხმარებელს სურვილის შემთხვევაში შეუძლია მიუთითოს და თუ ისინი გამოტოვებულია, პროცედურა იყენებს მათთვის ნაგულისხმევ მნიშვნელობებს.

წინა მაგალითს რომ დავუბრუნდეთ, ფუნქციის მთელი რიცხვის არგუმენტის არჩევითად გასაკეთებლად, ის გამოცხადდება ასე:

Sub AddToCells (არასავალდებულო i როგორც მთელი რიცხვი = 0)

ამ შემთხვევაში, მთელი არგუმენტი i ნაგულისხმევი იქნება 0.

პროცედურაში შეიძლება იყოს რამდენიმე არასავალდებულო არგუმენტი, რომელთაგან ყველა ჩამოთვლილია არგუმენტების სიის ბოლოს.

არგუმენტების გადაცემა მნიშვნელობით და მითითებით

VBA-ში არგუმენტები შეიძლება გადავიდეს პროცედურაზე ორი გზით:

  • ByVal - არგუმენტის გადაცემა მნიშვნელობის მიხედვით. ეს ნიშნავს, რომ მხოლოდ მნიშვნელობა (ანუ არგუმენტის ასლი) გადაეცემა პროცედურას და, შესაბამისად, პროცედურის შიგნით არგუმენტში შეტანილი ნებისმიერი ცვლილება დაიკარგება პროცედურის გასვლისას.
  • ByRef – არგუმენტის გადმოცემა მითითებით. ანუ, არგუმენტის მდებარეობის ფაქტობრივი მისამართი მეხსიერებაში გადაეცემა პროცედურას. პროცედურის შიგნით არგუმენტში შეტანილი ნებისმიერი ცვლილება შეინახება პროცედურის გასვლისას.

საკვანძო სიტყვების გამოყენება ByVal or ByRef პროცედურულ დეკლარაციაში შეგიძლიათ მიუთითოთ, როგორ გადადის არგუმენტი პროცედურაზე. ეს ნაჩვენებია ქვემოთ მოცემულ მაგალითებში:

Sub AddToCells(ByVal i As Integer) ... ბოლო Sub
ამ შემთხვევაში, მთელი არგუმენტი i გავიდა ღირებულებით. პროცედურის დატოვების შემდეგ Sub ყველა დამზადებულია i ცვლილებები დაიკარგება.
Sub AddToCells(ByRef i როგორც მთელი რიცხვი) ... ბოლო Sub
ამ შემთხვევაში, მთელი არგუმენტი i მითითებით გაიარა. პროცედურის დატოვების შემდეგ Sub ყველა დამზადებულია i ცვლილებები შეინახება ცვლადში, რომელიც გადაეცა პროცედურას Sub.

გახსოვდეთ, რომ VBA არგუმენტები გადაცემულია მითითებით ნაგულისხმევად. სხვა სიტყვებით რომ ვთქვათ, თუ საკვანძო სიტყვები არ გამოიყენება ByVal or ByRef, მაშინ არგუმენტი გადაიცემა მითითებით.

პროცედურების გაგრძელებამდე ფუნქცია и Sub უფრო დეტალურად, სასარგებლო იქნება კიდევ ერთხელ გადავხედოთ მახასიათებლებსა და განსხვავებებს ამ ორი ტიპის პროცედურებს შორის. ქვემოთ მოცემულია VBA პროცედურების მოკლე განხილვები ფუნქცია и Sub და ნაჩვენებია მარტივი მაგალითები.

VBA პროცედურა "ფუნქცია"

VBA რედაქტორი აღიარებს პროცედურას ფუნქციაროდესაც ის ხვდება ბრძანებების ჯგუფს, რომელიც ჩასმულია შემდეგ გახსნის და დახურვის განცხადებებს შორის:

ფუნქცია ... ბოლო ფუნქცია

როგორც უკვე აღვნიშნეთ, პროცედურა ფუნქცია VBA-ში (განსხვავებით Sub) აბრუნებს მნიშვნელობას. მნიშვნელობების დასაბრუნებლად გამოიყენება შემდეგი წესები:

  • დაბრუნებული მნიშვნელობის მონაცემთა ტიპი უნდა იყოს დეკლარირებული პროცედურის სათაურში ფუნქცია.
  • ცვლადი, რომელიც შეიცავს დაბრუნების მნიშვნელობას, უნდა დაერქვას იგივე პროცედურას ფუნქცია. ამ ცვლადის ცალკე დეკლარირება არ არის საჭირო, რადგან ის ყოველთვის არსებობს, როგორც პროცედურის განუყოფელი ნაწილი. ფუნქცია.

ეს კარგად არის ილუსტრირებული შემდეგ მაგალითში.

VBA ფუნქციის მაგალითი: მათემატიკური ოპერაციის შესრულება 3 რიცხვზე

ქვემოთ მოცემულია VBA პროცედურის კოდის მაგალითი ფუნქცია, რომელიც იღებს სამი ტიპის არგუმენტს ორმაგი (ორმაგი სიზუსტის მცურავი წერტილიანი რიცხვები). შედეგად, პროცედურა აბრუნებს ტიპის სხვა რაოდენობას ორმაგიპირველი ორი არგუმენტის ჯამის ტოლია მესამე არგუმენტის გამოკლებით:

ფუნქცია SumMinus(dNum1 როგორც ორმაგი, dNum2 როგორც ორმაგი, dNum3 როგორც ორმაგი) როგორც Double SumMinus = dNum1 + dNum2 - dNum3 ბოლო ფუნქცია

ეს ძალიან მარტივი VBA პროცედურა ფუნქცია ასახავს, ​​თუ როგორ გადაეცემა მონაცემები პროცედურას არგუმენტების საშუალებით. თქვენ ხედავთ, რომ პროცედურის მიერ დაბრუნებული მონაცემთა ტიპი განისაზღვრება როგორც ორმაგი (სიტყვებში ნათქვამია როგორც ორმაგი არგუმენტების სიის შემდეგ). ეს მაგალითი ასევე გვიჩვენებს პროცედურის შედეგს ფუნქცია ინახება ცვლადში იგივე სახელით, როგორც პროცედურის სახელი.

VBA პროცედურის დარქმევა "ფუნქცია"

თუ ზემოთ მოყვანილი მარტივი პროცედურა ფუნქცია Visual Basic რედაქტორის მოდულში ჩასმული, ის შეიძლება გამოიძახონ სხვა VBA პროცედურებიდან ან გამოიყენონ სამუშაო ფურცელზე Excel-ის სამუშაო წიგნში.

მოვუწოდებთ VBA პროცედურას "ფუნქცია" სხვა პროცედურისგან

პროცედურა ფუნქცია შეიძლება გამოძახება სხვა VBA პროცედურიდან უბრალოდ ამ პროცედურის ცვლადზე მინიჭებით. შემდეგი მაგალითი გვიჩვენებს ზარს პროცედურაზე სუმინუსი, რომელიც ზემოთ იყო განსაზღვრული.

Sub main() Dim total როგორც Double total = SumMinus(5, 4, 3) End Sub

გამოიძახეთ VBA პროცედურა „ფუნქცია“ სამუშაო ფურცლიდან

VBA პროცედურა ფუნქცია შეიძლება გამოიძახოთ Excel-ის სამუშაო ფურცლიდან ისევე, როგორც ნებისმიერი სხვა ჩაშენებული Excel ფუნქცია. ამიტომ, წინა მაგალითში შექმნილი პროცედურა ფუნქცია - სუმინუსი შეიძლება გამოძახება სამუშაო ფურცლის უჯრედში შემდეგი გამონათქვამის შეყვანით:

=SumMinus(10, 5, 2)

VBA პროცედურა "Sub"

VBA რედაქტორს ესმის, რომ მის წინ არის პროცედურა Subროდესაც ის ხვდება ბრძანებების ჯგუფს, რომელიც ჩასმულია შემდეგ გახსნის და დახურვის განცხადებებს შორის:

ქვე ... ბოლო ქვე

VBA პროცედურა „Sub“: მაგალითი 1. ცენტრის გასწორება და შრიფტის ზომა იცვლება უჯრედების არჩეულ დიაპაზონში

განვიხილოთ მარტივი VBA პროცედურის მაგალითი Sub, რომლის ამოცანაა შეცვალოს უჯრედების არჩეული დიაპაზონის ფორმატირება. უჯრედები ორიენტირებულია (როგორც ვერტიკალურად, ასევე ჰორიზონტალურად) და შრიფტის ზომა იცვლება მომხმარებლის მიერ მითითებულზე:

Sub Format_Center_And_Sized(სურვილისამებრ iFontSize როგორც მთელი რიცხვი = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

ეს პროცედურა Sub ასრულებს მოქმედებებს, მაგრამ არ აბრუნებს შედეგს.

ეს მაგალითი ასევე იყენებს Optional არგუმენტს Შრიფტის ზომა. თუ არგუმენტი Შრიფტის ზომა პროცედურაზე არ გადავიდა Sub, მაშინ მისი ნაგულისხმევი მნიშვნელობა არის 10. თუმცა, თუ არგუმენტი Შრიფტის ზომა პროცედურაზე გადავიდა Sub, მაშინ უჯრედების არჩეული დიაპაზონი დაყენდება მომხმარებლის მიერ მითითებულ შრიფტის ზომაზე.

VBA ქვეპროცედურა: მაგალითი 2: ცენტრში გასწორება და სქელი შრიფტი უჯრედების არჩეულ დიაპაზონში

შემდეგი პროცედურა მსგავსია ახლახან განხილულის, მაგრამ ამჯერად, ზომის შეცვლის ნაცვლად, ის იყენებს თამამი შრიფტის სტილს უჯრედების არჩეულ დიაპაზონზე. ეს არის პროცედურის მაგალითი Sub, რომელიც არგუმენტებს არ იღებს:

Sub Format_Center_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.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() ზარის ფორმატი_ცენტრირებული_და_ზომა(arg1, arg2, ...) ბოლო Sub

გამოიძახეთ VBA პროცედურა "Sub" სამუშაო ფურცლიდან

პროცედურა Sub არ შეიძლება პირდაპირ Excel-ის ფურცლის უჯრედში შეყვანა, როგორც ეს შეიძლება გაკეთდეს პროცედურის საშუალებით ფუნქციარადგან პროცედურა Sub არ აბრუნებს მნიშვნელობას. თუმცა პროცედურები Sub, რომლებსაც არგუმენტები არ გააჩნიათ და გამოცხადებულია როგორც საჯარო (როგორც ნაჩვენებია ქვემოთ) ხელმისაწვდომი იქნება სამუშაო ფურცლის მომხმარებლებისთვის. ამრიგად, თუ ზემოთ განხილული მარტივი პროცედურები Sub ჩასმულია მოდულში Visual Basic რედაქტორში, პროცედურა ფორმატი_ცენტრირებული_და_მამამი ხელმისაწვდომი იქნება Excel-ის სამუშაო ფურცელში გამოსაყენებლად და პროცედურა ფორმატი_ცენტრირებული_და_ზომა - არ იქნება ხელმისაწვდომი, რადგან მას არგუმენტები აქვს.

აქ მოცემულია პროცედურის გაშვების (ან შესრულების) მარტივი გზა Sub, ხელმისაწვდომი სამუშაო ფურცლიდან:

  • პრეს Alt + F8 (დააჭირე ღილაკს Alt და დაჭერისას დააჭირეთ ღილაკს F8).
  • მაკროების სიაში, რომელიც გამოჩნდება, აირჩიეთ ის, რომლის გაშვებაც გსურთ.
  • პრეს გასაშვებად (გაშვება)

პროცედურის ჩასატარებლად Sub სწრაფად და მარტივად, შეგიძლიათ მას კლავიატურის მალსახმობი მივანიჭოთ. Ამისთვის:

  • პრეს Alt + F8.
  • მაკროების სიაში, რომელიც გამოჩნდება, აირჩიეთ ის, რომელსაც გსურთ კლავიატურის მალსახმობის მინიჭება.
  • პრეს პარამეტრები (პარამეტრები) და დიალოგურ ფანჯარაში, რომელიც გამოჩნდება, შეიყვანეთ კლავიატურის მალსახმობი.
  • პრეს OK და დახურეთ დიალოგი მაკრო (მაკრო).

ყურადღება: მაკროსთვის კლავიატურის მალსახმობის მინიჭებისას, დარწმუნდით, რომ ის არ გამოიყენება როგორც სტანდარტული Excel-ში (მაგალითად, Ctrl + C). თუ თქვენ აირჩევთ უკვე არსებულ კლავიატურის მალსახმობს, ის ხელახლა გადაეცემა მაკროს და შედეგად, მომხმარებელმა შეიძლება შემთხვევით დაიწყოს მაკრო.

VBA პროცედურის ფარგლები

ამ გაკვეთილის მე-2 ნაწილი განიხილავდა ცვლადებისა და მუდმივების ფარგლებს და საკვანძო სიტყვების როლს. საჯარო и პირადი. ეს საკვანძო სიტყვები ასევე შეიძლება გამოყენებულ იქნას VBA პროცედურებთან ერთად:

საჯარო Sub AddToCells(i როგორც მთელი რიცხვი) ... ბოლო Sub
თუ პროცედურის დეკლარაციას წინ უძღვის საკვანძო სიტყვა საჯარო, მაშინ პროცედურა ხელმისაწვდომი იქნება ამ VBA პროექტის ყველა მოდულისთვის.
პირადი Sub AddToCells(i როგორც მთელი რიცხვი) ... ბოლო Sub
თუ პროცედურის დეკლარაციას წინ უძღვის საკვანძო სიტყვა პირადი, მაშინ ეს პროცედურა ხელმისაწვდომი იქნება მხოლოდ მიმდინარე მოდულისთვის. მისი გამოძახება შეუძლებელია სხვა მოდულში ან Excel-ის სამუშაო წიგნიდან.

გახსოვდეთ, რომ თუ VBA პროცედურის გამოცხადებამდე ფუნქცია or Sub საკვანძო სიტყვა არ არის ჩასმული, ნაგულისხმევი თვისება დაყენებულია პროცედურისთვის საჯარო (ანუ ის ხელმისაწვდომი იქნება ყველგან ამ VBA პროექტში). ეს განსხვავდება ცვლადი დეკლარაციებისგან, რომლებიც ნაგულისხმევად არის პირადი.

ადრეული გასვლა VBA პროცედურებიდან "ფუნქცია" და "ქვე"

თუ გჭირდებათ VBA პროცედურის შესრულების შეწყვეტა ფუნქცია or Sub, მისი ბუნებრივი დასასრულის მოლოდინის გარეშე, მაშინ ამისათვის არსებობს ოპერატორები გასვლის ფუნქცია и გასვლა ქვე. ამ ოპერატორების გამოყენება ნაჩვენებია ქვემოთ, მაგალითად, მარტივი პროცედურის გამოყენებით. ფუნქციაA, რომელიც მოელის დადებით არგუმენტს შემდგომი ოპერაციების შესასრულებლად. თუ პროცედურას გადაეცემა არადადებითი მნიშვნელობა, მაშინ შემდგომი ოპერაციების შესრულება შეუძლებელია, ამიტომ მომხმარებელს უნდა აჩვენოს შეცდომის შეტყობინება და პროცედურა დაუყოვნებლივ უნდა გამოვიდეს:

ფუნქცია VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 თუ sVAT_Rate <= 0 მაშინ MsgBox "მოელოდა sVAT_Rate-ის პოზიტიურ მნიშვნელობას, მაგრამ მიღებულ იქნა" & sVAT_Rate გასვლის ფუნქცია დასრულებულია თუ ... დასრულების ფუნქცია

გთხოვთ გაითვალისწინოთ, რომ პროცედურის დასრულებამდე ფუნქცია - VAT_Amount, ჩაშენებული VBA ფუნქცია ჩასმულია კოდში MsgBox, რომელიც აჩვენებს მომხმარებლის გაფრთხილების ფანჯარას.

დატოვე პასუხი