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

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

  • Переменная была объявлена без указания типа. Если переменная объявлена без указания типа, по умолчанию используется тип 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 .

См. также