Excel VBA – Получаю ошибку “Требуется объект”, когда указываю, что диапазон не является пустым.

Вопрос или проблема

Ниже представлен мой код, в котором возникает ошибка. Я отметил строку, на которой возникает ошибка, жирным шрифтом (т.е. ** в начале и в конце строки **).

Конкретная часть кода, где я получаю ошибку: And (Range(“M5:M78”) Is Not Null)

Если диапазон является объектом, почему я не могу указать, что этот диапазон (выше) не равен нулю?

Option Explicit

Sub ResetWorksheetMonth1()

Dim i As Long

Dim LastRow As Long

LastRow = Range("X" & Rows.Count).End(xlUp).Row

With Worksheets("Analysis Worksheet").Activate

For i = 5 To LastRow

**If Range("M" & i).Value = 0 And (Range("M5:M78") Is Not Null) And Range("N" & i).Value > 0 And Range("O" & i).Value > 0 And Range("P" & i).Value > 0 _
    And Range("Q" & i).Value > 0 And Range("R" & i).Value > 0 And Range("S" & i).Value > 0 And Range("T" & i).Value > 0 _
    And Range("U" & i).Value > 0 And Range("V" & i).Value > 0 And Range("W" & i).Value > 0 And Range("X" & i).Value > 0 Then**

Range("M" & i).Value = Range("N" & i).Value

Range("N" & i).Value = Range("O" & i).Value

Range("O" & i).Value = Range("P" & i).Value

Range("P" & i).Value = Range("Q" & i).Value

Range("Q" & i).Value = Range("R" & i).Value

Range("R" & i).Value = Range("S" & i).Value

Range("S" & i).Value = Range("T" & i).Value

Range("T" & i).Value = Range("U" & i).Value

Range("U" & i).Value = Range("V" & i).Value

Range("V" & i).Value = Range("W" & i).Value

Range("W" & i).Value = Range("X" & i).Value

Range("X" & i).Value = Range("Z" & i).Value

Range("Y" & i).Formula = "=SUM(" & Range(Cells(i, 13), Cells(i, 24)).Address(False, False) & ")"

Range("Z" & i).Value = Null

Range("AL" & i).Formula = "=SUM(" & Range(Cells(i, 26), Cells(i, 37)).Address(False, False) & ")"

End If

Next i

Если вы просто хотите проверить, что все ячейки в диапазоне пусты, вы можете использовать

WorksheetFunction.CountA(Range("M5:M78")) <> 0

Имейте в виду, что то, что вы пытаетесь сделать, будет проверять, равен ли весь диапазон null, а не проходить по каждой ячейке в этом диапазоне и проверять их содержимое.

Ответ или решение

Ошибка "Object Required" в VBA Excel обычно возникает, когда код пытается обратиться к объекту, который не существует или неправильно использован. В вашем случае проблема в выражении Range("M5:M78") Is Not Null. Давайте разберёмся, почему это происходит и как это исправить.

Теория

В Excel VBA объект Range представляет диапазон ячеек на рабочем листе. Когда вы используете условие Is Not Null, вы предполагаете, что Range сравнивается с Null. Однако, это некорректно. В VBA оператор Is используется для сравнения ссылок на объекты. Null применяется для проверки значений переменных Variant, но не объектов Range.

Пример

Чтобы проверить, не пустой ли диапазон, вам нужно убедиться, что хотя бы одна ячейка содержит данные. Как было предложено, это можно сделать с помощью функции WorksheetFunction.CountA, которая возвращает количество непустых ячеек в указанном диапазоне. Если результат больше нуля, значит, диапазон не пуст.

Пример правильного использования:

If Range("M" & i).Value = 0 And WorksheetFunction.CountA(Range("M5:M78")) <> 0 And Range("N" & i).Value > 0 And Range("O" & i).Value > 0 Then
    ' основной блок выполнения
End If

Применение

В вашем коде нужно заменить строку с некорректной проверкой Is Not Null на проверку с WorksheetFunction.CountA. Это решит проблему с ошибкой "Object Required". Убедитесь также, что все остальные обращения к диапазонам корректны, и правильно определите основную логику, интенсивно работая с диапазонами. Это не только устранит ошибку, но и сделает ваш код более стабильным и работающим в соответствии с задумками.

Применив данное исправление, ваш код будет проверять диапазон ячеек на наличие непустых значений, что соответствует вашей цели.

Оцените материал
Добавить комментарий

Капча загружается...