2016-09-30 60 views
0

我試圖從我的清單中打開工作表(存檔),過濾第二工作表中的數據,然後將過濾的數據複製到清單中的工作表。除了已過濾的數據僅複製第一個連續範圍內的行中的數據之外,一切正常。我的代碼如下使用已過濾的數據設置值

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 

我在做什麼錯了?

編輯:我不知道它是否恰當,但存檔(我從中複製)的範圍不是整個表格。我有更多的行,但這些都是我需要的這個應用程序。

另外,有沒有辦法做到這一點,沒有剪貼板通過使用。值或我堅持使用複製粘貼方法?

回答

0

當你使用表格時,你可以複製databodyrange中的可見單元格。

無需激活或選擇任何東西 - 只需使用參考文件&工作表。

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 
+0

謝謝。我以前沒有聽說過數據倉庫。我現在就試一試。 .value是否可以在沒有剪貼板的情況下工作? – Scionara

+0

我只是試過它,當它到達與wrkBk.Worksheets(「存檔」)。ListObjects(「存檔」)它給出了一個錯誤'9'「下標超出範圍」 – Scionara

+0

我剛剛查看了當地人的工作表' listobject'並找到了'databodyrange'坐在那裏。包含與正常範圍相同的信息,所以我試了一下。它確實使用剪貼板(使用'Copy')。 –