VBA-da “Funksiya” və “Alt” Prosedurlar

Daxili VBA funksiyaları

Öz VBA funksiyalarınızı yaratmağa başlamazdan əvvəl, Excel VBA-nın kodunuzu yazarkən istifadə edə biləcəyiniz əvvəlcədən qurulmuş daxili funksiyaların zəngin kolleksiyasına malik olduğunu bilmək yaxşıdır.

Bu funksiyaların siyahısına VBA redaktorunda baxmaq olar:

  • Excel iş kitabını açın və VBA redaktorunu işə salın (bunu etmək üçün klikləyin Alt + F11) və sonra basın F2.
  • Ekranın yuxarı sol hissəsindəki açılan siyahıdan kitabxana seçin VBA.
  • Daxili VBA sinifləri və funksiyalarının siyahısı görünəcək. Pəncərənin aşağı hissəsində onun qısa təsvirini göstərmək üçün funksiyanın adını basın. basaraq F1 həmin xüsusiyyət üçün onlayn yardım səhifəsini açacaq.

Bundan əlavə, nümunələri olan daxili VBA funksiyalarının tam siyahısını Visual Basic Developer Center-də tapa bilərsiniz.

VBA-da "Funksiya" və "Alt" fərdi prosedurları

Excel Visual Basic-də müəyyən bir tapşırığı yerinə yetirən əmrlər toplusu prosedura yerləşdirilir. Function (Funksiya) və ya Sub (Alt proqram). Prosedurlar arasındakı əsas fərq Function и Sub prosedur budur Function nəticəni, proseduru qaytarır Sub – yox.

Buna görə, hərəkətləri yerinə yetirmək və müəyyən bir nəticə əldə etmək lazımdırsa (məsələn, bir neçə rəqəmi cəmləyin), onda adətən prosedur istifadə olunur. Function, və sadəcə bəzi hərəkətləri yerinə yetirmək üçün (məsələn, bir qrup hüceyrənin formatını dəyişdirmək) proseduru seçməlisiniz. Sub.

Arqumentlər

Arqumentlərdən istifadə edərək VBA prosedurlarına müxtəlif məlumatlar ötürülə bilər. Arqument siyahısı prosedur elan edilərkən müəyyən edilir. Məsələn, prosedur Sub VBA-da seçilmiş diapazondakı hər bir xanaya verilmiş tam ədədi (Tam ədəd) əlavə edir. Bu nömrəni arqumentdən istifadə edərək prosedura ötürə bilərsiniz, məsələn:

Sub AddToCells(i Integer) ... End Sub

Unutmayın ki, prosedurlar üçün arqumentlər var Function и Sub VBA-da isteğe bağlıdır. Bəzi prosedurlar arqument tələb etmir.

Könüllü Arqumentlər

VBA prosedurlarında isteğe bağlı arqumentlər ola bilər. Bunlar istifadəçinin istədikləri təqdirdə təyin edə biləcəyi arqumentlərdir və buraxılıbsa, prosedur onlar üçün standart dəyərlərdən istifadə edir.

Əvvəlki misala qayıdaraq, funksiyaya tam arqumenti isteğe bağlı etmək üçün o, belə elan ediləcək:

Sub AddToCells(İstəyə bağlı i Tam Ədədi = 0)

Bu halda, tam arqument i standart 0 olacaq.

Prosedurda bir neçə isteğe bağlı arqument ola bilər, bunların hamısı arqumentlər siyahısının sonunda verilmişdir.

Dəyər və istinad əsasında arqumentlərin ötürülməsi

VBA-da arqumentlər prosedura iki yolla ötürülə bilər:

  • ByVal – arqumentin dəyərlə ötürülməsi. Bu o deməkdir ki, prosedura yalnız qiymət (yəni arqumentin nüsxəsi) ötürülür və buna görə də prosedur daxilində arqumentə edilən hər hansı dəyişikliklər prosedurdan çıxanda itiriləcək.
  • Ref – arqumentin istinadla ötürülməsi. Yəni, arqumentin yaddaşda yerləşdiyi yerin faktiki ünvanı prosedura ötürülür. Prosedur daxilində arqumentə edilən hər hansı dəyişiklik prosedurdan çıxdıqda yadda saxlanılacaq.

