Преминаване към основното съдържание
Поддръжка
Влизане с Microsoft
Влезте или създайте акаунт.
Здравейте,
Изберете друг акаунт.
Имате няколко акаунта
Изберете акаунта, с който искате да влезете.

Въведение

Тази статия описва как да използвате променливи в Microsoft Excel подпрограми в Microsoft Visual Basic за приложения.

Повече информация

Променливи в подпрограма

Мощна функция на езиците за програмиране е възможността да съхранявате нещо в променлива, така че съдържанието на променливата да може да се използва или да може да бъде променено по-късно в процедурата. Този документ разглежда следното използване на променливи в Visual Basic:

  • Как се декларират променливите.

  • Процедурите и проектите, които могат да използват променливата.

  • Продължителността на живота на променлива.

Деклариране на променлива в макрос

Най-простият начин да декларирате променлива в макрос е да използвате командата Dim. Следният ред декларира две променливи като цели суми:

    Dim x As Integer, y As Integer

Когато x и y са зададени като цели, вие казвате на Visual Basic да остави достатъчно памет за цяла променлива (2 байта за x и y) и че информацията, която се съхранява в x или y, е цяло число между -32768 и 32767.

ЗАБЕЛЕЖКА: Ако декларирате повече от една променлива с помощта на една команда Dim, трябва да зададете типа на данните за всяка променлива.

Ако не зададете типа на данните за всяка променлива, както е в Visual Basic по-долу, само променливата y е зададена като цяло числова променлива. Променливата x ще бъде тип на варианта:

    Dim x, y As Integer

За допълнителна информация вижте Тип данни Variant по-долу.
 

За да извършите тест на променлива, изпълнете следните стъпки:

  1. Запишете и затворете всички отворени работни книги и след това отворете нова работна книга.

  2. Стартирайте Visual Basic редактора (натиснете ALT+F11).

  3. В менюто Вмъкване щракнете върху Модул.

  4. Въведете следния код:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "стойността на x е " & x & _
        Chr(13) & "стойността на y е " & y
    Краен под

  5. Изпълнение на Variable_Test макрос. Получавате следното съобщение:

    the value of x is 10
    the value of y is 100

  6. Щракнете върху OK.

  7. В Variable_Test макрос променете следния ред:

    x = 10

  8. до:

    x = "error"

  9. Изпълнение на Variable_Test макрос.

Ще получите грешка по време на изпълнение, защото "грешка" не е цяло число и се опитвате да присвоите тази стойност на низа към целочислината променлива x.
 

Резюме на типа данни

Това са често срещаните типове данни с променливи:

често срещани типове данни с променливи

тип данни Variant

Ако не зададете тип данни, когато декларирате променлива, или изобщо не декларирате променлива, Visual Basic автоматично задава типа на данните на варианта за тази променлива. По-долу са представени предимствата на променливите, които са декларирани като този тип данни:

  • Променливите могат да съдържат низ, дата, час, булева или числова стойност.

  • Променливите могат да преобразуват стойностите, които съдържат автоматично.

Недостатъкът е, че променливите на вариантите изискват поне 16 байта памет. 16 байта памет може да бъде значителна в големи процедури или в сложни модули.

За да видите как работи това в Variable_Test макрос, изпълнете следните стъпки:

Променете кода в макроса Variable_Test на:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Изпълнение на Variable_Test макрос.

Няма да получите грешка, защото можете да присвоите нещо на променливите на варианти x и y.

ЗАБЕЛЕЖКА: Можете също да оставите следния ред и макросът все още ще работи, тъй като променливите x и y се третират като типове данни Variant:

    Dim x, y

Обхват на променлива

Когато декларирате променлива, тя може или да не се вижда от други макроси в същия модул, в други модули или в други проекти. Тази наличност на променлива в модулите се нарича обхват. Трите типа обхват са ниво на процедура, ниво на частния модул и ниво публичен модул. Обхватът зависи от това как и къде декларирате вашата променлива или променливи.

Обхват на ниво процедура

Променлива с обхват на ниво процедура не се вижда извън процедурата, в която е декларирана. Ако зададете стойността на променлива, която има обхват на ниво процедура, съдържанието на тази променлива няма да се вижда от други макроси.

