ცვლადები და მუდმივები VBA-ში

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

მაგალითად, მუდმივი Pi ინახავს მნიშვნელობას 3,14159265… რიცხვი „Pi“ არ შეიცვლება პროგრამის შესრულებისას, მაგრამ მაინც უფრო მოსახერხებელია ისეთი მნიშვნელობის შენახვა, როგორც მუდმივი.

ამავდროულად, ჩვენ შეგვიძლია გამოვიყენოთ ცვლადი sVAT_Rate შეძენილ საქონელზე დღგ-ს განაკვეთის შესანახად. ცვლადი მნიშვნელობა sVAT_Rate შეიძლება განსხვავდებოდეს შეძენილი პროდუქტის მიხედვით.

მონაცემთა ტიპები

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

Მონაცემთა ტიპი ზომააღწერაღირებულებების დიაპაზონი
ბაიტი1 bytesდადებითი მთელი რიცხვები; ხშირად გამოიყენება ორობითი მონაცემებისთვისსაწყისი 0 to 255
ლოგიკური2 bytesშეიძლება იყოს მართალი ან მცდარიმართალია ან მცდარი
Integer2 bytesმთელი რიცხვები (წილადი ნაწილის გარეშე)-32 დან +768 -მდე
დიდხანს4 bytesდიდი მთელი რიცხვები (ფრაქციული ნაწილის გარეშე)от -2 147 483 648 до +2 147 483 647
ერთი4 bytesერთი ზუსტი მცურავი წერტილის ნომერი-3.4e38-დან +3.4e38-მდე
ორმაგი8 bytesორმაგი სიზუსტის მცურავი წერტილის ნომერი-1.8e308-დან +1.8e308-მდე
ვალუტა8 bytesმცურავი წერტილის ნომერი, ათობითი ადგილების ფიქსირებული რაოდენობითот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
თარიღი8 bytesთარიღი და დრო – თარიღის ტიპის მონაცემები წარმოდგენილია მცურავი წერტილის ნომრით. ამ რიცხვის მთელი რიცხვი გამოხატავს თარიღს, ხოლო წილადი - დროს.1 იანვრიდან 100 წლის 31 დეკემბრამდე
ობიექტის4 bytesობიექტის მითითებანებისმიერი ობიექტის მითითება
სიმებიანიიცვლებაპერსონაჟების ნაკრები. სიმებიანი ტიპი შეიძლება იყოს ფიქსირებული ან ცვალებადი სიგრძისა. უფრო ხშირად გამოიყენება ცვლადი სიგრძითფიქსირებული სიგრძე - დაახლოებით 65 სიმბოლომდე. ცვლადი სიგრძე - დაახლოებით 500 მილიარდ სიმბოლომდე
Variantიცვლებაშეიძლება შეიცავდეს თარიღს, float ან სიმბოლოს სტრიქონს. ეს ტიპი გამოიყენება იმ შემთხვევებში, როდესაც წინასწარ არ არის ცნობილი, რა ტიპის მონაცემები შეიტანება.რიცხვი – ორმაგი, სტრიქონი – სტრიქონი

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

ცვლადების და მუდმივების გამოცხადება

მთარგმნელის შენიშვნა: VBA-ში ცვლადებზე საუბრისას, აღსანიშნავია კიდევ ერთი ძალიან მნიშვნელოვანი წერტილი. თუ ჩვენ ვაცხადებთ ცვლადს, მაგრამ არ მივანიჭებთ მას რაიმე მნიშვნელობას, მაშინ იგი ინიციალიზდება ნაგულისხმევი მნიშვნელობით:

• ტექსტის სტრიქონების ინიციალიზაცია ხდება ცარიელი სტრიქონებით;

• რიცხვები — მნიშვნელობა 0;

• ტიპის ცვლადები ლოგიკური - ყალბი;

• თარიღები – 30 წლის 1899 დეკემბერი.

სანამ ცვლადი ან მუდმივი იქნება გამოყენებული, ის უნდა გამოცხადდეს. ამისათვის დაამატეთ კოდის შემდეგი მარტივი ხაზი მაკროში:

Dim Имя_Переменной As Тип_Данных

კოდის ზემოთ მოცემულ სტრიქონში ცვლადი_ სახელი არის ცვლადის სახელი, რომელიც გამოყენებული იქნება კოდში და Მონაცემთა ტიპი არის ერთ-ერთი მონაცემთა ტიპი ამ სტატიაში ცოტა ადრე მოცემული ცხრილიდან. Მაგალითად:

