Excel VBA - 在多次迭代后停止选择过滤器上的可见行
Excel VBA - Stops Selecting Visible Rows on Filter after many interations
我的代码从 TextBox1 获取一个文件名,打开该文件并通过 B 列中的所有唯一值建立索引。然后它获取第二个文件,TextBox2 中的文件名,并根据当前索引从第一个文件。然后它获取过滤后的结果并将它们复制到新工作簿中的 sheet。然后在新工作簿中生成一个新的sheet来粘贴下一个过滤结果。
我的问题是我有很多行数据,由于某种原因,经过多次迭代后过滤的数据没有被选中。我的程序在启动时会选择所有过滤后的数据,但在某些时候它只是开始选择 headers 而不是所有可见单元格。如果我遗漏了什么或者是否有快速解决方法,请告诉我。谢谢。
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
我猜您的源工作表 (textbox2.value) 的行数比索引工作表 (textbox1.value) 多。您将 I 设置为等于索引工作表中的行数,然后告诉自动过滤器仅使用该行数。您需要更改行 "With .Range("A1", "Z" & I - 1)" 以便它获取源工作表中的所有行。
我的代码从 TextBox1 获取一个文件名,打开该文件并通过 B 列中的所有唯一值建立索引。然后它获取第二个文件,TextBox2 中的文件名,并根据当前索引从第一个文件。然后它获取过滤后的结果并将它们复制到新工作簿中的 sheet。然后在新工作簿中生成一个新的sheet来粘贴下一个过滤结果。
我的问题是我有很多行数据,由于某种原因,经过多次迭代后过滤的数据没有被选中。我的程序在启动时会选择所有过滤后的数据,但在某些时候它只是开始选择 headers 而不是所有可见单元格。如果我遗漏了什么或者是否有快速解决方法,请告诉我。谢谢。
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
我猜您的源工作表 (textbox2.value) 的行数比索引工作表 (textbox1.value) 多。您将 I 设置为等于索引工作表中的行数,然后告诉自动过滤器仅使用该行数。您需要更改行 "With .Range("A1", "Z" & I - 1)" 以便它获取源工作表中的所有行。