使用过滤数据设置值

时间:2016-09-30 12:29:57

标签: excel excel-vba excel-2010 vba

我尝试从库存表中打开工作表(存档),过滤第二个工作表中的数据,然后将过滤后的数据复制到库存中的工作表。一切正常,除了过滤后的数据只复制第一个连续范围内的行数据。我的代码如下

Dim LastRow As Long
Dim nOoFrOWS As Long
Dim oSht As Worksheet






Workbooks.Open ("C:\Inventory\Archive.xlsm") '<- at opening a workbook it becomes the active one
Set oSht = ActiveWorkbook.Worksheets("Archive") '<-- set the destination worksheet in the activeworkbook

With ActiveSheet
.ListObjects("Archive").Range.AutoFilter Field:=12, Criteria1:=mOrder
nOoFrOWS = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1                              '# of rows in Inventory
End With
Unload Me

ThisWorkbook.Sheets("RAM").Range("A2:K" & nOoFrOWS).Value = oSht.Range("Archive[[QTY]:[RTK]]").SpecialCells(xlCellTypeVisible).Cells.Value


oSht.Parent.Close False

我做错了什么?

编辑:我不知道它是否相关,但档案中的范围(我从中复制)不是整个表格。我有更多的行,但这些都是我需要的应用程序。

另外,有没有办法在没有剪贴板的情况下使用.value或者我是否坚持使用复制粘贴方法?

1 个答案:

答案 0 :(得分:0)

在使用表格时,您可以复制databodyrange中的可见单元格。

无需激活或选择任何内容 - 只需使用引用的文件&amp;片材。

Sub Test()

    Dim wrkBk As Workbook
    Dim mOrder As Long

    mOrder = 5

    'You can reference the workbook without it being active.
    Set wrkBk = Workbooks.Open("C:\Inventory\Archive.xlsm")

    With wrkBk.Worksheets("Archive").ListObjects("Archive")
        .Range.AutoFilter Field:=12, Criteria1:=mOrder
        'Copy the DataBodyRange (Range would include the headers).
        .DataBodyRange.Resize(, 11).SpecialCells(xlVisible).Copy Destination:=ThisWorkbook.Worksheets("RAM").Range("A2")
    End With

End Sub