Dim sVAT_Rate As Single Dim i როგორც მთელი რიცხვი

მუდმივები გამოცხადებულია ანალოგიურად, მაგრამ მუდმივების გამოცხადებისას, მათი მნიშვნელობა დაუყოვნებლივ უნდა იყოს მითითებული. მაგალითად, ასე:

Const iMaxCount = 5000 Const iMaxScore = 100

არ არის აუცილებელი Excel-ში ცვლადების გამოცხადება. ნაგულისხმევად, Excel-ში ყველა შეყვანილ, მაგრამ არ გამოცხადებულ ცვლადს ექნება ტიპი Variant და შეძლებს მიიღოს როგორც რიცხვითი, ასევე ტექსტური მნიშვნელობა.

ამრიგად, პროგრამისტს შეუძლია გამოიყენოს ახალი ცვლადი ნებისმიერ დროს (მაშინაც კი, თუ ის არ არის გამოცხადებული), და Excel განიხილავს მას, როგორც ტიპის ცვლადს. Variant. თუმცა, არსებობს რამდენიმე მიზეზი, რის გამოც ეს არ უნდა გაკეთდეს:

  1. მეხსიერების გამოყენება და გამოთვლითი სიჩქარე. თუ არ გამოაცხადებთ ცვლადს მონაცემთა ტიპის მითითებით, მაშინ ნაგულისხმევად ის დაყენდება ტიპზე Variant. მონაცემთა ეს ტიპი იყენებს მეტ მეხსიერებას, ვიდრე სხვა მონაცემთა ტიპები. ცვლადზე რამდენიმე დამატებითი ბაიტი შეიძლება არ ჟღერდეს, მაგრამ პრაქტიკაში, პროგრამებს შეიძლება ჰქონდეთ ათასობით ცვლადი (განსაკუთრებით მასივებთან მუშაობისას). ამიტომ, დამატებითი მეხსიერება გამოიყენება ისეთი ცვლადების მიერ, როგორიცაა Variant, ტიპის ცვლადებთან შედარებით Integer or ერთი, შეიძლება დაემატოს მნიშვნელოვან რაოდენობას. გარდა ამისა, ოპერაციები ტიპის ცვლადებით Variant შესრულებულია ბევრად უფრო ნელა, ვიდრე სხვა ტიპის ცვლადები, შესაბამისად, დამატებითი ათასი ტიპის ცვლადი Variant შეუძლია მნიშვნელოვნად შეანელოს გამოთვლები.
  2. ცვლადების სახელებში ბეჭდვითი შეცდომების პრევენცია. თუ ყველა ცვლადი დეკლარირებულია, მაშინ VBA განცხადება შეიძლება გამოყენებულ იქნას − ვარიანტი აშკარა (ამაზე მოგვიანებით ვისაუბრებთ) ყველა არადეკლარირებული ცვლადის იდენტიფიცირების მიზნით. ეს გამორიცხავს პროგრამაში შეცდომის გამოჩენას არასწორად დაწერილი ცვლადის სახელის შედეგად. მაგალითად, დასახელებული ცვლადის გამოყენებით sVAT_Rate, შეგიძლიათ დაწეროთ შეცდომა და ამ ცვლადისთვის მნიშვნელობის მინიჭებით დაწეროთ: „VATRate = 0,175“. მოსალოდნელია, რომ ამიერიდან ცვლადი sVAT_Rate უნდა შეიცავდეს მნიშვნელობას 0,175 – მაგრამ, რა თქმა უნდა, არ არის. თუ ჩართულია ყველა გამოყენებული ცვლადის სავალდებულო დეკლარაციის რეჟიმი, მაშინ VBA შემდგენელი დაუყოვნებლივ მიუთითებს შეცდომაზე, რადგან ის ვერ იპოვის ცვლადს. VATRAte გამოცხადებულთა შორის.
  3. ხაზს უსვამს მნიშვნელობებს, რომლებიც არ ემთხვევა ცვლადის დეკლარირებულ ტიპს. თუ თქვენ გამოაცხადებთ გარკვეული ტიპის ცვლადს და ცდილობთ მას სხვა ტიპის მონაცემების მინიჭებას, მიიღებთ შეცდომას, რომელიც შეუსწორებლობის შემთხვევაში შეიძლება გამოიწვიოს პროგრამის ავარია. ერთი შეხედვით, ეს შეიძლება ჩანდეს კარგი მიზეზი ცვლადების არ გამოცხადებისთვის, მაგრამ სინამდვილეში, ვიდრე მანამდე აღმოჩნდება, რომ ერთ-ერთმა ცვლადმა მიიღო არასწორი მონაცემები, რომელიც უნდა მიეღო - მით უკეთესი! წინააღმდეგ შემთხვევაში, თუ პროგრამა გააგრძელებს მუშაობას, შედეგები შეიძლება იყოს არასწორი და მოულოდნელი და გაცილებით რთული იქნება შეცდომების მიზეზის პოვნა. ასევე შესაძლებელია, რომ მაკრო "წარმატებით" შესრულდეს. შედეგად, შეცდომა შეუმჩნეველი დარჩება და მუშაობა გაგრძელდება არასწორი მონაცემებით!

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

