Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 过滤器循环问题_Excel_Vba - Fatal编程技术网

Excel 过滤器循环问题

Excel 过滤器循环问题,excel,vba,Excel,Vba,我对这段代码有一个问题,它被用来从另一个工作簿和特定工作表获取数据。当我在工作簿中输入特定数据时,它应该对C列中的数据进行排序和过滤。代码一直工作到排序和筛选部分,它似乎是在复制工作簿上的数据,而不是只筛选和提取所需的数据。下面是代码,为了更好地理解,我将把它分成几个部分。 打开其他工作簿的代码开头: 代码的第三部分到最后一部分是调试过程中突出显示的部分,即最后的WorkbookmName部分 Workbooks(mname).Sheets(msheet).Range(Cells(1, 1),

我对这段代码有一个问题,它被用来从另一个工作簿和特定工作表获取数据。当我在工作簿中输入特定数据时,它应该对C列中的数据进行排序和过滤。代码一直工作到排序和筛选部分,它似乎是在复制工作簿上的数据,而不是只筛选和提取所需的数据。下面是代码,为了更好地理解,我将把它分成几个部分。 打开其他工作簿的代码开头:

代码的第三部分到最后一部分是调试过程中突出显示的部分,即最后的WorkbookmName部分

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