2016-12-01 6 views
2

これを5時間以上探して、正しい解決策を見つけることができませんでした。これは私の仕事の中で私が主にすることではありません。エラーコード1004 VBA Cant Solveをコピー/ペーストするとき

基本的には、行をフィルタリングしたシートから別のシートにコピーし、それを貼り付ける列Aの最後の行に配置しています。

これは、私はいくつかの変更をした前に、完全に見つけて、今では任意の助けを感謝して理解される、完全に壊れて、ここではスパゲッティコードの壊れた塊がある....

Sheets("Working Sheet").Select 
Selection.Copy 
Sheets("Sent Items").Select 

Dim LastRow As Long 
With ActiveSheet 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 
End With 

Range("A" & LastRow).Select 
ActiveSheet.Paste 
Application.CutCopyMode = False 
Columns("K:K").EntireColumn.AutoFit 
Sheets("Sent Items").Select 

それは言って、エラー1004が発生し働いていましたサイズは同じである必要があります???貼り付けによってエラーが発生します。どんな助けも良い答えを探していました。

+0

サイズは通常からの呼び出しをmergerdする予定です元の( "コピー")部分はありますか? – Jeremy

+0

コピーにはマージされたセルはありませんが、別の投稿でそれを読んでください。 –

答えて

1

フィルタリングされた行をコピーしているので、SpecialCellsメソッドを使用することは常に良い方法です。

以下のリファクタリングされたコードを参照してください。また、常にavoid using selectに最適で、オブジェクトで直接作業してください。

Dim wsWorking as Worksheet 
Set wsWorking = Sheets("Working Sheet") 

With wsWorking 

    .Select 
    Selection.SpecialCells(xlCellTypeVisible).Copy 

End With 

Dim wsSent as Worksheet 
Set wsSent = Sheets("Sent Items") 

With wsSent 

    Dim LastRow As Long 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 

    .Range("A" & LastRow).PasteSpecial 

    .Columns("K:K").EntireColumn.AutoFit 

    .Range("A1").Select 'to make sure you end up on that sheet 

End With 
+0

これは間違いなくコードのこのセクションをきれいにしましたが、まだ動作していません。 > Sheets( "Working Sheet")。Selection.SpecialCells(xlCellTypeVisible).Copy Object doesntがプロパティまたはメソッドをサポートしていません。 –

+0

@DSilva - 今すぐ試してください。あなたが絶対にしなければ、私は「選択」に対して助言します。範囲を完全に定義する方が良いでしょう。しかし、マクロの先頭で選択したレイズを実際に使用する必要がある場合は、私の編集でこれを回避する必要があります。 –

+1

@ScottHoltzman、これは、マクロ "Working Working Sheet"が "_active_"であることを前提としているので、 'rngSelection'は実際に選択されたセルを実際にキャプチャします。この「選択」をどのように特定するかというOPの手がかりがないので、「選択」オブジェクトを使用する前に「ワークシート」(「作業シート」)の「選択」を残す方が安全だと思います。 – user3598756

1

次のようにあなたのコードをリファクタリングできます

Worksheets("Working Sheet").Select 
Selection.SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Sent Items").Cells(Rows.Count, 1).End(xlUp).Offset(1) 

か、あなたが貼り付け値に興味がある場合のみ:同じこと

Dim area As Range 

Worksheets("Working Sheet").Select 
For Each area In Selection.SpecialCells(xlCellTypeVisible).Areas 
    Worksheets("Sent Items").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(area.Rows.Count, area.Columns.Count).Value = area.Value 
Next area 
関連する問題