2014-06-23 3 views
1

Я новичок в VBA и столкнулся с этой проблемой при попытке цикла For Each. Я довольно долго обволакивал это и не мог найти ответы на этот форум.Ошибка объекта при выполнении Для каждого цикла VBA

Я подозреваю, что это глупая ошибка, и я был бы очень признателен, если бы мог помочь. Заранее большое спасибо!

Sub AngleAndEComparison() 

    Dim rngAngle As Range 
    Dim Nrow As Integer 
    Dim n#, placeholder# 

    Nrow = 1 
    n = 0 
    Set rngAngle = Intersect(Columns(5), ActiveSheet.UsedRange) 
    ' Set rngAngle = ActiveSheet.Columns(5) 
    For Each cell In rngAngle 
     If cell.Value <> "" Then 
      If Range("E" & Nrow).Value > 75 And Range("E" & Nrow).Value < 105 Then 
       placeholder = 1 
      If Range("G" & Nrow).Value >= 3 And placeholder = 1 Then 
        n = n + 1 
        cell.Interior.ColorIndex = 36 
        cell.Interior.ColorIndex = 36 
        placeholder = 0 
      End If 
      Nrow = Nrow + 1 
     End If 
    Next 

    ActiveSheet.Cells(5, 11).Value = n 
    ActiveSheet.Cells(5, 10).Value = "Elongated Cells within 15°:" 
End Sub 
+0

В какой строке вы получаете сообщение об ошибке ..? –

+0

Я получаю сообщение об ошибке в этой строке: Для каждой ячейки In rngAngle – user3766096

+1

Я бы опробовал квалификацию всех диапазонов, например, в одном случае это 'ActiveSheet.Columns (5)', а в другом это просто 'Column5'. Кроме того, попробуйте создать переменную рабочего листа и установить ее в «ActiveSheet» в начале вашего кода. Таким образом, если другой лист активирован, ваш код все еще указывает на лист, на который ссылается переменная. –

ответ

0

Dim Cell as Range.

и один End if отсутствует, или вы должны разместить then placeholder = 1 в той же строке.

перед циклом for each cell, вы можете добавить if not rngAngle is nothing then

1

Перед началом работы с Range объекта, который вы установили с помощью функции, вы всегда должны проверить, что объект Range не был установлен в Nothing. В этом случае ниже код будет выйти, если Intersect вернулся Nothing

Set rngAngle = Intersect(Columns(5), ActiveSheet.UsedRange) 
' Set rngAngle = ActiveSheet.Columns(5) 
If rngAngle Is not Nothing Then 
    Exit Sub 

Также как и другие отметили, вы недостающий End If

Смежные вопросы