我尝试从库存表中打开工作表(存档),过滤第二个工作表中的数据,然后将过滤后的数据复制到库存中的工作表。一切正常,除了过滤后的数据只复制第一个连续范围内的行数据。我的代码如下
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或者我是否坚持使用复制粘贴方法?
答案 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