2015-07-10 2 views
0

Я выполняю итерацию через столбцы (от B до E) и пытаюсь получить уникальные значения из каждого столбца в ячейку в другой книге. Итерация происходит только один раз, не получает повторяется (при х = 3), и я получаю во время выполнения ошибки 1004: приложения или объекта определяется ошибкаУсовершенствованный фильтр не работает при итерациях, ошибка во время выполнения 1004

Dim LastCellRow As Integer 
Dim inputRng As Range 
Dim rng As Range 

LastCellRow = Workbooks(MainFile).Sheets(1).Range("N3").End(xlDown).Row 

For x=2 To 5 
    wkbTemp.Worksheets("Specific").Range(Cells(2, x), Cells(2, x).End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:="", CopyToRange:=Workbooks(MainFile).Worksheets(1).Range("I4"), Unique:=True 

    Workbooks(MainFile).Sheets(1).Activate 

    LastCell = Range("I5").End(xlDown).Address 

    For Each rng In Range(Cells(5, 9), LastCell) 
     If Cells(LastCellRow + 1, x + 12) = "" Then 
      Cells(LastCellRow + 1, x + 12) = rng.Value 
     Else 
      Cells(LastCellRow + 1, x + 12) = Cells(LastCellRow + 1, x + 12) & "," & rng.Value 
     End If 
    Next 
Next 

После исследования в Интернете, Я пробовал этот вариант и их комбинации. Я также попытался активировать wkbTemp или MainFile перед итерацией, но не повезло.

With wkbTemp.Sheets("Specific") 
     wkbTemp.Worksheets("Specific").Range(.Cells(2, x), .Cells(2, x).End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:="", CopyToRange:=Workbooks(MainFile).Worksheets(1).Range("I4"), Unique:=True 
End With 

Спасибо!

ответ

0

Не разрешил полностью, но нашел «почему» проблемы. ...CopyToRange:=Workbooks(MainFile).Worksheets(1).Range("I4") Нельзя копировать один и тот же диапазон снова и снова. Я создал новую колонку для каждой итерации, и это получилось отлично. Возможно, очистка диапазона после каждой итерации будет работать; не пробовал.

0

У меня была аналогичная проблема, когда я получил ошибку 1004 при использовании метода AdvancedFilter и копировал в другой диапазон. Оказалось, что диапазон, который я копировал, имел заголовок в первой строке, так что, возможно, переписывание данных вызвало это в моем случае. Я удалил заголовок из первой строки, и vba работал. Затем я вернул заголовок, после того как он работал один раз без заголовка, и тот же код VBA работал с заголовком. Мой CopyToRange - это целый столбец (столбец H), потому что я не знаю, сколько строк потребуется, поскольку я фильтрую уникальные записи.

Вот что работал (writeRow является Integer):.

ThisWorkbook.Worksheets ("Расчеты") Range ("D1: D" & writeRow) .AdvancedFilter Действие: = xlFilterCopy, CopyToRange: = ThisWorkbook. Таблицы («Расчеты»). Столбцы (8), Уникальные: = True

Я также смог изменить на CopyToRange на другой лист, чем диапазон для расширенного фильтра, и он тоже работал!

Вот код для копирования на другой лист:. ThisWorkbook.Worksheets ("Расчеты") Диапазон ("D1: D" & writeRow) .AdvancedFilter Действие: = xlFilterCopy, CopyToRange: = ThisWorkbook.Worksheets ("Лист1 "). Колонны (8), Уникальные: = True