За да проверите дали променлива с обхват на ниво процедура не се вижда извън процедурата, в която е обявена, изпълнете следните стъпки:

  1. Вмъкване на нов модул във вашия проект.

  2. Въведете и двата от следните макроси в този модул:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, както се вижда от macro1 е " & x "следващият ред изпълнява Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, както се вижда от макрос2 е " & x End Sub

  3. Изпълнете Macro1 и ще получите следното съобщение:

    x, as seen by Macro1 is 10

  4. Щракнете върху OKи ще получите следното съобщение:

    x, as seen by Macro2 is

  5. Щракнете върху OK.

Макрос2 не показва стойност за променливата x, тъй като променливата x е локална към Macro1.

Обхват на ниво частен и публичен модул

Можете да дефинирате променливи в секцията за декларации на модул (в горната част на модула, преди всички подпрограми) и да зададете обхвата на вашата променлива с помощта на публичната команда, командата Dim или Private командата. Ако поставите публичната команда пред променливата, променливата ви ще бъде достъпна за всички макроси във всички модули в проекта. Ако поставите командата Dim или Private пред променливата, променливата ви е налична само за макроси в модула, където се декларира.

За да видите разликата между публичната команда и командата Dim, изпълнете следните стъпки:

  1. Запишете и затворете всички отворени работни книги и след това отворете нова работна книга.

  2. Стартирайте Visual Basic редактора.

  3. Вмъкване на модул във вашия проект.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. Вмъкване на друг модул във вашия проект.

  6. Въведете следния код в този модул:


    Sub Macro2()     x = x * 3
        MsgBox x
    Краен под

  7. Изпълнете Macro_1a макрос в първия модул.

  8. С променливата x, обявена като "Публичен x As Integer", и трите макроса в проекта имат достъп до стойността на x. Първото поле за съобщение показва стойност 10. Второто поле за съобщение показва стойност 20 (тъй като x се умножава по 2 в Macro_1b). Третото поле за съобщение показва стойност 60 (тъй като стойността на x е променена на 20 в Macro_1b и след това е умножена по 3 в макро2).

  9. Промяна на реда на декларацията в първия модул от:

       Public x As Integer

    до:

       Dim x As Integer

  10. Изпълнете макроса Macro_1a.

  11. С променливата x, обявена като "Dim x As Integer", само макросите в първия модул имат достъп до стойността на x. Така че първото поле за съобщение показва стойност 10, второто поле за съобщение показва стойност 20 (тъй като x се умножава по 2 в Macro_1b), а третото поле за съобщение показва стойност 0 (тъй като Макрос2 не вижда стойността на x и неинициализираната стойност на нула се използва от макрос 2).

  12. Промяна на реда на декларацията в първия модул от:

      Dim x As Integer

    до:

        Private x As Integer

  13. Изпълнете макроса Macro_1a.

  14. Същите полета за съобщения се показват с помощта на обхвата на обхвата на частния отчет, докато са използвали командата Dim. Променливата x има същия обхват, личен за модула, където е декларирана.


ЗАБЕЛЕЖКА: Ако искате обхватът на вашата променлива да бъде ограничен до модула, където е обявена, използвайте Privatestatement вместо командата Dim. И двете постигат един и същ ефект, но обхватът е по-ясен, когато четете кода, ако използвате командата "Личен".
 

Живот на променлива

Времето, през което дадена променлива запазва стойността си, е известно като неговата продължителност на живот. Стойността на променлива може да се промени през целия й живот, но ще запази стойност. Освен това, когато дадена променлива загуби обхват, тя вече няма стойност.
 

Инициализиране на стойността на променлива

Когато изпълните макрос, всички променливи се инициализират до стойност. Числова променлива се инициализира до нула, низът за дължина на променливата се инициализира до низ с нулева дължина (""), а низът с фиксирана дължина се попълва с ASCII код 0. Променливите на вариантите се инициализират на "Празно". Празна променлива се представя от нула в числов контекст и низ с нулева дължина ("") в контекст на низ.

Променливи на ниво процедура

