过滤循环问题

时间:2014-12-02 21:55:08

标签: excel-vba vba excel

我遇到了此代码的问题,该代码被用于从另一个工作簿和特定工作表中获取数据。当我输入我在工作簿上输入的特定数据时,它应该对列C中的数据进行排序和过滤。代码正在处理直到排序和过滤器部分,似乎它复制了我的工作簿上的数据,而不仅仅是过滤和提取所需的数据。以下是我将代码分开的代码,以便更好地理解。 打开另一个工作簿的代码的开头:

代码的第3部分到最后部分是调试过程中突出显示的部分,"工作簿(mname)部分到最后。

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

以下是代码的开头:

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

0 个答案:

没有答案