2016-09-30 7 views
0

在庫シートからシート(アーカイブ)を開き、2番目のシートのデータをフィルタ処理し、フィルタ処理したデータをインベントリのシートにコピーしようとしています。フィルタリングされたデータが、最初の連続した範囲の行からのみデータをコピーする点を除いて、すべてが機能しています。私のコードは次の通りですフィルタリングされたデータを使用した設定値

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

表を使って作業する場合は、表示されているセルを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

ありがとうございます。以前はdatabodyrangeについて聞いたことがありません。私は今それを試してみましょう。このコードは.valueのようにクリップボードなしで動作しますか? – Scionara

+0

私はそれを試したところ、wrkBk.Worksheets( "Archive")を使用してListObjects( "Archive")にエラーが発生しました "9" "subscript out of range" – Scionara

+0

ワークシート ' listobject'を見つけ、そこに座っている 'databodyrange'を見つけました。通常の範囲と同じ情報が含まれていたので、試しました。それはクリップボードを使用します( 'Copy'を使います)。 –

関連する問題