Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Вступ

У цій статті описано, як використовувати змінні у Microsoft Excel процедурах Microsoft Visual Basic for Applications.

Додаткові відомості

Змінні під процедури

Потужна функція мов програмування – можливість зберігати певний елемент у змінній, щоб можна було використовувати вміст змінної або змінити його пізніше в процедурі. У цьому документі описано використання змінних у 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. У меню Insert (Вставлення) виберіть Module (Модуль).

  4. Введіть такий код:

    Sub Variable_Test()
        Dim x As Integer, y as Integer
        x = 10
        y = 100
        MsgBox "значення x " & x & _
        Chr(13) & "значення y до" & y
    End Sub

  5. Запустіть макрос Variable_Test. З'являється таке повідомлення:

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

  6. Натисніть кнопку OK.

  7. У рядку Variable_Test змінити такий рядок:

    x = 10

  8. to:

    x = "error"

  9. Запустіть макрос Variable_Test.

Ви отримаєте помилку під час виконання, тому що "помилка" не ціле число, і ви намагаєтеся призначити це значення рядка змінній integer 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, as seen by Macro1 is " & x'the next line runs Macro2 End Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End Sub

  3. Запустіть макрос1, і з'явиться таке повідомлення:

    x, as seen by Macro1 is 10

  4. Натисніть кнопку OK,і з'явиться таке повідомлення:

    x, as seen by Macro2 is

  5. Натисніть кнопку OK.

У макросі2 значення змінної x не відображається, оскільки змінна x є локальною для макросу Macro1.

Область приватного та загальнодоступного модуля

Змінні можна визначити в розділі оголошень модуля (у верхній частині модуля, над усіма під процедурами) і встановити область змінної за допомогою оператора Public, 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
    End Sub

  7. Запустіть Macro_1a макросу в першому модулі.

  8. Змінна x, оголошена як "Public x As Integer" (Загальнодоступна x як ціле число), усі три макроси в проекті мають доступ до значення x. У першому вікні повідомлення відображається значення 10. У другому полі повідомлення відображається значення 20 (оскільки x множиться на 2 Macro_1b). У третьому вікні повідомлення відображається значення 60 (оскільки значення x змінено на 20 у Macro_1b а потім його помножено на 3 в макросі2).

  9. Змініть рядок оголошення в першому модулі з:

       Public x As Integer

    to:

       Dim x As Integer

  10. Запустіть Macro_1a макросу.

  11. Змінна x, оголошена як "Dim x as Integer" (Dim x як ціле число), доступ до значення x мають лише макроси в першому модулі. Отже, у першому вікні повідомлення відображається значення 10, друге поле відображає значення 20, (оскільки x множиться на 2 в Macro_1b), а третє вікно повідомлення відображає значення 0 (оскільки значення x і неініціалізоване значення нуля використовуються макросом 2).

  12. Змініть рядок оголошення в першому модулі з:

      Dim x As Integer

    To:

        Private x As Integer

  13. Запустіть Macro_1a макросу.

  14. Ті самі вікна повідомлень відображаються за допомогою області приватних операторів, як і оператор Dim. Змінна x має таку саму область, як і в модулі, де її оголошено.


ПРИМІТКА. Якщо потрібно обмежити область змінної модулем, у якому вона оголошується, використовуйте оператор Privatestatement замість Dim. Обидві ці обидві дія досягають такого самого ефекту, але область пошуку зрозуміліша, якщо читати код, якщо використовується інструкція Private.
 

Термін експлуатації змінної

Час, протягом якого змінна зберігає його значення, називається часом життя. Значення змінної може змінитися протягом терміну служби, але вона зберігатиме значення. Крім того, якщо змінна втрачає область, вона більше не має значення.
 

Ініціалізація значення змінної

Під час запуску макросу всі змінні ініціалізуються в значення. Числова змінна ініціалізується до нуля, рядок змінної довжини ініціалізується в рядок нульної довжини (""), а рядок фіксованої довжини заповнюється кодом ASCII 0. Змінні змінної Variant ініціалізуються на Пусті. Пусту змінну представлено нульом у числовому контексті та рядком нульної довжини ("") у контексті рядка.

Змінні на рівні процедури

Якщо у вас є змінна, оголошена в макросі за допомогою оператора Dim, змінна зберігає її значення, поки макрос працює. Якщо цей макрос викликає інші макроси, значення змінної зберігається (недоступно для інших макросів), якщо також виконуються ці інші макроси.

Щоб продемонструвати, як працюють змінні на рівні процедури, виконайте такі дії:

  1. Вставте новий модуль у проект.

  2. У цьому модулі введіть обидва макроси:

    Sub Macro1()
        'set x як змінна рівня процедури
       Dim x As Integer
       MsgBox "ініціалізовано значення x " & x
       x = 10
        MsgBox "x is" & x
        'the next line runs Macro2
        Макрос2
        MsgBox "x досі " & x
    End Sub
    Sub Macro2()
        Повідомлення MsgBox "x, як видно в Macro2, " & x
    End Sub

  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, тому що як тільки Макрос1 зупиниться на кроці 6, значення змінної x втрачається. Таким чином, під час повторного запуску макросу1 на кроці 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. Запустіть макрос1, і з'явиться таке повідомлення:

    the initialized value of x is 10

  7. Натисніть кнопку OK,і з'явиться таке повідомлення:

    x is 20

  8. Натисніть кнопку OK.

Значення, що відображаються в повідомленнях, відрізняються вдруге, тому що змінна x оголошується як статична змінна, а змінна зберігає його значення після першого запуску Macro1.

ПРИМІТКА.  Якщо у вас є змінна на рівні модуля, час його експлуатації такий самий, як і статична змінна рівня процедури.

Щоб перевірити час життя змінної на рівні модуля, виконайте такі дії:

  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. Запустіть макрос1, і з'явиться таке повідомлення:

    the initialized value of x is 0

  3. Натисніть кнопку OK, і з'явиться таке повідомлення:

    x is 10

  4. Натисніть кнопку OK.

  5. Запустіть макрос1, і з'явиться таке повідомлення:

    the initialized value of x is 10

  6. Натисніть кнопку OK.

  7. Ви отримаєте таке повідомлення:

    x is 20

  8. Натисніть кнопку OK.

Значення, які відображаються в повідомленнях, відрізняються вдруге, тому що змінна x оголошується як статична змінна, і вона зберігає його значення після першого запуску Macro1.
 

Скидання проекту для скидання змінних

Щоб скинути значення статичної змінної або змінної на рівні модуля, натисніть кнопку Скинути в меню
Стандартна панель інструментів або кнопка Скинути в меню Виконати.

Якщо зробити це для проекту "Макрос1", а потім повторно виконати макрос1,значення змінної x ініціалізується знову до нуля, і ви отримаєте перше повідомлення:

    the initialized value of x is 0

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×