Excel VBA - 在多次迭代后停止在筛选器上选择可见行

时间:2015-03-05 19:17:03

标签: sorting excel-vba pasting vba excel

我的代码从TextBox1获取文件名,打开该文件并索引B列中的所有唯一值。然后在TextBox2中获取第二个文件,文件名,并根据第一个文件中的当前索引对其进行过滤。然后,它会获取筛选结果并将它们复制到新工作簿中的工作表中。然后在新工作簿中生成一个新工作表以粘贴下一个筛选结果。

我的问题是我有很多行数据,并且由于某种原因,经过多次迭代后才会选择过滤后的数据。我的程序在启动时选择所有已过滤的数据,但在某些时候它只是开始选择标题而不是所有可见的单元格。如果我遗漏某些内容或者有快速的解决方法,请告诉我。谢谢。

Sub NewFileGenerate()
Dim I As Integer
Dim N As Integer
Dim X As Integer
Dim IndexedCell As String

X = 1

Windows(TextBox1.Value).Activate
'Need to count only populated cells
I = Sheets(1).Columns(2).Cells.SpecialCells(xlCellTypeConstants).Count
Set Newbook = Workbooks.Add
For N = 2 To I - 1
    Application.CutCopyMode = True

    Windows(TextBox1.Value).Activate
    IndexedCell = Cells(N, 2).Value
    Windows(TextBox2.Value).Activate
    With Sheets(1)
        With .Range("A1", "Z" & I - 1)
            .AutoFilter Field:=5, Criteria1:=IndexedContract
            .SpecialCells(xlCellTypeVisible).Copy
        End With
    End With
    Newbook.Activate
    ActiveSheet.Paste Destination:=Sheets(X).Range("A1:Z1")
    Cells.Select
    Selection.Font.Size = 10
    Cells.EntireColumn.AutoFit
    Cells.Select
    X = X + 1
    If X > 3 Then
        Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sheet" & X
    End If
    Application.CutCopyMode = False

Next N

End Sub

1 个答案:

答案 0 :(得分:1)

我猜测您的源工作表(textbox2.value)的行数多于索引工作表(textbox1.value)。您将I设置为索引工作表中的行数,然后告诉自动过滤器仅使用该行数。您需要更改行"使用.Range(" A1"," Z"& I - 1)"所以它会获取源工作表中的所有行。