Açar sözlərdən istifadə ByVal or Ref prosedur bəyannaməsində arqumentin prosedura necə ötürülməsini təyin edə bilərsiniz. Bu, aşağıdakı nümunələrdə göstərilir:

Sub AddToCells(ByVal i Integer kimi) ... Son Alt
Bu halda, tam arqument i dəyəri ilə keçdi. Proseduru tərk etdikdən sonra Sub hamısı ilə hazırlanmışdır i dəyişikliklər itiriləcək.
Sub AddToCells(ByRef i Integer kimi) ... Son Alt
Bu halda, tam arqument i istinadla keçib. Proseduru tərk etdikdən sonra Sub hamısı ilə hazırlanmışdır i dəyişikliklər prosedura ötürülən dəyişəndə ​​saxlanacaq Sub.

Unutmayın ki, VBA-da arqumentlər standart olaraq istinadla ötürülür. Başqa sözlə, açar sözlər istifadə edilmədikdə ByVal or Ref, sonra arqument istinadla ötürüləcək.

Prosedurlara davam etməzdən əvvəl Function и Sub daha ətraflı olaraq, bu iki növ prosedur arasındakı xüsusiyyətlərə və fərqlərə bir daha nəzər salmaq faydalı olacaq. Aşağıda VBA prosedurlarının qısa müzakirələri verilmişdir Function и Sub və sadə nümunələr göstərilir.

VBA proseduru «Funksiya»

VBA redaktoru proseduru tanıyır Functionaşağıdakı açılış və bağlanış ifadələri arasında qalan bir qrup əmrlə qarşılaşdıqda:

Funksiya ... Son Funksiya

Daha əvvəl qeyd edildiyi kimi, prosedur Function VBA-da (əksinə Sub) dəyər qaytarır. Qaytarılan dəyərlər üçün aşağıdakı qaydalar tətbiq olunur:

  • Qaytarılan dəyərin məlumat növü prosedurun başlığında elan edilməlidir Function.
  • Qaytarılan dəyəri ehtiva edən dəyişən prosedurla eyni adlandırılmalıdır Function. Bu dəyişənin ayrıca elan edilməsinə ehtiyac yoxdur, çünki o, həmişə prosedurun tərkib hissəsi kimi mövcuddur. Function.

Bu, aşağıdakı misalda yaxşı təsvir edilmişdir.

VBA funksiyası nümunəsi: 3 ədəd üzərində riyazi əməliyyatın yerinə yetirilməsi

Aşağıda VBA prosedur kodunun nümunəsi verilmişdir Functiontipli üç arqument götürür Cüt (ikiqat dəqiqlikli üzən nöqtəli ədədlər). Nəticədə, prosedur başqa sayda növ qaytarır Cütilk iki arqumentin cəminə üçüncü arqument çıxılmaqla bərabərdir:

Funksiya CəmiMinus(dNum1 İkiqat, dNum2 İkiqat, dNum3 İkiqat) İkiqat CəmiMinus = dNum1 + dNum2 - dNum3 Son Funksiya

Bu çox sadə VBA proseduru Function arqumentlər vasitəsilə verilənlərin prosedura necə ötürüldüyünü göstərir. Prosedur tərəfindən qaytarılan məlumat tipinin olaraq təyin olunduğunu görə bilərsiniz Cüt (sözlər deyir İkiqat olaraq arqumentlər siyahısından sonra). Bu nümunə də prosedurun nəticəsini göstərir Function prosedur adı ilə eyni ada malik dəyişəndə ​​saxlanılır.

VBA prosedurunu “Funksiya” adlandırmaq

Yuxarıdakı sadə prosedur varsa Function Visual Basic redaktorunda modula daxil edilir, onu digər VBA prosedurlarından çağırmaq və ya Excel iş kitabında iş vərəqində istifadə etmək olar.

Başqa bir prosedurdan VBA prosedurunu "Funksiya" adlandırın

Qaydası Function başqa VBA prosedurundan sadəcə həmin proseduru dəyişənə təyin etməklə çağırıla bilər. Aşağıdakı nümunə prosedura çağırışı göstərir Summinus, yuxarıda müəyyən edilmişdir.

