2015-02-10 3 views
1

Я пытаюсь настроить код vba для фильтрации листа данных и вырезания строк, содержащих определенные значения, на другие листы. Ниже приведен фрагмент для одного из этих фильтров. Пока я изо всех сил пытаюсь отладить эту линию.Excel-VBA filter and move results

myRange.Offset(1).Resize(myRange.Rows.Count - 1).SpecialCells(xlVisible).Cut 

Я продолжаю получать сообщение об ошибке, что я не могу запустить это на нескольких разделах. Любая помощь будет принята с благодарностью.

Sub MoveButton() 
Sheets("Sheet1").Activate 
Set myRange = Range(Range("A1"), Range("Z" & Cells.Rows.Count).End(xlUp)) 
myRange.Resize(1).AutoFilter 
myRange.AutoFilter Field:=13, Criteria1:="Closed" 
myRange.Offset(1).Resize(myRange.Rows.Count - 1).SpecialCells(xlVisible).Cut 
Sheets.Add After:=Sheets(Sheets.Count) 
Sheets("Closed").Activate 
ActiveSheet.Paste 
Application.CutCopyMode = False 
myRange.AutoFilter 

End Sub 

Хорошо, это я получил, используя макрос записи. Теперь я просто не знаю, как изменить диапазоны, чтобы они автоматически отбирали все отфильтрованные строки и копировали их и вставляли их в следующую строку wmpty на следующем листе.

Sub MoveCancelled() 

    Sheets("Sheet1").Select 
    Rows("2:2").Select 
    Selection.AutoFilter 
    Selection.AutoFilter 
    Range("A2").Select 
    ActiveWindow.ScrollColumn = 7 
    ActiveSheet.Range("$A$2:$Z$20").AutoFilter Field:=13,Criteria1:="Closed" 
    Rows(3).Select ' Selecting the row to copy, but it could be more than just one row. 
    Selection.Copy 
    Sheets("Closed").Select 
    Rows(114).Select ' Selecting the paste location at the bottom of the next sheet. 
    ActiveSheet.Paste 


End Sub 

Я нашел эту тему и в конечном итоге отказался от всех моих других усилий.

Autofilter Macro, then copy visible data ONLY and paste to next available row

Это решение работало отлично.

+0

Сначала выполните упражнение вручную с * Macro Recorder * включен ......... затем изучить полученный код. –

+0

Не знаете, почему вы изменяете размер перед фильтром, вы должны фильтровать его из строки заголовка – Davesexcel

+0

Я попытался использовать Macro Recorder. Я добавил этот код в сообщение выше. Я не уверен, как сделать диапазоны автоматически выбирать все отфильтрованные строки для вырезания/копирования или для выбора первой пустой строки на закрытом листе. – Tyler

ответ

0

Я считаю, что это .cut операция дает вам горе, попробуйте это,

Sub MoveButton() 
    Dim ws As Worksheet, MyRng As Range, rws As Long, Frng As Range 
    Dim sh As Worksheet 
    Set ws = Worksheets("Proposals") 
    With ws 
     rws = .Cells(Rows.Count, "A").End(xlUp).Row 
     Set MyRng = .Range(.Cells(1, 1), .Cells(rws, "Z")) 
     MyRng.AutoFilter Field:=13, Criteria1:="Closed" 
     Set Frng = .Range(.Cells(2, 1), .Cells(rws, "Z")).SpecialCells(xlCellTypeVisible) 
    End With 

    Sheets.Add After:=Sheets(Sheets.Count) 
    Set sh = ActiveSheet 
    Frng.Copy sh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
    Frng.EntireRow.Delete 
    ws.AutoFilterMode = 0 
End Sub 
+0

Это выглядит хорошо, но я получаю сообщение об ошибке, которое говорит, что это не будет работать с перекрывающимися разделами. Не уверен, что это значит. – Tyler

+0

Либо я, что вы не сказали нам? – Davesexcel