variable - ¿Cómo puedo copiar columnas de una hoja a otra con VBA en Excel?




seleccionar rango variable vba (4)

No estoy seguro de por qué tendrías el subíndice fuera del alcance a menos que tus hojas no se llamaran en realidad Sheet1 o Sheet2 . Cuando renombro mi Sheet2 a Sheet_2 , obtengo el mismo problema.

Además, parte de tu código parece estar equivocado (lo pegas 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 desea saber cómo se llaman las hojas, puede usar í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

Intento escribir una macro que copie el contenido de la columna 1 de la hoja 1 a la columna 2 en la hoja 2. Así es como se ve el módulo pero, cuando lo ejecuto, obtengo

Error de tiempo de ejecución 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

Seleccionar a menudo es innecesario. Prueba esto

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

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

Lo siguiente funciona bien para mí 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, por lo que 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 igual que cuando se copian elementos manualmente en Excel, el tamaño y la geometría del destino deben ser compatibles con el rango que se está copiando.







excel-vba