2012-09-09 17 views
6

Esto debería ser realmente simple, pero he estado buscando foros y respuestas SO durante horas para encontrar la respuesta sin suerte, así que estoy (a regañadientes) creando una pregunta mía.Copiando rango y pegando en el nuevo libro de trabajo

Lo que intento hacer es simplemente crear un nuevo libro de trabajo y pegar un rango de otro libro de trabajo en ese libro de trabajo. Suena simple ..?

Mi libro de trabajo original, llamemos a Book1. Intento crear un nuevo libro de trabajo, Book2, donde copiaré los valores de las celdas A1: B10 a.

Aquí hay una versión de mi código (empezando por Libro1 abierto):

Range("A1:B10").Copy 
Set NewBook = Workbooks.Add 
    With NewBook 
     .SaveAs Filename:="Book2.xls" 
    End With 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

Esto da un error "PasteSpecial de clase Range falló". He probado las siguientes correcciones sin suerte:

  • añade 'Cuadernos de Trabajo ('Book2.xls') Activar.' Al código
  • eliminado los argumentos adicionales en la línea de PasteSpecial
  • intentaron' .Paste 'en lugar de' .PasteSpecial'
  • cambiado 'Selection.PasteSpecial' a 'ActiveSheet.PasteSpecial'
  • referencia explícitamente la extensión de copia, incluyendo el libro y hoja de referencia
  • crear el nuevo libro primero, a continuación, la realización de la c antes de reactivar el nuevo libro de trabajo y pegar

Ninguna de las soluciones anteriores funciona ... cualquier sabiduría en esta etapa sería gratamente recibida!

Respuesta

16

¿Esto es lo que estás intentando? He comentado el código para que no tenga ningún problema para entender lo que hace el código.

Option Explicit 

Sub Sample() 
    Dim wbI As Workbook, wbO As Workbook 
    Dim wsI As Worksheet, wsO As Worksheet 

    '~~> Source/Input Workbook 
    Set wbI = ThisWorkbook 
    '~~> Set the relevant sheet from where you want to copy 
    Set wsI = wbI.Sheets("Sheet1") 

    '~~> Destination/Output Workbook 
    Set wbO = Workbooks.Add 

    With wbO 
     '~~> Set the relevant sheet to where you want to paste 
     Set wsO = wbO.Sheets("Sheet1") 

     '~~>. Save the file 
     .SaveAs Filename:="C:\Book2.xls", FileFormat:=56 

     '~~> Copy the range 
     wsI.Range("A1:B10").Copy 

     '~~> Paste it in say Cell A1. Change as applicable 
     wsO.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ 
     SkipBlanks:=False, Transpose:=False 
    End With 
End Sub 
3

Esto funciona para mí.

Private Sub CommandButton1_Click() 
Dim newWB As Workbook, currentWB As Workbook 
Dim newS As Worksheet, currentS As Worksheet 

'Copy the data you need 
Set currentWB = ThisWorkbook 
Set currentS = currentWB .Sheets("Sheet1") 
currentS .Range("A:M").Select 
Selection.Copy 

'Create a new file that will receive the data 
Set newWB = Workbooks.Add 
    With newWB 
     Set newS = newWB.Sheets("Sheet1") 
     newS.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ 
     SkipBlanks:=False, Transpose:=False 
     'Save in CSV 
     Application.DisplayAlerts = False 
     .SaveAs Filename:="C:\Temporary.csv", FileFormat:=xlCSV 
     Application.DisplayAlerts = True 
    End With 
End Sub 
Cuestiones relacionadas