2017-06-22 10 views
0

hereの方法を使用して、複数のワークシートのデータを1つに集約しようとしています。Excel VBAコピー/ペーストエラー

差は私だけので、コピーされた各ファイルからのデータの単一の列をしたい私は、このように自分のコードを変更しているされています。これは、最初の反復(それをコピーし、正しく最初のソースファイル)のため

With wsMaster 
    erow = .Range("B" & .Rows.Count).End(xlUp).Row 'get the last row in column B 
    '~~> Copy from the file you opened 
    wsTemp.Range("A2:A" & .Rows.Count).Copy 'copy data in column A starting at row 2 
    'to however long the data runs for 
    '~~> Paste on your master sheet below last used row in column B 
    .Range("B" & erow).Offset(1, 0).PasteSpecial xlPasteValues 
End With 

動作しますが、 2番目のソースファイルに到達すると、「実行時エラー '1004':PasteSpecialメソッドまたはRangeクラスが失敗しました」というエラーがスローされます。

デバッグモードで手動でクリックしようとしましたが、コピーされたデータをCtrl + Vでクリックすると、範囲のサイズと形状が一致しません。ただし、行2以上のセルをクリックすると、マクロにコピーされたデータが行なわれ、不平を言わずに貼り付けられます。

アイデア?あなたがWith wsMasterの中にネストされている場合

答えて

0

wsTemp.Range("A2:A" & .Rows.Count).Copy

この行が問題の原因で、

wsTemp.Range("A2:A" & Range("A2").SpecialCells(xlCellTypeLastCell).Row).Copy

+0

は、これが働いていました。ありがとうございました! –

1

にこれをchengeしてください、それはあなたがWith文の中のプレフィックス.を追加するすべてのオブジェクトを意味し、ありますこのオブジェクトに関連しています(wsMasterワークシート)。

ですから、最後の行を探すためにしようとしているあなたの最初の場所は正しい

erow = .Range("B" & .Rows.Count).End(xlUp).Row 'get the last row in column B 

あるしかし、あなたは(wsTempワークシートから)別のシートからコピーしようとしている第二位は、ではありません正しい。下の行:

wsTemp.Range("A2:A" & .Rows.Count).Copy 'copy data in column A starting at row 2 

.Rows.CountwsMasterシート(とないwsTemp)内の行の数を探していることを意味します。

だからあなたがその行を変更する必要があります。

wsTemp.Range("A2:A" & wsTemp.Rows.Count).Copy 

私は列「A」に占有されているすべてのセルをコピーするには、次の構文を好む:

wsTemp.Range("A2:A" & wsTemp.Cells(wsTemp.Rows.Count, "A").End(xlUp).Row).Copy 
+0

ありがとうShai。 'wsTemp.Range(" A2:A "&wsTemp.Rows.Count).Copy'は機能しませんでした。 しかし、 'wsTemp.Range(" A2:A "&wsTemp.Cells(wsTemp.Rows.Count、" A ")。End(xlUp).Row).Copy'しました。 少し早いので、私はクリスの反応を答えとしてマークしました。 –

+0

@EPこれは大丈夫です。あなたの知識のために、xlCellTypeLastCellを使用してください。最後の行を取得する最も信頼できる方法ではない可能性があります –