Вопрос или проблема
Ниже представлен мой код, в котором возникает ошибка. Я отметил строку, на которой возникает ошибка, жирным шрифтом (т.е. ** в начале и в конце строки **).
Конкретная часть кода, где я получаю ошибку: 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". Убедитесь также, что все остальные обращения к диапазонам корректны, и правильно определите основную логику, интенсивно работая с диапазонами. Это не только устранит ошибку, но и сделает ваш код более стабильным и работающим в соответствии с задумками.
Применив данное исправление, ваш код будет проверять диапазон ячеек на наличие непустых значений, что соответствует вашей цели.