Ако имате променлива, която е обявена в макрос с помощта на командата Dim, променливата запазва стойността си, стига макросът да се изпълнява. Ако този макрос извива други макроси, стойността на променливата се запазва (но не е налична за другите макроси), стига тези други макроси също да се изпълняват.

За да покажете как работят променливите на ниво процедура, изпълнете следните стъпки:

  1. Вмъкване на нов модул във вашия проект.

  2. Въведете и двата от следните макроси в този модул:

    Sub Macro1()
        'set x as a procedure level variable
       Dim x As Integer
       MsgBox "инициализираната стойност на x е " & x
       x = 10
        MsgBox "x е " & x
        'следващият ред се изпълнява Macro2
        Макрос2
        MsgBox "x е все още " & x
    Краен под
    Sub Macro2()
        MsgBox "x, както се вижда от Macro2 е " & x
    Краен под

  3. Изпълнение на макрос1.

  4. Получавате следното съобщение:

        the initialized value of x is 0

  5. Щракнете върху OKи ще получите съобщението:

     x is 10

  6. Щракнете върху OKи ще получите следното съобщение:

    x, as seen by Macro2 is

  7. Щракнете върху OK.

  8. Макрос2 не показва стойност за променливата x, тъй като променливата x е локална към Macro1. Получавате следното съобщение:

    x is still 10

  9. Щракнете върху OK.

  10. Изпълнение на макрос1.

Получавате същите съобщения, които са описани в стъпки от 3 до 6, тъй като веднага щом Macro1 спре да се изпълнява в стъпка 6, стойността на променливата x е загубена. Следователно, когато изпълните отново Macro1 в стъпка 7, първото съобщение показва стойността на x като нула (инициализираната стойност).

Статична ключова дума

Ако променлива на ниво процедура е обявена с помощта на статичната ключова дума, променливата запазва стойността си, докато проектът не бъде нулиран. Следователно, ако имате статична променлива, следващия път, когато се обадите на вашата процедура, статичната променлива се инициализира до последната й стойност.

За да видите как работи статичната ключова дума, изпълнете следните стъпки:

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. Изпълнение на макрос1.

  3. Ще получите съобщението:

    the initialized value of x is 0

  4. Щракнете върху OKи ще получите съобщението:

    x is 10

  5. Щракнете върху OK.

  6. Изпълнете Macro1 и получавате следното съобщение:

    the initialized value of x is 10

  7. Щракнете върху OKи ще получите следното съобщение:

    x is 20

  8. Щракнете върху OK.

Стойностите, които се показват в съобщенията, са различни втория път, тъй като променливата x се обявява като статична променлива и променливата запазва стойността си, след като изпълните макрос1 за първи път.

ЗАБЕЛЕЖКА:  Ако имате променлива на ниво модул, продължителността й на живот е същата като ако е статична променлива на ниво процедура.

За да проверите продължителността на живота на променлива на ниво модул, изпълнете следните стъпки:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. Изпълнете Macro1 и ще получите следното съобщение:

    the initialized value of x is 0

  3. Щракнете върху OK и ще получите следното съобщение:

    x is 10

  4. Щракнете върху OK,

  5. Изпълнете Macro1 и ще получите това съобщение:

    the initialized value of x is 10

  6. Щракнете върху OK.

  7. Получавате следното съобщение:

    x is 20

  8. Щракнете върху OK.

Стойностите, които се показват в съобщенията, са различни втория път, тъй като променливата x се обявява като статична променлива и запазва стойността си, след като изпълните макрос1 за първи път.
 

Нулиране на проект за нулиране на променливи

Ако искате да нулирате стойността за статична променлива или за променлива на ниво модул, щракнете върху бутона Нулиране на
Стандартна лента с инструменти или щракнете върху Нулиране в менюто Изпълнение.

Ако направите това за проекта Macro1 и след това изпълните отново Macro1, стойността на променливата x се инициализира обратно на нула и получавате първото съобщение:

    the initialized value of x is 0

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.

Беше ли полезна тази информация?

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?
Като натиснете „Подаване“, вашата обратна връзка ще се използва за подобряване на продуктите и услугите на Microsoft. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

Благодарим ви за обратната връзка!

×