 <p>I prefer to avoid select, activate and selection in deference to direct addressing. The paste special, values can also be handled more efficiently by direct cell value transfer.</p> <pre><code>'make sure that the worksheet vars are set correctly set wsOrigen2 = &lt;other workbook&gt;.Sheets("Sheet1") set wsDestino = ThisWorkbook.Sheets("Sheet1") With wsOrigen2.Cells(1, 1).CurrentRegion wsDestino.Cells(Rows.Count, 1).End(xlUp) _ .Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Cells.Value End With set wsDestino = nothing set wsOrigen2 = nothing </code></pre> <p>If the workbooks are open and the worksheets are set correctly, that should be all that you really require.</p> <p>See <a href="http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros">How to avoid using Select in Excel VBA macros</a> for more methods on getting away from replying on select and activate.</p>