Поделиться через


Переменная объекта или переменная блока не задана

Ссылка на недопустимую переменную объекта. Эта ошибка может возникать по нескольким причинам:

  • Переменная была объявлена без указания типа. Если переменная объявлена без указания типа, по умолчанию используется тип Object.

    Например, переменная, объявленная с Dim x типом Object; переменной, объявленной с Dim x As String типом, будет иметь тип String.

    Подсказка

    Оператор Option Strict запрещает неявное ввод, которое приводит к типу Object . Если тип не указан, возникнет ошибка во время компиляции. См. инструкцию Option Strict.

  • Вы пытаетесь ссылаться на объект, которому присвоено значение Nothing.

  • Вы пытаетесь получить доступ к элементу переменной массива, которая не была правильно объявлена.

    Например, массив, объявленный как products() As String активирует ошибку при попытке ссылаться на элемент массива products(3) = "Widget". Массив не имеет элементов и обрабатывается как объект.

  • Вы пытаетесь получить доступ к коду в блоке With...End With до инициализации блока. With...End With Блок должен быть инициализирован путем выполнения точки входа инструкцииWith.

Замечание

В более ранних версиях Visual Basic или VBA эта ошибка также была активирована путем назначения значения переменной без использования Set ключевого слова (x = "name" вместо Set x = "name"). Ключевое Set слово больше не является допустимым в Visual Basic .Net.

Исправление этой ошибки

  1. Задайте значение Option StrictOn , добавив следующий код в начало файла:

    Option Strict On
    

    При запуске проекта в списке ошибок компилятора появится любая переменная, указанная без типа.

  2. Если вы не хотите включить Option Strict, выполните поиск кода для любых переменных, которые были указаны без типа (Dim x вместо Dim x As String) и добавьте нужный тип в объявление.

  3. Убедитесь, что вы не ссылаетесь на переменную объекта, которая была задана Nothing. Выполните поиск кода для ключевого слова Nothingи проверьте код, чтобы объект не был задан Nothing до тех пор, пока вы не на него ссылаетесь.

  4. Прежде чем получить доступ к ним, убедитесь, что все переменные массива измерены. Вы можете назначить измерение при первом создании массива (Dim x(5) As String вместо Dim x() As Stringэтого) или использовать ReDim ключевое слово для задания измерений массива перед первым доступом к нему.

  5. Убедитесь, что With блок инициализирован, выполнив точку входа инструкции With .

См. также