Visual Basic

Используйте Option Explicit

Опубликовано: 16 июн 10
Рейтинг:

Автор: Shocker.Pro
Прислал: Shocker.Pro

Напишите в заголовке каждого своего модуля (то есть перед всеми другими переменными, функциями и процедурами):

Option Explicit


Что это значит?
Это значит, что отныне все переменные, которые вы используете в своей программе, нужно будет объявить явно с помощью оператора объявления Dim.
То есть, если у вас есть процедура:
Private Sub Command1_Click()

For i = 1 To 5
  k = "Проход №" + CStr(i)
  '..............
  '..............
Next

End Sub

она должна стать такой:
Private Sub Command1_Click()

Dim i As Integer, k As String
For i = 1 To 5
  k = "Проход №" + CStr(i)
  '..............
  '..............
Next

End Sub



Зачем это нужно?
Если вам дали ссылку на эту статью, значит в своей программе вы допустили ошибку или проявили непонимание, которые можно устранить с помощью Option Explicit. Дело в том, что в случае отсутствия этой опции, VB/VBA встретив незнакомое ему слово, считает его новой переменной. Хотя вы, скорее всего, имели ввиду совершенно другое.


Типичные ошибки:
MyNiceVariable = 5
'..............
If MyNceVariable = 5 Then 'ошибка в имени переменной
                          'VBA решит, что вы ввели новую переменную

y = xmod10 'вариант ошибки в синтаксисе (вместо y = x mod 10)
           'VBA решит, что xmod10 - это новая переменная

Workbooks(Книга1).Close 'ошибка в использовании текстовой константы (нет кавычек)
                        'VBA решит, что Книга1 - это новая переменная

k = "Hello World"
'..............
'..............
'..............
p = k + 5 'использование переменной неверного типа (так как тип переменной
          'не объявлен явно в Dim)


Это далеко не полный перечень возможных ошибок. Нередки также случаи путаницы русских и английских букв в имени переменной.
Еще раз отмечу, что использование Option Explicit существенно сократит время решения вашей задачи, потому что вместо ожидания ответа на форуме вы получите вполне осмысленное сообщение от компилятора.

Как включить:
Tools => Options => Editor => Require Variable Declaration
Включите этот флажок и Option Explicit будет появляться автоматически во всех новых модулях/формах/классах (в старых не появится, нужно будет прописать вручную)

Комментарии


  • Заказать seo поисковую оптимизацию сайта, Заказать услуги по продвижению сайта По всем возникшим вопросам Вы можете обратиться в скайп логин <b>pokras7777</b> <a href=http://seoprofisional.ru/index.php?route=product/category&path=75><b>Аренда выделенных серверов по приемлимым ценам</b></a> Раскрутка сайта под ключ

  • 22 сентября 2012, 10:03 Казанский

    Браво, Shocker.Pro! Теперь поставлю ссылку на эту статью в свою подпись!
    Добавлю: Option Explicit очень полезен, если проект состоит из нескольких модулей. Например, был модуль с двумя процедурами, которые используют одну переменную:

    Dim MyVar

    Sub sub1()
    MyVar = 3.14
    sub2
    End Sub

    Sub sub2()
    MsgBox MyVar
    End Sub

    Все работает. Допустим, проект разросся, решили перенести часть процедур в другой модуль:

    ' Module1
    '---------------

    Dim MyVar

    Sub sub1()
    MyVar = 3.14
    sub2
    End Sub

    ' Module2
    '---------------

    Sub sub2()
    MsgBox MyVar
    End Sub

    Запускаем sub1 - получаем пустой msgbox :((
    Если в Module2 поставить Option Explicit, то становится понятно, что переменная MyVar не видна в Module2. И понятно, как это исправить:

    'Module1
    '----------------
    Option Explicit

    Public MyVar

    Sub sub1()
    MyVar = 3.14
    sub2
    End Sub

    'Module2
    '----------------
    Option Explicit

    Sub sub2()
    MsgBox MyVar
    End Sub

  • полезно...

  • благодарю!

  • 18 апреля 2011, 16:22 Charles Weyland

    Эндрю
    Жестко ты сморозил

  • 23 июня 2010, 22:08 Ципихович Эндрю

    Вы здесь не причём, но если бы я увидел сообщение в виде подсказки например, может Вы хотели написать x mod 10, цены бы ему не было, так что Микрософту есть над чем поработать в том числе и сообщение Вариабле нот дефинед написать на русском языке, если он сомневается я даже готов по аналогии
    Как включить:
    Tools => Options => Editor => Require Variable Declaration
    Включить: РУССКИЙ

  • может создадите раздел MSFLEXGRID
    и каждый скидывал бы полезные моменты с ним?



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Visual Basic / Используйте Option Explicit