Sub main() İkiqat cəmi = SumMinus (5, 4, 3) Son Alt kimi Dim cəmi

İş vərəqindən VBA prosedurunu "Funksiya" adlandırın

VBA proseduru Function Excel iş vərəqindən hər hansı digər daxili Excel funksiyası ilə eyni şəkildə çağırıla bilər. Buna görə də əvvəlki nümunədə yaradılmış prosedur Function - Summinus aşağıdakı ifadəni iş vərəqi xanasına daxil etməklə çağırıla bilər:

=SumMinus(10, 5, 2)

VBA proseduru «Sub»

VBA redaktoru onun qarşısında bir prosedur olduğunu başa düşür Subaşağıdakı açılış və bağlanış ifadələri arasında qalan bir qrup əmrlə qarşılaşdıqda:

Alt ... Son Alt

VBA proseduru “Alt”: Nümunə 1. Seçilmiş xanalar diapazonunda mərkəzə düzülmə və şrift ölçüsünün dəyişməsi

Sadə VBA prosedurunun bir nümunəsini nəzərdən keçirin Sub, vəzifəsi seçilmiş xanalar diapazonunun formatını dəyişdirməkdir. Hüceyrələr mərkəzləşdirilmişdir (həm şaquli, həm də üfüqi) və şrift ölçüsü istifadəçi tərəfindən təyin olunana dəyişdirilir:

Alt Format_Mərkəzli_Və_Ölçü(İstəyə Bağlı iFontSize Tam Ədəd = 10) Seçim.HorizontalAlignment = xlCenter Seçimi.VerticalAlignment = xlCenter Seçimi.Font.Size = iFontSize Son Alt Alt

Bu prosedur Sub hərəkətləri yerinə yetirir, lakin nəticə vermir.

Bu misalda Könüllü arqument də istifadə olunur FontSize. Əgər mübahisə FontSize prosedura keçməyib Sub, onda onun standart dəyəri 10-dur. Lakin, əgər arqument FontSize prosedura keçdi Sub, sonra seçilmiş xanalar diapazonu istifadəçi tərəfindən müəyyən edilmiş şrift ölçüsünə təyin ediləcək.

VBA Alt Proseduru: Nümunə 2: Seçilmiş Hüceyrə Aralığında Mərkəzə Align və Qalın Şrift

Aşağıdakı prosedur indicə müzakirə olunan prosedura bənzəyir, lakin bu dəfə ölçüsünü dəyişmək əvəzinə seçilmiş xanalar diapazonuna qalın şrift üslubu tətbiq edir. Bu bir nümunə prosedurdur Sub, heç bir arqument tələb etmir:

Alt Format_Mərkəzli_Və_Bold() Seçimi. HorizontalAlignment = xlCenter Seçimi.VerticalAlignment = xlCenter Seçimi.Font.Bold = True End Sub

Excel VBA-da “Alt” prosedurunun çağırılması

Başqa bir prosedurdan VBA prosedurunu “Sub” adlandırın

VBA prosedurunu çağırmaq üçün Sub başqa VBA prosedurundan açar sözü yazmalısınız çağırış, prosedur adı Sub və daha sonra mötərizədə prosedurun arqumentləri verilir. Bu, aşağıdakı nümunədə göstərilir:

Sub main() Zəng Format_Mərkəzli_Və_Ölçü(20) Son Alt

Əgər prosedur Format_Mərkəzləşdirilmiş_Və_Ölçü birdən çox arqumentə malikdir, onlar vergüllə ayrılmalıdır. Bunun kimi:

Sub main() Zəng Format_Mərkəzli_Və_Ölçü(arg1, arg2, ...) Son Alt

İş vərəqindən VBA proseduru “Sub”a zəng edin

Qaydası Sub prosedurla edilə bildiyi kimi, birbaşa Excel vərəq xanasına daxil edilə bilməz Functionçünki prosedur Sub dəyər qaytarmır. Bununla belə, prosedurlar Sub, heç bir arqumenti olmayan və kimi elan edilən Ictimai (aşağıda göstərildiyi kimi) iş vərəqinin istifadəçiləri üçün əlçatan olacaq. Beləliklə, yuxarıda müzakirə olunan sadə prosedurlar Sub Visual Basic Redaktorunda modula daxil edilmiş prosedur Format_Mərkəzli_Və_Qalın Excel iş vərəqində və prosedurda istifadə üçün əlçatan olacaq Format_Mərkəzləşdirilmiş_Və_Ölçü – arqumentləri olduğu üçün mövcud olmayacaq.

