Excel VBA - ошибка «Требуется объект», когда значение диапазона не равно нулю

0

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

Конкретная часть кода, по которому я получаю сообщение об ошибке: And (диапазон («M5: M78») не равен нулю)

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

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
HeatherD
источник
Был в состоянии понять это. Я привык к программированию на SQL (особенно на SQL Server), поэтому я не так хорошо знаком с VBA. Я смог заставить мой код работать, используя And Not IsEmpty(Range("M" & i).Value)в конце оператора If.
HeatherD

Ответы:

0

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

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

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

Jonno
источник