2014-02-19 4 views
0

Я пытаюсь пропустить строки в моем листе, добавив ячейки B-F текущей строки в диапазон, который нужно скопировать на другой лист. Ячейки в строке (BF) следует добавлять только в диапазон, если значение в столбце G является «Активным», и если значение в столбце C имеет значение (не пусто/ничего/null /! # VALUE ...)1004: Ошибка определения приложения при попытке проверить содержимое ячеек

Я попробовал несколько способов вокруг него, но я получаю 1004: App/Object определенную ошибку выключить первый Если оператор

MsgBox показывает мне диапазон действительно, я попытался квалифицировать к мельчайшей подробно, а также использовать Cells() вместо .range безрезультатно.

MsgBox (ActiveWorkbook.Worksheets("Staging").range("G" & Cells(rows.Count, 5).End(xlUp).Row).Value) 

For i = Cells(rows.Count, 5).End(xlUp).Row To i = 1 Step -1 
    If ActiveWorkbook.Worksheets("Staging").Cells("G" & i).Value = "Active" Then 
     If Not IsError(ActiveWorkbook.Worksheets("Staging").range("C" & i)) Then 
      Set selectRange = range("B" & i & ":F" & i) 
      Set copyRange = Union2(copyRange, selectRange) 
     Else 
     'Do Nothing 
     End If 
    Else 
     'Do Nothing 
    End If 
Next 

Я просто пропустил что-то простое здесь? Я уже несколько часов стучаю по голове.

... и для вас орлиные глаза там, Union2 не опечатка, просто определенные пользователем функции, чтобы избежать не в состоянии присоединиться диапазоны, установленные для «Nothing»

+0

Я думаю, что вы не можете использовать строку с клетками ... клетки («A1») возвращает эту ошибку, и ваш Синтаксис действительно, очень странно ... – CRondao

+0

Точно. Вместо этого используйте Range. – Kapol

ответ

0

Попробуйте следующее:

  1. Измените вторую строчку в

    For i = Cells(rows.Count, 5).End(xlUp).Row To 1 Step -1

  2. Смените третьей линии для

    If ActiveWorkbook.Worksheets("Staging").Range("G" & i).Value = "Active" Then

0

Для начала изменения:

If ActiveWorkbook.Worksheets("Staging").Cells("G" & i).Value = "Active" Then 

Для

If ActiveWorkbook.Worksheets("Staging").Range("G" & i).Value = "Active" Then 

Или

If ActiveWorkbook.Worksheets("Staging").Cells(i , 7).Value = "Active" Then 

Вы также должны полностью определить все диапазоны, как много ваших диапазоны, указывающие на активный лист и НЕ «постановка» Если это не активный лист, но только, чтобы убедиться, что вы должны использовать следующий код:

With ActiveWorkbook.Worksheets("Staging") 
MsgBox (.Range("G" & .Cells(.Rows.Count, 5).End(xlUp).Row).Value) 

For i = .Cells(.Rows.Count, 5).End(xlUp).Row To 1 Step -1 
    If .Range("G" & i).Value = "Active" Then 
     If Not IsError(.Range("C" & i)) Then 
      Set SelectRange = .Range("B" & i & ":F" & i) 
      Set copyRange = Union(copyRange, SelectRange) 
     Else 
     'Do Nothing 
     End If 
    Else 
     'Do Nothing 
    End If 
Next 
End With 

Также вы используете copyRange в этой области без его объявления, я предполагаю, что вы назначаете его в диапазон ранее в вашем коде, но если это не так, сделайте это.

0

Это неправильно:

ActiveWorkbook.Worksheets("Staging").Cells("G" & i).Value 

Вы можете использовать эти:

ActiveWorkbook.Worksheets("Staging").Cells(i, 6) 

ActiveWorkbook.Worksheets("Staging").range(cells(i, 6), cells(i, 6)).value 

ActiveWorkbook.Worksheets("Staging").range("G" + strings.trim(str(i))).value 
Смежные вопросы