ვარიანტი აშკარა

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

Option Explicit

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

ეს კეთდება ასე:

  • Visual Basic Editor მენიუდან დააწკაპუნეთ ინსტრუმენტები > პარამეტრები
  • დიალოგში, რომელიც გამოჩნდება, გახსენით ჩანართი რედაქტორი
  • დააჭირეთ ყუთს მოითხოვს ცვლადის დეკლარაციას და დააჭირეთ OK

როდესაც ჩართულია, სტრიქონი ვარიანტი აშკარა ავტომატურად ჩასმული იქნება ყოველი ახალი მოდულის დასაწყისში.

ცვლადების და მუდმივების ფარგლები

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

ვარიანტი აშკარა Dim sVAT_Rate As Single Function Total_Cost() როგორც ორმაგი ... დასრულების ფუნქცია
თუ ცვლადი sVAT_Rate დეკლარირებული მოდულის დასაწყისშივე, მაშინ ამ ცვლადის ფარგლები იქნება მთელი მოდული (ანუ ცვლადი sVAT_Rate იქნება აღიარებული ამ მოდულის ყველა პროცედურის მიხედვით).

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

თუმცა, თუ სხვა მოდულში მდებარე რომელიმე ფუნქციას ეძახიან, მაშინ მისთვის ცვლადი sVAT_Rate არ იქნება ცნობილი.

ვარიანტი აშკარა ფუნქცია Total_Cost() როგორც Double Dim sVAT_Rate As Single ... დასრულების ფუნქცია
თუ ცვლადი sVAT_Rate გამოცხადებულია ფუნქციის დასაწყისში Საერთო ღირებულება, მაშინ მისი ფარგლები შემოიფარგლება მხოლოდ ამ ფუნქციით (ანუ ფუნქციის ფარგლებში Საერთო ღირებულება, შეგიძლიათ გამოიყენოთ ცვლადი sVAT_Rate, მაგრამ არა გარეთ).

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

ზემოთ ნაჩვენები მაგალითში, ცვლადი გამოცხადებულია მოდულის დონეზე საკვანძო სიტყვით მზე. თუმცა, შესაძლოა საჭირო გახდეს დეკლარირებული ცვლადების გამოყენება სხვა მოდულებში. ასეთ შემთხვევებში საკვანძო სიტყვის ნაცვლად ცვლადის გამოცხადება მზე საკვანძო სიტყვა უნდა იყოს გამოყენებული საჯარო.

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

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

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

ვარიანტი აშკარა საჯარო sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
ამ მაგალითში, საკვანძო სიტყვა საჯარო გამოიყენება ცვლადის გამოსაცხადებლად sVAT_Rate და მუდმივები iMax_Count. ამ გზით დეკლარირებული ელემენტების ფარგლები იქნება მთელი მიმდინარე პროექტი.

ეს ნიშნავს, რომ sVAT_Rate и iMax_Count ხელმისაწვდომი იქნება ნებისმიერი პროექტის მოდულში.

ვარიანტი აშკარა პირადი sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
ამ მაგალითში ცვლადის გამოცხადება sVAT_Rate და მუდმივები iMax_Count გამოყენებული საკვანძო სიტყვა პირადი. ამ ელემენტების ფარგლები არის მიმდინარე მოდული.

ეს ნიშნავს, რომ sVAT_Rate и iMax_Count ხელმისაწვდომი იქნება მიმდინარე მოდულის ყველა პროცედურაში, მაგრამ არ იქნება ხელმისაწვდომი სხვა მოდულების პროცედურებისთვის.

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