2017-09-19 6 views
0

私はいくつかの例を見ましたが、それらは.Selectと.Activateを使用しています。私は誰もがあなたがそれらから離れようとするべきだと言っているので、それらをもう使用しない方法を学ぼうとしています。1枚のシートから他のシートに最初の空白行まで行を貼り付けます

私は行を取って、もう一方のシートの最初の空白の行にコピーしたいと思います。私は近くにいたが、それはちょうど動作していない。

UsdRws = Range("A" & Rows.Count).End(xlUp).Row 


With Sheets("Totals by Department") 
    .Range("A1:Z" & UsdRws).autofilter Field:=1, Criteria1:="1450" 
    .Range("A2:Z" & UsdRws).SpecialCells(xlCellTypeVisible).EntireRow.COPY 
End With 


Set NextRow = Range("A" & Sheets(2).UsedRange.Rows.Count + 1) 


Sheets(2).NextRow.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    Application.CutCopyMode = False 

Set NextRow = Nothing 

最初の部分は完全にコピーされています。もう1枚のシートに貼り付ける手助けが必要です。また、コードを整理するための他の推奨事項も取り上げます。私が言ったように、私はより良く書くことを学ぼうとしています。私はそれを追加して編集しているが、今は失われているので、2番目の部分は面倒です。

答えて

2

あなたの "NextRow"オブジェクトはRangeオブジェクトですが、それをSheets(2)のメソッドまたはプロパティであるかのように呼び出しています。

シート(2)を取り外してみます。次の行から始めてください。

Set NextRow = Sheets(2).Range("A" & Sheets(2).UsedRange.Rows.Count + 1) 
NextRow.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
Application.CutCopyMode = False 
+0

を望むものかもしれません。それは他のシートには行きません。私はそれを実際に選択する必要がありますか?またはそれを有効にする? – Robillard

+0

私はこれを編集しました。もう一度やり直してください。元のコードはNextRowのどのシートに該当するのではないので、Excelは自動的にそれをActiveSheetに設定します。これをSheets(2).Rangeとして修飾すると、右のシートにコピーされます。 – Smith

+0

ありがとう!素晴らしい仕事!私は仕事を辞めようとしています。今私は夜中それについて考えていないだろう – Robillard

0
' UsdRws is equal the last used row on whichever sheet is active at the moment that this code runs 

UsdRws = Range("A" & Rows.Count).End(xlUp).Row 

' this code properly references ranges on a specific worksheet, regardless of which worksheet is active 

With Sheets("Totals by Department") 
    .Range("A1:Z" & UsdRws).autofilter Field:=1, Criteria1:="1450" 
    .Range("A2:Z" & UsdRws).SpecialCells(xlCellTypeVisible).EntireRow.COPY 
End With 

' NextRow is reference to a cell on whichever sheet is active at the moment that this code runs 
' but the row referenced is same as the first emply cell on Sheets(2) 

Set NextRow = Range("A" & Sheets(2).UsedRange.Rows.Count + 1) 

' NextRow is already a range .... so it should be NextRow.PasteSpecial ...... 

Sheets(2).NextRow.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    Application.CutCopyMode = False 

Set NextRow = Nothing 

これは、あなたがそれが正しい私がコピーした上で貼り付けたように見えます

With Sheets("Totals by Department") 
    UsdRws = .Range("A" & .Rows.Count).End(xlUp).Row 
    .Range("A1:Z" & UsdRws).autofilter Field:=1, Criteria1:="1450" 
    .Range("A2:Z" & UsdRws).SpecialCells(xlCellTypeVisible).EntireRow.COPY 
End With 

Set NextRow = Sheets(2).Range("A" & Sheets(2).UsedRange.Rows.Count + 1) 

NextRow.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

Application.CutCopyMode = False 

Set NextRow = Nothing 
関連する問題