una - seleccionar hoja excel vba
¿Cómo puedo copiar columnas de una hoja a otra con VBA en Excel? (5)
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
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
Seleccionar a menudo es innecesario. Prueba esto
Sub OneCell()
Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
Si ha combinado celdas,
Sub OneCell()
Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub
que no copia las celdas como son, donde el código anterior se copia exactamente como se ven (fusionadas).
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.