Excel 过滤器循环问题
我对这段代码有一个问题,它被用来从另一个工作簿和特定工作表获取数据。当我在工作簿中输入特定数据时,它应该对C列中的数据进行排序和过滤。代码一直工作到排序和筛选部分,它似乎是在复制工作簿上的数据,而不是只筛选和提取所需的数据。下面是代码,为了更好地理解,我将把它分成几个部分。 打开其他工作簿的代码开头: 代码的第三部分到最后一部分是调试过程中突出显示的部分,即最后的WorkbookmName部分Excel 过滤器循环问题,excel,vba,Excel,Vba,我对这段代码有一个问题,它被用来从另一个工作簿和特定工作表获取数据。当我在工作簿中输入特定数据时,它应该对C列中的数据进行排序和过滤。代码一直工作到排序和筛选部分,它似乎是在复制工作簿上的数据,而不是只筛选和提取所需的数据。下面是代码,为了更好地理解,我将把它分成几个部分。 打开其他工作簿的代码开头: 代码的第三部分到最后一部分是调试过程中突出显示的部分,即最后的WorkbookmName部分 Workbooks(mname).Sheets(msheet).Range(Cells(1, 1),
Workbooks(mname).Sheets(msheet).Range(Cells(1, 1), Cells(1, LastCol)).Copy Destination:=Workbooks("Master_RRR.xlsm").Sheets("MGPR1").Range("A1")
I = 17
Do While Workbooks("Master_RRR.xlsm").Sheets("Master log").Cells(17, "Y").Value <> ""
mbank = Workbooks("Master_RRR.xlsm").Sheets("Master log").Cells(17, "Y").Value
match = Application.WorksheetFunction.match(mbank, Workbooks(mname).Sheets(msheet).Range("C1:C" & LastRow), 0)
repeat = Application.WorksheetFunction.CountIf(Workbooks(mname).Sheets(msheet).Range("C1:C" & LastRow), mbank)
till = Application.WorksheetFunction.CountA(Workbooks("Master_RRR.xlsm").Sheets("MGPR1").Range("C:C"))
Workbooks(mname).Sheets(msheet).Range(Cells(match, "C"), Cells(match + repeat - 1, LastCol)).Copy Destination:=Workbooks("Master_RRR.xlsm").Sheets("MGPR1").Range("A" & till + 1)
I = I + 1
Loop
当您将名称定义为ActiveWorkbook时,什么时候需要激活它才不是活动的?我喜欢您正在做的事情,尤其是在顶部。一旦代码转换为打开另一个工作簿mname,则不再是包含代码的活动工作簿。我指的是name=Application.ActiveWorkbook.name,然后是Windowsname。在它之后立即激活。
Sub getdata()
Dim mastername As String
Dim count As Long
Dim match As Long
Dim repeat As Long
Dim path As String
Dim status As String
Dim name As String
Dim mpath As String
Dim cpath As String
Dim LastRow As Long
Dim LastCol As Integer
Dim mbank As String
Dim mname As String
mpath = Sheets("Master log").Cells(14, "Y").Value
mname = Sheets("Master log").Cells(15, "Y").Value
msheet = Sheets("Master log").Cells(16, "Y").Value
Sheets("MGPR1").Range("A1:AA50000").ClearContents
name = Application.ActiveWorkbook.name
cpath = Application.ActiveWorkbook.path & "\"
Windows(name).Activate
'--open Management report workbook if not already open
If CheckFileIsOpen(mname) = False Then
Workbooks.Open mpath & mname
End If
'-------------------------------------------
Windows(mname).Activate
For Each ws In ActiveWorkbook.Worksheets
ws.Visible = xlSheetVisible
If ws.Visible = True Then
End If
Next ws
Sheets(msheet).Select
'select full data
With ActiveSheet
LastRow = .Cells(.Rows.count, "A").End(xlUp).Row
End With
With ActiveSheet
' LastCol = .Cells(1, .Columns.count).End(xlToLeft).Column
LastCol = 22
End With
'--------------------- put filter
Range(Cells(1, 1), Cells(LastRow, LastCol)).Select
Selection.AutoFilter
Range("K2").Select
ActiveWorkbook.Worksheets(msheet).AutoFilter.Sort.SortFields. _
Add Key:=Range("C1:C" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(msheet).AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
Range(Cells(1, 1), Cells(LastRow, LastCol)).Select
Selection.AutoFilter
Range("H5").Select