Budur proseduru icra etməyin (və ya yerinə yetirməyin) asan yolu Sub, iş vərəqindən əldə edilə bilər:

  • mətbuat Alt + F8 (düyməsinə basın Dayandırmaq və basıb saxlayaraq düyməni basın F8).
  • Görünən makrolar siyahısında işə salmaq istədiyinizi seçin.
  • mətbuat qaçış (qaçış)

Bir proseduru yerinə yetirmək üçün Sub tez və asanlıqla ona klaviatura qısayolunu təyin edə bilərsiniz. Bunun üçün:

  • mətbuat Alt + F8.
  • Görünən makrolar siyahısında klaviatura qısayolunu təyin etmək istədiyinizi seçin.
  • mətbuat Parameters (Seçimlər) və görünən dialoq qutusunda klaviatura qısa yolunu daxil edin.
  • mətbuat OK və dialoqu bağlayın Makro (Makro).

diqqət: Makroya klaviatura qısayolunu təyin edərkən, onun Excel-də standart olaraq istifadə edilmədiyinə əmin olun (məsələn, Ctrl + C). Əgər siz artıq mövcud olan klaviatura qısa yolunu seçsəniz, o, makroya yenidən təyin ediləcək və nəticədə istifadəçi təsadüfən makrosunu işə sala bilər.

VBA prosedurunun əhatə dairəsi

Bu təlimatın 2-ci hissəsində dəyişənlərin və sabitlərin əhatə dairəsi və açar sözlərin rolu müzakirə edilmişdir. Ictimai и Xüsusi. Bu açar sözlər VBA prosedurları ilə də istifadə edilə bilər:

Public Sub AddToCells(i As As) ... Son Alt
Prosedur elanından əvvəl açar söz varsa Ictimai, sonra prosedur həmin VBA layihəsindəki bütün modullar üçün əlçatan olacaq.
Private Sub AddToCells(i As As Integer) ... End Sub
Prosedur elanından əvvəl açar söz varsa Xüsusi, onda bu prosedur yalnız cari modul üçün mövcud olacaq. Onu hər hansı digər modulda və ya Excel iş kitabından çağırmaq olmaz.

Unutmayın ki, əgər VBA prosedurunu elan etməzdən əvvəl Function or Sub açar söz daxil edilmir, standart xüsusiyyət prosedur üçün təyin edilir Ictimai (yəni bu VBA layihəsində hər yerdə mövcud olacaq). Bu, standart olaraq olan dəyişən bəyannamələrindən fərqlidir Xüsusi.

“Function” və “Sub” VBA prosedurlarından erkən çıxış

VBA prosedurunun icrasını dayandırmaq lazımdırsa Function or Sub, təbii sonunu gözləmədən, bunun üçün operatorlar var Çıxış funksiyası и Altdan çıxın. Bu operatorların istifadəsi nümunə kimi sadə prosedurdan istifadə etməklə aşağıda göstərilmişdir. FunctionNövbəti əməliyyatları yerinə yetirmək üçün müsbət arqument almağı gözləyən A. Prosedura qeyri-müsbət dəyər ötürülürsə, o zaman başqa əməliyyatlar həyata keçirilə bilməz, ona görə də istifadəçiyə səhv mesajı göstərilməli və prosedur dərhal çıxmalıdır:

Funksiya VAT_Amount(sVAT_Rate As Single) VAT_Amount = 0 Əgər sVAT_Rate <= 0 O zaman MsgBox "SVAT_Rate-in müsbət dəyəri gözlənilir, lakin qəbul edilib" & sVAT_Rate Funksiyadan Çıxış Sonu Əgər ...

Unutmayın ki, proseduru tamamlamazdan əvvəl Function - ƏDV_Məbləği, daxili VBA funksiyası koda daxil edilir MsgBox, istifadəçiyə xəbərdarlıq pop-up göstərir.

Cavab yaz