2010-01-02 56 views
9

Estoy intentando escribir una macro que copia el contenido de la columna 1 de la hoja 1 a la columna 2 en la hoja 2. Se trata de cómo el módulo se parece pero, cuando lo ejecuto, me sale¿Cómo puedo copiar columnas de una hoja a otra con VBA en Excel?

Run error de tiempo 9, subíndice fuera de rango.

Sub OneCell() 
    Sheets("Sheet1").Select 
    'select column 1 A1' 
    Range("A1:A3").Select 

    Selection.Copy 
    Range("B1:B3").Select 

    ActiveSheet.Paste 

    Sheets("Sheet2").Select 
    Application.CutCopyMode = False 
End Sub 

Respuesta

2

no estoy seguro de por qué te gustaría estar recibiendo subíndice fuera de rango a menos que sus hojas no se llama en realidad Sheet1 o Sheet2. Cuando cambio el nombre de mi Sheet2 a Sheet_2, aparece el mismo problema.

Además, parte de su código parece estar equivocado (lo pega antes de seleccionar la segunda hoja). Este código funciona bien para mí.

Sub OneCell() 
    Sheets("Sheet1").Select 
    Range("A1:A3").Copy 
    Sheets("Sheet2").Select 
    Range("b1:b3").Select 
    ActiveSheet.Paste 
End Sub 

Si no quiere saber acerca de lo que las hojas se llaman, puede utilizar índices enteros de la siguiente manera:

Sub OneCell() 
    Sheets(1).Select 
    Range("A1:A3").Copy 
    Sheets(2).Select 
    Range("b1:b3").Select 
    ActiveSheet.Paste 
End Sub 
8

Selección es a menudo innecesario. Prueba este

Sub OneCell() 
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value 
End Sub 
+1

Esta es la mejor solución que la solución anterior – Aaron

+1

Esto fue más rápido que la respuesta de David de 18'12 –

1

Si ha fusionado células,

Sub OneCell() 
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value 
End Sub 

que no sea copia células como son, donde el código anterior no copiar exactamente como se ven como (fusionada).

-1
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range, r As Range 
    Set rng = Intersect(Target, Range("a2:a" & Rows.Count)) 
    If rng Is Nothing Then Exit Sub 
    For Each r In rng 
     If Not IsEmpty(r.Value) Then 
     r.Copy Destination:=Sheets("sheet2").Range("a2") 
     End If 
    Next 
    Set rng = Nothing 
End Sub 
+4

La próxima vez, agregue una explicación a su solución –

24

Los siguientes me da buenos resultados en Excel 2007. Es simple, y realiza una copia completa (conserva todo el formato, etc.):

Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet2").Columns(2) 

"Columnas" devuelve un objeto Range , y entonces esto está utilizando el método "Range.Copy". "Destino" es una opción para este método; si no se proporciona, el valor predeterminado es copiar en el búfer de pegado. Pero cuando se proporciona, es una forma fácil de copiar.

Al copiar manualmente elementos en Excel, el tamaño y la geometría del destino deben admitir el rango que se está copiando.

Cuestiones relacionadas