Excel VBA - Błąd „Wymagany obiekt”, gdy zakres nie jest pusty

0

Poniżej znajduje się mój kod, w którym pojawia się błąd. Zaznaczyłem linię, na której błąd występuje pogrubioną czcionką (tj. ** na początku i na końcu linii **).

Konkretna część kodu, na którym pojawia się błąd, to: I (zakres („M5: M78”) nie jest zerowy)

Jeśli zakres jest obiektem, dlaczego nie mogę stwierdzić, że ten zakres (powyżej) nie jest zerowy?

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
źródło
Był w stanie to rozgryźć. Jestem przyzwyczajony do programowania w SQL (szczególnie SQL Server), więc nie znam się tak dobrze na VBA. Był w stanie zmusić mój kod do działania, używając And Not IsEmpty(Range("M" & i).Value)na końcu instrukcji If.
HeatherD

Odpowiedzi:

0

Jeśli próbujesz tylko sprawdzić, czy wszystkie komórki w tym zakresie są puste, możesz użyć

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

Pamiętaj, że to, czego próbujesz, sprawdzi, czy cały zakres jest równy zeru, a nie zapętlisz i sprawdzisz zawartość każdej komórki w tym zakresie.

Jonno
źródło